【问题标题】:Log message as json format in wildfly logs在 Wildfly 日志中将消息记录为 json 格式
【发布时间】:2020-04-15 13:54:13
【问题描述】:

我在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?

【问题讨论】:

  • 您使用的是什么版本的 WildFly?

标签: logging jboss


【解决方案1】:

我的理解没有错,我错过了在那里声明 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") 的句子,那么在带有单词“已执行”的日志中,它将添加我们在记录之前在MDC 中添加的这个keyValue 对。记录后清除 MDC 很重要,否则每个记录器都会打印您的 MDC 值。

请注意,如果我在 MDC 中添加多个值,那么这些值都会自动打印,但不知何故,当我在其他项目的 log4j.properties 中进行相同类型的配置时,它不会打印 MDC 的所有值,我ve 明确指定在 MDC 中设置的键,这很奇怪。

这些线程是linklink2,但希望当前的解决方案能对某人有所帮助。

【讨论】:

    【解决方案2】:

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

    1. 添加一个名为“JSON_FORMATTER_NAME”的格式化程序

    2. 将“命名格式化程序”替换为 JSON_FORMATTER_NAME

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2014-06-19
      相关资源
      最近更新 更多