在 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,但希望当前的解决方案能对某些人有所帮助。

答案很简单,请按照以下步骤操作

  1. 添加一个名为 'JSON_FORMATTER_NAME'

    的格式化程序
  2. 将'named-formatter'替换为JSON_FORMATTER_NAME

谢谢