通过Logback登录到App Engine request_log

我已经使用App Engine标准环境-Java 11在 Ninja Framework 上构建了一个应用程序,并使用了Ninja随附的注入Logger,这是 Apache Logback 。通常,这会记录到实例的stdout,因此我的所有消息都采用单行输入格式,并且记录在stdout日志通道中,这在尝试跟踪时不方便生产中的错误。

是Google文档的指南,该文档使用Logback [1]登录到Stackdriver,但我没有尝试过:日志现在以application.log结尾,仍然是一个单独的频道,而request_log频道为空。
我尝试通过将projects/dive-site-overwatch/logs/appengine.googleapis.com%2Frequest_log作为<log>中的logback.xml元素来更改建议的配置,这导致所有请求均由于URL编码的固相线中的“格式无效”而失败。相反,按原样添加固相线会导致非法字符的产生。

我当前部署的Logback配置如下(您可以说我的构想已耗尽...):

<configuration>
    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

    <appender name = "STDOUT" class = "ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="tech.provingground.dive_overwatch.etc.logging.layouts.StackdriverLayout">
                <pattern>%-4relative [%thread] %-5level %logger{35} - %msg</pattern>
            </layout>
        </encoder>
    </appender>

    <appender name = "CLOUD" class = "com.google.cloud.logging.logback.LoggingAppender">
        <log>application.log</log> <!-- Optional : default java.log -->
        <flushLevel>WARN</flushLevel> <!-- Optional : default ERROR -->
        <enhancer>tech.provingground.dive_overwatch.etc.logging.enhancers.TestEnhancer</enhancer>
        <encoder>
            <layout class="tech.provingground.dive_overwatch.etc.logging.layouts.StackdriverLayout">
                <pattern>%-4relative [%thread] %-5level %logger{35} - %msg</pattern>
            </layout>
        </encoder>
    </appender>

    <root level = "info">
        <appender-ref ref = "CLOUD" />
<!--        <appender-ref ref = "STDOUT" />-->
    </root>
</configuration>

查看应用程序中的标准,我可以看到许多日志行,它们指向来自Stackdriver的拒绝请求:

java.lang.RuntimeException: java.util.concurrent.TimeoutException: Waited 6 seconds for com.google.common.util.concurrent.CollectionFuture$ListFuture@77fbc3ba[status=PENDING,info=[futures=[[com.google.api.core.ApiFutureToListenableFuture@772ddfb8,com.google.api.core.ApiFutureToListenableFuture@7d905614,com.google.api.core.ApiFutureToListenableFuture@7396512d,com.google.api.core.ApiFutureToListenableFuture@5ad9baf6]]]]
    at com.google.cloud.logging.LoggingImpl.flush(LoggingImpl.java:581)
    at com.google.cloud.logging.LoggingImpl.write(LoggingImpl.java:562)
    at com.google.cloud.logging.logback.LoggingAppender.append(LoggingAppender.java:215)
    at com.google.cloud.logging.logback.LoggingAppender.append(LoggingAppender.java:70)
    at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:84)
[...]

如果是身份验证错误,我可以理解403或类似的状态码,但是标准环境应该提供服务帐户,并自动授予 Logs Writer 角色。

>

我有点被困在这里。有什么方法可以将我的应用程序日志和其余请求日志放在常规request_log中?


[1] https://cloud.google.com/logging/docs/setup/java#logback_appender_for

shenwenxia715 回答:通过Logback登录到App Engine request_log

您应该签出这个example来进行带日志记录的JSON记录!关键元素是它包含跟踪ID,以便消息与请求日志相关。

来自示例:

placeholder
本文链接:https://www.f2er.com/3119365.html

大家都在问