【问题标题】:Ignore formatting in XML Logback file忽略 XML Logback 文件中的格式
【发布时间】:2022-01-11 11:59:02
【问题描述】:

我在 Logback 中使用 Rolling File Appender 和一个非常基本的编码器模式来登录 JSON。该应用程序是用 Java 编写的。我知道有一些用于 Java 的 Logback JSON 包,但我决定不使用它们,因此我不必在代码中引入任何新的依赖项。

我有以下附加程序工作。它以 Filebeat 和 Logstash 可以读取的 JSON 格式输出日志。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/opt/tomcat/logs/LOG.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>/opt/tomcat/logs/LOG.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>200MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <maxHistory>30</maxHistory>
      <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <encoder>
      <pattern>
{"@timestamp": "%d{ISO8601}", "date": "%d{dd-MM-yy}", "thread": "%thread", "level": "%-5level", "className": "%logger{36}", "message": "%replace(%replace(%msg){'\n','\u2028'}){'\t',' '} %replace(%replace(%ex){'\n','\u2028'}){'\t',' '}" }%nopex%n
      </pattern>
    </encoder>
  </appender>

正如您所见,{"@timestamp": "%d{ISO8601}",.... 这一行的缩进已关闭(如果我缩进它,它会在日志文件本身中缩进),并且该行对于任何 Checkstyle 验证(和可读性)来说都太长了。我宁愿这样写:

<encoder>
  <pattern>
    {
      "@timestamp": "%d{ISO8601}", 
      "date": "%d{dd-MM-yy}", 
      ...
    }%nopex%n
  </pattern>
</encoder>

有什么想法可以让 XML 和/或 Logback 忽略此模式的格式并直接吐出文本?

【问题讨论】:

    标签: java xml logback


    【解决方案1】:

    下面创建了一个保存模式的属性,所以也许它可以让你根据需要格式化它:

    例子:

      <property name="ENCODER_PATTERN"
              value="%d{yyyy-MM-dd  HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n" />
    
    
      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${ENCODER_PATTERN}</pattern>
      </encoder>
    

    【讨论】:

    • 所以问题是我希望该格式打印到日志中,但能够将其拆分到 XML 文件中的某些行中。这在 value 参数中变得笨拙。我尝试输入一个&lt;property&gt;FORMAT&lt;/property&gt; 并得到一个未定义的。我还尝试将它提取到一个 txt 文件并使用资源参数,但那里也有一个未定义的。当我将 txt 文件位置放在值参数中时,它只会打印每个日志的文件路径。
    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 2011-06-15
    • 2017-12-09
    • 2012-02-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多