Skywalking log4j、log4j2、logback tid注入方法

Skywalking tid注入方法

log4j2

pom中引入以下依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-2.x</artifactId>
    <version>6.4.0</version>
</dependency>

springboot log4j2 日志依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2.xml加入以下配置

 <Properties>
        <Property name="log.layout">%d{ISO8601} | %traceId | %-5.5p | %X{logtype} | %t | %X{codeline} | %l | %X{dealid} | %X{errorno} | %m%n</Property>
    </Properties>
    <Appenders>
        <Appender type="Console" name="STDOUT">
            <Layout type="PatternLayout" pattern="${log.layout}"/>
        </Appender>
    </Appenders>

log4j

应用的日志框架中引入以下依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-1.x</artifactId>
    <version>6.4.0</version>
</dependency>

springboot 1.2.6.RELEASE 版本以上的版本log4j日志依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
          <exclusion>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-logging</artifactId>
          </exclusion>
      </exclusions>
  </dependency>
  <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
  </dependency>
  <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
  </dependency>

springboot 1.2.6.RELEASE 版本以下的版本log4j日志依赖

   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <exclusions>
           <exclusion>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-logging</artifactId>
           </exclusion>
       </exclusions>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-log4j</artifactId>
   </dependency>

替换log4j.properties中的配置

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %c | %n | %n%m%n
log4j.appender.stdout.layout=org.apache.skywalking.apm.toolkit.log.log4j.v1.x.TraceIdPatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %T | %c | %n | %n%m%n

logback

pom中引入以下依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>6.4.0</version>
</dependency>

springboot logback 日志依赖,使用的是spring-boot-starter-logging

<dependency>
     <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

替换logback.xml中配置

<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%d{ISO8601} | %thread | %-5level | %msg%n</pattern>
</encoder>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
        <pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern>
    </layout>
</encoder>

日志链路测试代码

@Configuration
public class TestLog implements CommandLineRunner {
    private static final Logger logger = LoggerFactory.getLogger(TestLog.class);

    @Override
    public void run(String... strings) throws Exception {
        logtest();
    }

    public void logtest(){
        ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
        ses.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                try {
                    start();
                }catch ( Exception e ){
                    logger.error("log TID is error{}",e);
                }
            }},1, 1, TimeUnit.SECONDS);
    }

    @Trace(operationName = "/log/traceId")
    public String getTraceId(){
        try {
            return TraceContext.traceId();
        } catch (Exception e) {
            logger.error("skywalking agent is not mount");
        }
       return "TID: N/A" ;
    }

    @Trace(operationName = "/log/date")
    public String getNowDate(String str){
        logger.info("{} get date, traceId: {}",str,getTraceId());
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }

    @Trace(operationName = "/log/start")
    public void start(){
        logger.info("start log now is {}",getNowDate("START"));
        running();
    }

    @Trace(operationName = "/log/running")
    public void running(){
        logger.info("running log now is {}",getNowDate("RUNNING"));
        waiting();
    }

    @Trace(operationName = "/log/waiting")
    public void waiting(){
        logger.info("waiting log now is {}",getNowDate("WAITING"));
        ending();
    }

    @Trace(operationName = "/log/ending")
    public void ending(){
        logger.info("ending log now is {}",getNowDate("ENDING"));
    }
}

效果图

2020-10-30T08:59:26,104 | INFO  |  | main  | TID: N/A |  | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) |  |  | Initializing ProtocolHandler ["http-nio-8702"]
2020-10-30T08:59:26,104 | INFO  |  | main  | TID: N/A |  | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) |  |  | Starting ProtocolHandler ["http-nio-8702"]
2020-10-30T08:59:26,104 | INFO  |  | main  | TID: N/A |  | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) |  |  | Using a shared selector for servlet write/read
2020-10-30T08:59:26,164 | INFO  |  | main  | TID: N/A |  | org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:201) |  |  | Tomcat started on port(s): 8702 (http)
2020-10-30T08:59:26,174 | INFO  |  | main  | TID: N/A |  | org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:57) |  |  | Started Log4j2ApplicationMain in 6.29 seconds (JVM running for 12.174)
2020-10-30T08:59:27,274 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) |  |  | START get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,289 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.start$original$zRJZN24M(TestLog.java:61) |  |  | start log now is 2020-10-30 08:59:27
2020-10-30T08:59:27,289 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) |  |  | RUNNING get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,289 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.running$original$zRJZN24M(TestLog.java:67) |  |  | running log now is 2020-10-30 08:59:27
2020-10-30T08:59:27,289 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) |  |  | WAITING get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,289 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.waiting$original$zRJZN24M(TestLog.java:73) |  |  | waiting log now is 2020-10-30 08:59:27
2020-10-30T08:59:27,289 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) |  |  | ENDING get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,294 | INFO  |  | pool-6-thread-1  | TID: 214.69.16040195672290001 |  | com.newland.core.server.TestLog.ending$original$zRJZN24M(TestLog.java:79) |  |  | ending log now is 2020-10-30 08:59:27
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值