jin*_*ngx 5 logging amazon-web-services amazon-cloudwatch aws-lambda amazon-cloudwatchlogs
我的多行日志记录事件都结束了多个事件-每行一个事件。根据文档:
每次调用LambdaLogger.log()都会导致CloudWatch Logs事件...
但是之后:
但是,请注意,AWS Lambda将System.out和System.err返回的每一行都视为一个单独的事件。
查看LambdaAppender的源代码,看来它仍然可以继续记录该事件System.out。那么,这是否意味着多行消息将始终分解为多个事件?
我已经阅读了有关配置multi_line_start_pattern的内容,但这似乎仅适用于部署Log Agent,而该代理在Lambda中无法访问。
[编辑] LambdaAppender日志到LambdaLogger哪个日志System.out。
[编辑]我发现了一些建议解决方法的帖子-打印消息时使用'\ r'作为eol。这似乎适用于我的代码生成的消息。到处记录的堆栈跟踪仍然是一个问题。
[编辑] 我一直在使用两种解决方法:
将'\ n'替换为'\ r'。对于堆栈跟踪,我创建了一个实用程序方法(这在Kotlin中,但是这个想法足够通用):
fun formatThrowable(t: Throwable): String {
val buffer = StringWriter()
t.printStackTrace(PrintWriter(buffer))
return buffer.toString().replace("\n", "\r")
}
Run Code Online (Sandbox Code Playgroud)我认为,从长远来看,更理想的解决方案将是decorating的Appender实现,该实现ConsoleAppender将对\r所有通过的消息进行替换。
我建议使用项目slf4j-simple-lambda并参考此博客以获取更多说明。
使用 slf4j 和 slf4j-simple-lambda 可以优雅地解决您的问题,并且解决方案保持轻量级。org.slf4j.simpleLogger.newlineMethod该项目包括用于解决此问题的参数的使用。默认情况下,其值为 auto,并且应该能够自动检测是否需要手动换行处理。
披露:我是 slf4j-simple-lambda 的合著者和博客的作者。