Одним из решений этой проблемы является установка шаблона регистрации в конфигурации регистрации следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<configuration packages="com.amazonaws.services.lambda.runtime.log4j2">
<appender name="Lambda" class="io.symphonia.lambda.logging.DefaultConsoleAppender">
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss} %-5level - %logger{0}:%line: %replace(%msg){'\n','
'} %replace(%exception){'\n','
'} %nopexception %n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="Lambda" />
</root>
</configuration>
См. Тег <pattern>
: магия заключается в %replace(%msg){'\n','
'}
и %replace(%exception){'\n','
'} %nopexception
.Оба вызова заменяют новую строку (\ n) на возврат каретки () для сообщения журнала (% msg) и переданного исключения (% исключение).Причина, по которой второй аргумент находится в шестнадцатеричном коде символов Unicode, а первый - нет, описана в обсуждении на GitHub, связанном ниже.Я поместил это в файл loggerconfig.xml и настроил регистратор на использование его в классе, который является точкой входа для лямбды:
private static final Logger LOGGER;
static {
// must be set before the very first call to LoggerFactory.getLogger()
System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "loggerconfig.xml");
LOGGER = LoggerFactory.getLogger(ClassThatShallLog.class);
}
Я пришел к этому решению через this разговор на GitHub.