logback 替换日志中的类名

发布于:2024-11-03 ⋅ 阅读:(5) ⋅ 点赞:(0)

在Logback中,你可以通过自定义一个`Converter`来改变日志输出中的类名格式。`Converter`是Logback中用于将事件数据转换为字符串的组件。以下是创建自定义类名格式的步骤:

1. **创建一个Converter类**:这个类需要实现`ch.qos.logback.classic.spi.IThrowableProxyConverter`接口或继承`ch.qos.logback.classic.pattern.ClassicConverter`类。

2. **实现`convert`方法**:在这个方法中,你将定义如何从`ILoggingEvent`对象中提取类名,并按照你的需求格式化它。

3. **注册Converter**:在你的Logback配置文件中注册你的Converter。

下面是一个简单的示例,展示了如何创建一个自定义Converter来输出类名的最后一个部分(即简单类名):

```java
import ch.qos.logback.classic.pattern.ClassOfCallerConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class CustomClassOfCallerConverter extends ClassOfCallerConverter {
    @Override
    public String convert(ILoggingEvent event) {
        String className = super.convert(event);
        if (className != null) {
            int lastDotIndex = className.lastIndexOf('.');
            if (lastDotIndex != -1) {
                return className.substring(lastDotIndex + 1);
            }
        }
        return className;
    }
}
```

然后,在你的Logback配置文件中,你可以使用这个自定义的Converter:

```xml
<configuration>
    <conversionRule conversionWord="customLogger" converterClass="your.package.CustomClassOfCallerConverter"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %customLogger{1} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
```

在这个配置中,`%customLogger`是你定义的转换词(conversionWord),它将被替换为你的自定义Converter的输出。`{1}`参数是可选的,可以用来指定你想要输出的类名部分,类似于`%logger{1}`的用法。

请确保将`your.package`替换为你的Converter类的实际包名。这样,Logback就会使用你的Converter来格式化类名,并按照你定义的方式输出到日志中。

或者 :

<conversionRule conversionWord="customLogger" converterClass="com.xxx.CustomClassOfCallerConverter"/>
<property name="LOG_PATTERN" value="[%d] [%t] [%-5p] [%customLogger]- %m%n"/>

--------------

 logback的pattern配置

转换字符 效果
%logger 生成类名称,假设logger的名字为com.hello.rachel.service.SayService
%logger{0} ---> SayService
%logger{10} ---> c.h.r.s.SayService
%logger{25} ---> c.h.rachel.service.SayService
%d{pattern}或%date 生成日期: %d ---> 2022-07-05 19:00:00,000
%caller 生成日志调用者的位置信息,依赖JVM实现 %caller{2} ---> 0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)
%line 或 %L 生成日志请求所在的行号
%m 或 %msg 或 %message 生成日志具体信息
%n 行分隔符
%p 或 %level 生成日志级别
%t 或 %thread 生成日志事件的线程名
%X{key:-defaultVal} 或 %mdc 生成日志事件线程的MDC内容
%replace(p) 在子模式p产生的字符中,将所有出现正则表达式r的地方替换成t