在 wildfly 日志中以 json 格式记录消息
Log message as json format in wildfly logs
我在
下的standalone.xml中添加了以下配置
<subsystem xmlns="urn:jboss:domain:logging:7.0">
<size-rotating-file-handler name="JasperReportUiLog" autoflush="true">
<level name="ALL" />
<file relative-to="jboss.server.log.dir" path="jasper-json-log.json" />
<rotate-size value="200m" />
<max-backup-index value="20" />
<append value="true" />
</size-rotating-file-handler>
<logger category="com.ideas.tetris.ui.modules.reports" use-parent-handlers="false">
<level name="INFO"/>
<handlers>
<handler name="JasperReportUiLog"/>
</handlers>
</logger>
没看懂
<pattern-formatter pattern="json" />
所以无法添加配置为
<size-rotating-file-handler name="JasperReportUiLog" autoflush="true">
<level name="ALL" />
<formatter>
<pattern-formatter pattern="json" />
</formatter>
<file relative-to="jboss.server.log.dir" path="jasper-json-log.json" />
<rotate-size value="200m" />
<max-backup-index value="20" />
<append value="true" />
</size-rotating-file-handler>
因此,如果我删除此格式化程序,那么它会添加日志消息,在我的情况下,它是 URL,其中包含许多 queryString 参数,作为完整的字符串。
为了构建这个字符串,我们使用映射,所以如果我记录那个映射然后它显示它是一种 json 但这又是因为 java.lang.Object 的 toString 方法而不是因为这个 json 格式化程序并且它不完整 json 我们可以选择并提供给我们打算用于某些 ML 目的的其他算法作为 i/p 用于分析进一步的请求。
我认为在我看来期望字符串格式为 json 是错误的,但需要从 jboss 专家那里知道是否有办法将某些消息记录为 json?
我的理解没有错,我错过了在那里声明 json 格式化程序。
所以我最后的改动是这样的
<profile>
<subsystem xmlns="urn:jboss:domain:logging:7.0">
.
.
.
<size-rotating-file-handler name="ReportUiLog" autoflush="true">
<level name="ALL" />
<formatter>
<named-formatter name="JSON"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="jasper-ui-log.json" />
<rotate-size value="200m" />
<max-backup-index value="20" />
<append value="true" />
</size-rotating-file-handler>
<logger category="com.mypackagename.reports" use-parent-handlers="true">
<level name="INFO" />
<handlers>
<handler name="ReportUiLog"/>
</handlers>
</logger>
<formatter name="JSON">
<json-formatter/>
</formatter>
</subsystem>
我正在使用 MDC 保存几个字段,这样当我记录消息时,这些字段也会被记录在日志中。因此,当我们在记录之前执行 MDC.put("userName","Archana")
之后,如果您记录像 log.info("Executed")
这样的句子,那么在记录中使用单词 "Executed" 它将添加我们在记录之前在 MDC 中添加的这个键值对。记录后清除 MDC 很重要,否则每个记录器都会打印您的 MDC 值。
请注意,如果我在 MDC 中添加多个值,那么这些值都会自动打印出来,但是不知何故,当我在我的其他项目中的 log4j.properties 中进行相同类型的配置时,它不会打印所有值MDC 和我必须明确指定在 MDC 中设置的键,这很奇怪。
这些线程是这些link, link2,但希望当前的解决方案能对某些人有所帮助。
答案很简单,请按照以下步骤操作
添加一个名为 'JSON_FORMATTER_NAME'
的格式化程序
将'named-formatter'替换为JSON_FORMATTER_NAME
谢谢
我在
下的standalone.xml中添加了以下配置<subsystem xmlns="urn:jboss:domain:logging:7.0">
<size-rotating-file-handler name="JasperReportUiLog" autoflush="true">
<level name="ALL" />
<file relative-to="jboss.server.log.dir" path="jasper-json-log.json" />
<rotate-size value="200m" />
<max-backup-index value="20" />
<append value="true" />
</size-rotating-file-handler>
<logger category="com.ideas.tetris.ui.modules.reports" use-parent-handlers="false">
<level name="INFO"/>
<handlers>
<handler name="JasperReportUiLog"/>
</handlers>
</logger>
没看懂
<pattern-formatter pattern="json" />
所以无法添加配置为
<size-rotating-file-handler name="JasperReportUiLog" autoflush="true">
<level name="ALL" />
<formatter>
<pattern-formatter pattern="json" />
</formatter>
<file relative-to="jboss.server.log.dir" path="jasper-json-log.json" />
<rotate-size value="200m" />
<max-backup-index value="20" />
<append value="true" />
</size-rotating-file-handler>
因此,如果我删除此格式化程序,那么它会添加日志消息,在我的情况下,它是 URL,其中包含许多 queryString 参数,作为完整的字符串。 为了构建这个字符串,我们使用映射,所以如果我记录那个映射然后它显示它是一种 json 但这又是因为 java.lang.Object 的 toString 方法而不是因为这个 json 格式化程序并且它不完整 json 我们可以选择并提供给我们打算用于某些 ML 目的的其他算法作为 i/p 用于分析进一步的请求。
我认为在我看来期望字符串格式为 json 是错误的,但需要从 jboss 专家那里知道是否有办法将某些消息记录为 json?
我的理解没有错,我错过了在那里声明 json 格式化程序。
所以我最后的改动是这样的
<profile>
<subsystem xmlns="urn:jboss:domain:logging:7.0">
.
.
.
<size-rotating-file-handler name="ReportUiLog" autoflush="true">
<level name="ALL" />
<formatter>
<named-formatter name="JSON"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="jasper-ui-log.json" />
<rotate-size value="200m" />
<max-backup-index value="20" />
<append value="true" />
</size-rotating-file-handler>
<logger category="com.mypackagename.reports" use-parent-handlers="true">
<level name="INFO" />
<handlers>
<handler name="ReportUiLog"/>
</handlers>
</logger>
<formatter name="JSON">
<json-formatter/>
</formatter>
</subsystem>
我正在使用 MDC 保存几个字段,这样当我记录消息时,这些字段也会被记录在日志中。因此,当我们在记录之前执行 MDC.put("userName","Archana")
之后,如果您记录像 log.info("Executed")
这样的句子,那么在记录中使用单词 "Executed" 它将添加我们在记录之前在 MDC 中添加的这个键值对。记录后清除 MDC 很重要,否则每个记录器都会打印您的 MDC 值。
请注意,如果我在 MDC 中添加多个值,那么这些值都会自动打印出来,但是不知何故,当我在我的其他项目中的 log4j.properties 中进行相同类型的配置时,它不会打印所有值MDC 和我必须明确指定在 MDC 中设置的键,这很奇怪。
这些线程是这些link, link2,但希望当前的解决方案能对某些人有所帮助。
答案很简单,请按照以下步骤操作
添加一个名为 'JSON_FORMATTER_NAME'
的格式化程序将'named-formatter'替换为JSON_FORMATTER_NAME
谢谢