【转载】logback自定义目录及输出格式


转载自 https://blog.csdn.net/qq_39762975/article/details/102741912

上一篇文章 中,我们介绍了一种方法自定义日志输出格式:

  1. 首先,自定义格式转换器,也就是继承 ClassicConverter,实现他的 convert 方法;
  2. 然后,在 logback.xml 中配置标签,定义其属性 conversionWordconverterClass
  3. 最后,在日志输出格式中,通过 %ip 来动态获取IP值(假设 conversionWord="ip");

但是,这个 %ip不能用来定义文件路径,接下来介绍另一种方式,既可以自定义日志目录路径,又可以自定义日志输出格式。

一、解决方案

1.1 PropertyDefinerBase实现类

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

package com.xxx.utils;

import ch.qos.logback.core.PropertyDefinerBase;

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

public class NodeIpProperty extends PropertyDefinerBase  {
  private static String nodeIP;
  static {
    try {
      nodeIP = InetAddress.getLocalHost().getHostAddress();
    } catch (UnknownHostException e) {
      e.printStackTrace();
      nodeIP = "unknown";
    }
  }

  @Override
  public String getPropertyValue() {
    return NodeIpProperty.nodeIP;
  }
}

1.2 标签

logback.xml中添加如下配置,该配置位于标签下


1.3 ${属性名}

继续在 logback.xml 中使用 ${NODE_IP} 动态获取属性值:

二、测试结果

如果是 Windows 平台,如果你的项目代码在 F: 盘,那么你的日志就会在 F:\opt\192.168.137.1\logs

如果是 Linux 平台,日志就在 /opt/192.168.137.1/logs 文件夹;

打印出的日志形如:

2022-01-12 15:38:40.621 [192.168.137.1] INFO [main] Main Hello World!

三、完整的 logback.xml

继续在 logback.xml 中用 ${NODE_IP} 来表示该变量:

<?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} [${NODE_IP}] %level [%thread] %logger{36} %msg%n
    
  
  
  
    
    
    
    256
    
    0