我们的日志服务器通过在json中格式化的kubernetes pods sysout和索引json字段来使用日志消息。我们需要在消息中指定一些预定义的字段,以便能够跟踪跨荚的事务。对于我们的一个吊舱,我们使用自由配置文件,并有问题来配置这些需求的日志记录。
其中一个想法是使用log4j在控制台中发送定制的json消息。但是,所有消息都被处理和修改控制台中所有日志的自由日志系统破坏。我未能为我的需要配置自由日志参数(copySystemStreams = false,控制台日志级别= NO),并且总是可以自由地修改输出和交织非json消息。
为了解决我使用的所有这些问题,我使用了consoleFormat="json“日志参数,但是这引入了不必要的字段,并且不允许我指定自定义字段。
是否有可能控制自由日志记录和控制台?使用case (如果可能的话,Log4j)做用例的最佳方法是什么?
发布于 2018-12-12 12:57:43
正如您所提到的,for能够以JSON格式1登录控制台。对于用例,您提到的两个问题是: 1)不必要的字段;2)不允许您指定自定义字段。
对于不必要的字段,fixed在其JSON模式中有一组固定的字段,您不能自定义这些字段。如果你发现你不想要一些字段,我可以想出几个选项:
CMD ["/opt/ibm/wlp/bin/server", "run", "defaultServer"]
您可以将自己的CMD添加到Dockerfile中,如下所示(根据需要调整jq命令):
CMD /opt/ibm/wlp/bin/server run defaultServer | grep --line-buffered "}" | jq -c '{ibm_datetime, message}'如果用例还需要将log4J输出发送到stdout,我建议将Dockerfile更改为运行添加到映像中的脚本。在该脚本中,您需要按照以下方式跟踪log4J日志文件(这可以与上面关于如何将CMD更改为使用jq的建议结合起来)
`tail -F myLog.json &`
`/opt/ibm/wlp/bin/server run defaultServer`发布于 2019-01-22 14:03:22
为了防止有帮助,我遇到了同样的问题,我找到的最好的解决方案是:
server.xml中,根据需要添加<logging consoleSource="message,trace" consoleFormat="json" traceSpecification="{package}={level}"/> (交换包和级别)。bootstrap.properties的com.ibm.ws.logging.console.format=json。这将为您在JSON中提供一致的服务器和应用程序日志记录。在服务器启动时,有几行不是json,但那是一个空行和一个“启动defaultServer.”线路。
我也希望JSON结构与使用Log4j2的其他容器保持一致,因此,我遵循来自above的建议,并将jq添加到我的dockerfile中的CMD中,以重新格式化JSON:
CMD /opt/ol/wlp/bin/server run defaultServer | stdbuf -o0 -i0 -e0 jq -crR '. as $line | try (fromjson | {level: .loglevel, message: .message, loggerName: .module, thread: .ext_thread}) catch $line'
stdbuf -o0 -i0 -e0阻止管道(“\”)缓冲它的输出。
这就去掉了特定于自由的json属性,这取决于您的视角是好的还是坏的。我不需要新的价值观,所以我没有一个很好的建议。
尽管JUL不如Log4j2或SLF4j好,但是将JUL封装在更接近Log4j2的东西中的代码非常少,例如,拥有varargs而不是Object[]。
OpenLiberty还将动态地更改日志记录,如果您编辑server.xml,那么它几乎有所有必需的位;IMHO。
https://stackoverflow.com/questions/53723405
复制相似问题