我正在尝试将日志从Lambda服务推出到Elasticsearch的选项。 我们已经有一个解决方案,可以扫描默认的CloudWatch日志流,但是希望直接传输任何自定义指标。
为此测试编写的最小应用程序可以在IDE上正常运行,并且不会在lambda中返回任何log4j交叉配置错误。 它还几乎不推送来自lambda的任何日志。 我们偶尔会收到松紧带的条目,但是即使使用相同的jar和测试请求,它也会被击中或遗漏。
从其他测试中我们已经知道,lambda在发送响应后立即杀死或冻结线程,这似乎是同一种问题。 我们要求log4j发送一个日志条目,它开始缓冲,但是在任何事情发生之前,线程都会被砍掉。至少这是当前的假设。
已经尝试修改Socket附加器InstantFlush和bufferedIO选项,但交付速率没有明显变化。
尝试进行注销提供了相似的结果。
发布当前正在运行的日志(仅有时在lambda上)log4j2.xml。 可以从以下项目克隆测试项目:https://github.com/Slaszor/lambda-logger
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} |%X{AWSRequestId}| %-5p %c:%L - %m%n"/>
</Console>
<Socket name="socket" host="logstash.test.domain.com" port="5000">
<JsonLayout complete="false" compact="true">
<KeyValuePair key="app_name" value="java-echo-service"/>
</JsonLayout>
</Socket>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="socket"/>
</Root>
</Loggers>
</Configuration>
有人知道如何使log4j可靠地传输这些日志吗?