在Lambda – > CloudWatch中,多行日志记录如何工作?
我的多行日志记录事件最终都是多事件 – 每行一个事件。 根据文件 :
每次调用LambdaLogger.log()都会导致CloudWatch Logs事件…
但是之后:
但是请注意,AWS Lambda会将System.out和System.err返回的每一行视为一个单独的事件。
看看LambdaAppender的源代码 ,看来它仍然会将事件记录到System.out
。 那么这是否意味着多线消息将总是被分解成多个事件?
我已经阅读了有关配置multi_line_start_pattern的内容 ,但似乎只适用于部署日志代理,而这在Lambda中是不可访问的。
[编辑] LambdaAppender
记录到记录到System.out
LambdaLogger
。
[编辑]我find了一些建议解决方法的post – 在打印邮件时使用“\ r”作为eol。 这似乎适用于我的代码产生的消息。 堆栈跟踪记录到处都是一个问题。
[编辑] 我一直在使用两种解决方法 :
- 在JSON中记录复杂的数据结构(例如相当大的地图)。 CloudWatch实际上可以识别日志事件中的JSON字符串,并将其打印出来。
-
用’\ r’替换’\ n’。 对于堆栈跟踪,我创建了一个实用程序方法(这是在Kotlin中,但是这个方法足够通用):
fun formatThrowable(t: Throwable): String { val buffer = StringWriter() t.printStackTrace(PrintWriter(buffer)) return buffer.toString().replace("\n", "\r") }
我认为从长远来看,一个更理想的解决方案将是装饰ConsoleAppender
的Appender
实现,它将对所有通过的消息进行替换。