首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用log4j在自由控制台中记录消息

使用log4j在自由控制台中记录消息
EN

Stack Overflow用户
提问于 2018-12-11 11:40:08
回答 2查看 1.7K关注 0票数 1

我们的日志服务器通过在json中格式化的kubernetes pods sysout和索引json字段来使用日志消息。我们需要在消息中指定一些预定义的字段,以便能够跟踪跨荚的事务。对于我们的一个吊舱,我们使用自由配置文件,并有问题来配置这些需求的日志记录。

其中一个想法是使用log4j在控制台中发送定制的json消息。但是,所有消息都被处理和修改控制台中所有日志的自由日志系统破坏。我未能为我的需要配置自由日志参数(copySystemStreams = false,控制台日志级别= NO),并且总是可以自由地修改输出和交织非json消息。

为了解决我使用的所有这些问题,我使用了consoleFormat="json“日志参数,但是这引入了不必要的字段,并且不允许我指定自定义字段。

是否有可能控制自由日志记录和控制台?使用case (如果可能的话,Log4j)做用例的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-12-12 12:57:43

正如您所提到的,for能够以JSON格式1登录控制台。对于用例,您提到的两个问题是: 1)不必要的字段;2)不允许您指定自定义字段。

对于不必要的字段,fixed在其JSON模式中有一组固定的字段,您不能自定义这些字段。如果你发现你不想要一些字段,我可以想出几个选项:

  • 用罗格斯塔什。 一些日志处理工具,如Logstash,允许您移除2或更改3个字段。如果要将日志发送到Logstash,可以通过这种方式调整JSON以满足您的需要。
  • 使用jq更改自由发送到stdout的JSON格式。 默认的CMD (来自websphere-from:)是: 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的建议结合起来)

代码语言:javascript
复制
`tail -F myLog.json &`
`/opt/ibm/wlp/bin/server run defaultServer`

1

2

3

票数 0
EN

Stack Overflow用户

发布于 2019-01-22 14:03:22

为了防止有帮助,我遇到了同样的问题,我找到的最好的解决方案是:

  • 将app转换为使用java.util.Logging (7月)
  • server.xml中,根据需要添加<logging consoleSource="message,trace" consoleFormat="json" traceSpecification="{package}={level}"/> (交换包和级别)。
  • 添加包含bootstrap.propertiescom.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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53723405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档