一、使用LogStash

在项目中添加Gradle依赖,然后Sync项目:

"net.logstash.logback:logstash-logback-encoder:4.11",

或者使用Maven:



    net.logstash.logback
    logstash-logback-encoder
    4.11

然后添加配置文件:



  ${HOSTNAME}
  
  
  
  

  
    ../${LOG_PATH}/${appName}/${appName}-error.log
    
      ../${LOG_PATH}/${appName}/${appName}-error-%d{yyyy-MM-dd}.%i.log
      
        2MB
      
    
    true
    
      ${CONSOLE_LOG_PATTERN}
      utf-8
    
    
      error
      ACCEPT
      DENY
    
  

  
    ../${LOG_PATH}/${appName}/${appName}-warn.log
    
      ../${LOG_PATH}/${appName}/${appName}-warn-%d{yyyy-MM-dd}.%i.log
      
        2MB
      
    
    true
    
      ${CONSOLE_LOG_PATTERN}
      utf-8
    
    
      warn
      ACCEPT
      DENY
    
  

  
    ../${LOG_PATH}/${appName}/${appName}-info.log
    
      ../${LOG_PATH}/${appName}/${appName}-info-%d{yyyy-MM-dd}.%i.log
      
        2MB
      
    
    true
    
      ${CONSOLE_LOG_PATTERN}
      utf-8
    

    
      info
      ACCEPT
      DENY
    
  

  
    ../${LOG_PATH}/${appName}/${appName}.json
    
      ${LOG_PATH}/${appName}/${appName}-%d{yyyy-MM-dd}.json
      7
    
    
      
        
          UTC
        
        
          
            {
            "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}"
            }
          
        
      
    
  

  
    
      ${CONSOLE_LOG_PATTERN}
      utf-8
    
    
      debug
    
  

  
  
  

  
    
    
    
    
    
  

在上面的配置文件中:

  • LOG_PATH主要配置日志输出目录,在后面使用LOG_PATH进行路径拼接
  • 两个springProperty用于配置使用TCP Socket方式读取日志的IPv4地址和Port号
  • CONSOLE_LOG_PATTERN用于配置日志格式
  • FILEERROR用于配置日志器实现滚动输出
  • rollingPolicy的XML配置块指定了如何切分文件的策略

LogStash需要安装一个插件:

bin/plugin install logstash-codec-json_lines

参考:https://github.com/logstash/logstash-logback-encoder

二、使用FileBeat

有些公司的日志架构可能是通过各种Beats收集然后通过LogStash过滤后写入Kafka再写入ElasticSearch中的,因此不需要整合logstash-logback-endcoder,那么你只需要整合一个配置类即可:

@Configuration
public class WebApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List> converters) {
        super.configureMessageConverters(converters);
        // 1. 需要定义一个convert转换消息的对象;
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        // 2. 添加FastJson的配置信息,比如:是否要格式化返回的json数据;
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
                                      SerializerFeature.WriteMapNullValue,
                                      SerializerFeature.WriteNullStringAsEmpty,
                                      SerializerFeature.DisableCircularReferenceDetect,
                                      SerializerFeature.WriteNullListAsEmpty);
        // 3. 处理中文乱码问题
        List fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        // 4. 在convert中添加配置信息.
        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        // 5. 将convert添加到converters当中.
        converters.add(fastJsonHttpMessageConverter);
    }
}