【转载】logback 中打印自定义参数 (ip 服务名)


转载自

由于应用日志被类似ELK的框架收集到了统一的日志管理平台,所以集群部署的多台服务器日志会冲突,老板希望在打印的日志内容中加上服务器IP加以区分,以此为前提。

一、解决方案

1.1 ClassicConverter实现类

我们创建一个类 com.xxx.utils.IPConverterConfig 并继承 ch.qos.logback.classic.pattern.ClassicConverter,内容如下:

package com.xxx.utils;

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 功能描述: 将ip打印到日志
 *
 * @author geekziyu
 * @version 1.0.0
 */
public class IPConverterConfig extends ClassicConverter {

    // 每次 log.info() 都会调用该 converter,所以缓存一下服务器ip
    private String cache;

    @Override
    public String convert(ILoggingEvent event) {
        if (cache != null) {
            return cache;
        }
        String result = "unknown";
        try {
            result = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        cache = result;
        return result;
    }
}

1.2 标签

logback.xml 中加入



1.3 修改打印格式:

继续修改 logback.xml 中的 - - :


  
    %date{yyyy-MM-dd HH:mm:ss.SSS} [%ip] %level [%thread] %logger{36}%msg%n
  

注意,打印时用 %ip 来表示该变量。

二、测试效果

2.1 logback.xml

以打印日志到Console为例:

<?xml version="1.0" encoding="UTF-8"?>

  
  

  
    
      %date{yyyy-MM-dd HH:mm:ss.SSS} [%ip] %level [%thread] %logger{36} %msg%n
    
  

  
    
  

2.2 测试类Main

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        log.info("Hello World!");
    }
}

2.3 运行结果

三、补充

3.1 日志文件的配置

以下 logback.xml 是写入文件的代码:

<?xml version="1.0" encoding="UTF-8"?>

  
  
  
  
  
    ${LOG_PATH}/biz.log
    
      
      /opt/app/logs/logback/biz-%d{yyyy-MM-dd_HH}.%i.txt
      
      100MB
      
      60
      
      1GB
    
    
        %date{yyyy-MM-dd HH:mm:ss.SSS} [%ip] %level [%thread] %logger{36} %msg%n
    
  
  
  
    
    
    
    256
    
    0