google-app-engine - 分配给错误请求日志的 Google AppEngine 应用程序日志
问题描述
当我查看我的 GAE 项目的 Google 日志查看器中的日志时,我发现我自己在代码中编写的日志经常被分配给错误的请求。大多数情况下,日志在生成日志条目的请求之后直接分配给请求。
由于GAE中每个应用程序日志的根都必须是一个请求,这意味着错误的请求有时会被标记为错误,因为之前的另一个请求产生了错误,但之后的日志以某种方式分配给了请求。
我真的没有做任何特别的事情,我使用 Ktor 作为我的 servlet,并有一个拦截器,当在返回状态 500 之前发生异常时创建一个日志。
我通过 SLF4J 使用 Java 日志记录和谷歌云日志记录处理程序,但在此之前我使用通过 SLf4J 进行 logback 并遇到了同样的问题。
日志本身的内容也是正确的,请求的返回状态,日志条目的级别,消息,一切都ok。
我认为这可能是因为我在单个请求期间使用了 kotlin 并切换了协程上下文,但在某些情况下,我写日志的位置和发送响应的位置正好相邻,所以我不确定是否kotlin 与它有任何关系。
我的日志记录属性:
# To use this configuration, add to system properties : -Djava.util.logging.config.file="/path/to/file"
#
.level = INFO
# it is recommended that io.grpc and sun.net logging level is kept at INFO level,
# as both these packages are used by Stackdriver internals and can result in verbose / initialization problems.
io.grpc.netty.level=INFO
sun.net.level=INFO
handlers=com.google.cloud.logging.LoggingHandler
# default : java.log
com.google.cloud.logging.LoggingHandler.log=custom_log
# default : INFO
com.google.cloud.logging.LoggingHandler.level=INFO
# default : ERROR
com.google.cloud.logging.LoggingHandler.flushLevel=WARNING
# default : auto-detected, fallback "global"
#com.google.cloud.logging.LoggingHandler.resourceType=container
# custom formatter
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$-6s %2$s %5$s%6$s%n
#optional enhancers (to add additional fields, labels)
#com.google.cloud.logging.LoggingHandler.enhancers=com.example.logging.jul.enhancers.ExampleEnhancer
我的日志相关依赖项:
implementation "org.slf4j:slf4j-jdk14:1.7.30"
implementation "com.google.cloud:google-cloud-logging:1.100.0"
一个示例日志调用:
exception<Throwable> { e ->
logger().error("Error", e)
call.respondText(e.message ?: "", ContentType.Text.Plain, HttpStatusCode.InternalServerError)
}
是logger()
:
import org.slf4j.Logger
import org.slf4j.LoggerFactory
inline fun <reified T : Any> T.logger(): Logger = LoggerFactory.getLogger(T::class.java)
编辑:
谷歌云中的日志示例。第一个请求具有查询参数GAID=cdda802e-fb9c-47ad-0794d394c913
,但正如您所见,该请求的错误日志在下面的日志中,标记为红色。
解决方案
推荐阅读
- electron - Electron 应用程序有时会尝试使用旧版 Oauth 路由登录用户
- c# - Gmail 问题 - 使用 MailKit 嵌入图像
- visual-studio - 如何使 Visual Studio 安装项目检测与构建一致的 nuget 依赖项?
- java - 如何将图片放到Java中的对象上?
- css - 带有文本和图形的 SVG - 如何使用 CSS 设置样式
- javascript - 如何与多个客户实时共享表单输入值?
- swift - 如何删除向上滑动功能
- java - 以设定的重复间隔预定消息
- r - 在 R markdown 中使用大型数据表时禁用警告
- html - sms: 和 mailto: iPhone Safari 移动浏览器失败