logback配置示例-包含生成json日志,与ELK整合

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <contextName>${HOSTNAME}</contextName>
  <property name="LOG_PATH" value="phantom-log" />
  <springProperty scope="context" name="appName" source="spring.application.name" />
  <springProperty scope="context" name="ip" source="spring.cloud.client.ipAddress" />
  <property name="CONSOLE_LOG_PATTERN"
            value="[%d{yyyy-MM-dd HH:mm:ss.SSS} ${ip} ${appName} %highlight(%-5level) %yellow(%X{X-B3-TraceId}),%green(%X{X-B3-SpanId}),%blue(%X{X-B3-ParentSpanId}) %yellow(%thread) %green(%logger) %msg%n"/>
 
  <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}-error.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>../${LOG_PATH}/${appName}/${appName}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>
    <!-- 设置拦截的级别-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>error</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
 
  <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}-warn.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>../${LOG_PATH}/${appName}/${appName}-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>
<!-- 设置拦截的级别-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>warn</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
 
  <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}-info.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>../${LOG_PATH}/${appName}/${appName}-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>
 
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>info</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
 
  <appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../${LOG_PATH}/${appName}/${appName}.json</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>../${LOG_PATH}/${appName}/${appName}-%d{yyyy-MM-dd}.json</fileNamePattern>
      <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
      <providers>
        <timestamp>
          <timeZone>UTC</timeZone>
        </timestamp>
        <pattern>
          <pattern>
            {
            "ip": "${ip}",
            "app": "${appName}",
            "level": "%level",
            "trace": "%X{X-B3-TraceId:-}",
            "span": "%X{X-B3-SpanId:-}",
            "parent": "%X{X-B3-ParentSpanId:-}",
            "thread": "%thread",
            "class": "%logger{40}",
            "message": "%message",
            "stack_trace": "%exception{10}"
            }
          </pattern>
        </pattern>
      </providers>
    </encoder>
  </appender>
 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
      <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>debug</level>
    </filter>
  </appender>
 
  <logger name="org.springframework" level="INFO" />
  <logger name="org.hibernate" level="INFO" />
  <logger name="com.kingboy.repository" level="DEBUG" />
 
  <root level="INFO">
    <appender-ref ref="FILEERROR" />
    <appender-ref ref="FILEWARN" />
    <appender-ref ref="FILEINFO" />
    <appender-ref ref="logstash" />
    <appender-ref ref="STDOUT" />                                                                                                                           
  </root>
</configuration>

 

<think>好的,我现在需要帮助用户解决关于Logback配置JSON布局的问题。用户的具体请求是寻找相关的配置示例,所以我得先回顾一下提供的引用内容,看看哪些信息可以派上用场。 首先,引用[1]中提到了使用JsonLayout和JacksonJsonFormatter来配置ConsoleAppender,输出JSON格式的日志。这里详细展示了如何设置appender,包括时间戳格式和美化输出。这可能是一个基本的配置示例,适合用户需求。 接着,引用[2]提到了LogstashLayout的使用,结合Kafka的编码器。这可能适用于需要将日志发送到Kafka的情况,如果用户有集成外部系统的需求,这部分配置可能有用。但用户当前的问题可能更关注基础配置,所以可能需要优先展示Console的配置,再提到Kafka的扩展。 引用[3]指出Logback作为Spring Boot默认日志框架,支持结构化日志JSON格式,并提到了MDC和集成外部系统。这里需要强调基础配置和高级技巧,可能用户需要了解如何启用JSON格式以及相关的最佳实践。 引用[4]展示了如何通过拦截器和MVC配置来发送MDC信息到Kafka,这可能涉及到在JSON日志包含上下文信息。如果用户需要包含MDC字段,这部分配置可以作为补充内容。 现在需要整合这些信息,提供一个清晰的配置步骤。首先,基础配置使用JsonLayout输出到控制台,然后可能扩展使用LogstashLayout,特别是如果需要发送到Kafka。同时,要提到如何包含MDC字段,如引用[4]中的拦截器配置,但可能用户不需要具体拦截器代码,而是如何在JSON布局中包含MDC。 另外,需要确保依赖项正确,比如logback-classic和logback-json的版本兼容性。可能用户会遇到依赖缺失的问题,所以需要提醒添加相关依赖。 还要注意时间戳格式、美化输出等细节,如引用[1]中的示例。同时,引用[3]提到的异步日志和环境化配置可能对性能优化有帮助,可以作为优化建议提到。 总结步骤:1. 添加依赖;2. 配置ConsoleAppender使用JsonLayout;3. 包含MDC字段;4. 可选配置发送到Kafka;5. 优化建议如异步日志。 需要检查是否有遗漏的部分,比如是否需要在JsonLayout中显式启用MDC,或者是否有其他属性需要配置。同时,示例代码需要正确,确保缩进和标签闭合,避免用户复制时出错。 可能用户的应用场景是微服务环境下需要结构化日志,方便ELK等系统处理,所以配置示例要完整且符合生产标准。最后,相关问题可以涉及性能优化、MDC使用、Kafka集成等,帮助用户进一步探索。</think>以下是Logback配置JSON格式日志的详细指南,包含基础配置和进阶技巧: ### 基础配置示例(控制台输出) ```xml <configuration> <appender name="JSON_CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.contrib.json.classic.JsonLayout"> <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"> <prettyPrint>true</prettyPrint> </jsonFormatter> <timestampFormat>yyyy-MM-dd HH:mm:ss.SSS</timestampFormat> <appendLineSeparator>true</appendLineSeparator> </layout> </appender> <root level="INFO"> <appender-ref ref="JSON_CONSOLE"/> </root> </configuration> ``` 该配置实现: 1. 使用$JsonLayout$生成结构化日志 2. 通过$JacksonJsonFormatter$美化输出 3. 包含精确到毫秒的时间戳[^1] ### 包含MDC字段的增强配置 ```xml <layout class="ch.qos.logback.contrib.json.classic.JsonLayout"> <includeContextName>true</includeContextName> <includeMDC>true</includeMDC> <includeLevelName>true</includeLevelName> <jsonFormatter> <prettyPrint>false</prettyPrint> </jsonFormatter> </layout> ``` 通过$includeMDC$参数自动包含所有Mapped Diagnostic Context信息[^4] ### Kafka集成配置 ```xml <appender name="KAFKA" class="com.github.danielwegener.logback.kafka.KafkaAppender"> <encoder class="com.github.danielwegener.logback.kafka.encoding.PatternLayoutKafkaMessageEncoder"> <layout class="net.logstash.logback.layout.LogstashLayout"> <customFields>{"appname":"your-app","env":"production"}</customFields> </layout> </encoder> <topic>logs</topic> <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.RoundRobinKeyingStrategy"/> <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/> </appender> ``` 该方案特点: 1. 使用$LogstashLayout$增强字段兼容性[^2] 2. 添加自定义业务字段 3. 异步写入提升性能[^3] ### 必要依赖(Maven) ```xml <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.4</version> </dependency> <dependency> <groupId>ch.qos.logback.contrib</groupId> <artifactId>logback-json-classic</artifactId> <version>0.1.5</version> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值