TLog TLog
💒首页
📚文档
💖支持
更新记录
加入群聊
  • LiteFlow - 轻量,快速,稳定可编排的组件式规则引擎 (opens new window)
  • frSimple - 中后台脚手架/小程序商城 (opens new window)
Gitee (opens new window)
Github (opens new window)
💒首页
📚文档
💖支持
更新记录
加入群聊
  • LiteFlow - 轻量,快速,稳定可编排的组件式规则引擎 (opens new window)
  • frSimple - 中后台脚手架/小程序商城 (opens new window)
Gitee (opens new window)
Github (opens new window)
  • TLog能解决什么痛点
  • 项目特性
  • 如何选择你的接入方式
  • 安装TLog

    • 全量依赖
    • 按需依赖
  • Javaagent方式

    • Javaagent接入方式
    • Java启动参数配置
    • 最终日志效果
  • 字节码注入方式

    • 字节码注入方式
    • 字节码注入具体方法
  • 日志框架适配方式

    • 日志框架适配器方式
    • Log4j框架适配器
    • Logback框架适配器
    • Log4j2框架适配器
      • 同步日志
      • 异步日志
  • 日志标签模板自定义
  • 标签位置的自定义(MDC)

    • MDC模式的说明
    • MDC模式下log4j的配置
    • MDC模式下logback的配置
    • MDC模式下log4j2的配置
  • SpanId的生成规则
  • 业务标签

    • 业务自定义标签能干嘛
    • 简单例子
    • 多个数值
    • 多数值连接符
    • 常量字符串标签
    • 点操作符
    • 自定义Convertor
  • 异步线程支持

    • 一般异步线程
    • 线程池
    • MDC模式中的异步线程
  • 对Httpclient的支持
  • 对Okhttp的支持
  • 对hutool-http的支持
  • 对servlet的支持
  • 对forest的支持
  • 对RestTemplate的支持
  • 对于mq中间件的支持
  • 对SpringCloud Gateway的支持
  • 对Soul网关的支持
  • 任务框架的支持

    • JDK TIMER任务
    • Quartz框架的支持
    • spring-scheduled的支持
    • XXL-JOB框架的支持
  • Logstash的支持

    • logback与logstash的集成
  • 自动打印调用参数和时间
  • 自定义TraceId生成器
  • Spring项目接入

    • dubbo & dubbox
    • SpringCloud的Openfeign
    • 其他配置
  • 文档
  • 日志框架适配方式
铂赛东
2022-09-12
目录

Log4j2框架适配器

警告

由于log4j2是插件的机制,为了避免log4j2提前加载到自己的插件,请把log4j2配置文件的pattern中的m/msg/message改成tm/tmsg/tmessage

如果你不想改这个,还有一个办法,就是把tlog的依赖包在pom文件里提到log4j2依赖包的前面。

# 同步日志

提示

log4J2由于是通过插件形式实现的,log4J2有自动扫描插件的功能。所以在同步日志情况下无需对配置文件做任何更改就能生效。

下面仅仅给出log4j2同步日志配置文件的示例,其实并不需要改动:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender-->
    <appenders>
        <!--控制台日志-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="%date{HH:mm:ss.SSS}  %-5level [%thread] %logger{36} - %tmsg%n"/>
        </console>

        <!--文件日志-->
        <!--同步日志-->
        <RollingFile name="RollingFileInfo" fileName="./logs/log4j2-sync-rolling.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%date{HH:mm:ss.SSS}  %-5level [%thread] %logger{36} - %tmsg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

        <!--同步日志-->
        <File name="SyncFile" fileName="./logs/log4j2-sync.log" append="false" >
            <PatternLayout pattern="%date{HH:mm:ss.SSS}  %-5level [%thread] %logger{36} - %tmsg%n"/>
        </File>

    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <root level="INFO">
            <appender-ref ref="Console"/>
            <appender-ref ref="SyncFile"/>
            <appender-ref ref="RollingFileInfo"/>
        </root>
    </loggers>
</configuration>

# 异步日志

提示

log4J2由于是通过插件形式实现的,log4J2有自动扫描插件的功能。在异步日志情况下也无需对配置文件做任何更改就能生效。

但是异步日志里,由于log4j2是发送到队列里,所以写日志的线程和业务线程之间并无从属关系,为了能让log4j2在任何的情况下就能获取到业务线程传入的标签值,在异步情况下你需要在启动项里配置以下代码:


 



public static void main(String[] args) {
    System.setProperty("log4j2.isThreadContextMapInheritable", Boolean.TRUE.toString());
    SpringApplication.run(RunnerApplication.class, args);
}

如果你不是Springboot项目,不方便在启动项代码里进行设置,这个参数也可以设置在jvm参数里:

-Dlog4j2.isThreadContextMapInheritable=true

下面仅仅给出log4j2异步日志配置文件的示例,其实并不需要改动:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender-->
    <appenders>
        <!--控制台日志-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="%date{HH:mm:ss.SSS}  %-5level [%thread] %logger{36} - %tmsg%n"/>
        </console>

        <!--文件日志-->
        <RollingFile name="RollingFileInfo" fileName="./logs/log4j2-async-rolling.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%date{HH:mm:ss.SSS}  %-5level [%thread] %logger{36} - %tmsg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

        <!--异步日志:一 先声明同步文件-->
        <File name="AsyncLogFile" fileName="./logs/log4j2-async.log" append="false" >
            <PatternLayout pattern="%date{HH:mm:ss.SSS}  %-5level [%thread] %logger{36} - %tmsg%n"/>
        </File>
        <!--异步日志:二 使用Async配置异步 -->
        <Async name="AsyncFile">
            <AppenderRef ref="AsyncLogFile"/>
        </Async>

        <!--异步输出到控制台-->
        <Async name="AsyncConsole">
            <AppenderRef ref="Console"/>
        </Async>

        <!--异步输出到滚动日志-->
        <Async name="AsyncRolling">
            <AppenderRef ref="RollingFileInfo"/>
        </Async>

    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <root level="INFO">
            <appender-ref ref="AsyncFile"/>
            <appender-ref ref="AsyncConsole"/>
            <appender-ref ref="AsyncRolling"/>
        </root>
    </loggers>
</configuration>

帮助我们改善文档 (opens new window)
last update: 2022/09/21, 16:00:22
Logback框架适配器
日志标签模板自定义

← Logback框架适配器 日志标签模板自定义→

Theme by Vdoing | Copyright © 2022-2024 铂赛东 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式