链路追踪日记2-logback文件详解(Skywalking)


naocs配置


logging:
	config: classpath:logback.xml
	level:
		root: info

1、如果配置了level.root:info和config,并且logback.xml的是warn,最终日志级别是warn。

…在springboor应用中,当同时存在外部配置文件(application.yml)和logback文件时,logback文件中的设置通常拥有更高的优先级。因为Logback是java应用中的日志框架,它直接控制日志的生成和输出。而spring的配置是对这些日志框架的抽象和封装。

2、如果配置了level.root:info,没有配置config,有logback.xml文件,日志级别按logback文件的

…sprignboot在初始化日志系统时,会检查是否存在自定义的日志配置文文件(logback.xml、log4j2.xml等),并根据这些配置文件的优先级来应用日志配置。也可以理解成,nacos显式指定logback.xml和不指定,是一样的。

3、如果配置了level.root:info,没有配置config,并且没有logback文件,最终日志级别是info。

…springboot在启动的时候,会检查application.properties或application.yml配置的日志属性。并根据配置来设置日志级别。因为没有logback.xml,springboot会使用默认日志行为。这些默认配置只会影响未被显式配置的方面。对于日志级别来说,由于已经明确设置了logging.level.root: info,那么日志输出级别是info

4、如果没有配置level.root,没有配置logback,并且没有logback文件,日志会正常输出,

…如果都没有配置,springboot会使用默认日志配置输出日志。
springboot在设计时,为了简化配置和快速启动项目,默认集成了常用的库和框架,Logback就是被默认选择的日志框架。


logback.xml配置讲解


1、定义日志文件存放地址

<property name="log.path" value="logs/xxxx" />

2、定义日志输出格式

<!-- 这里的[%X{tid}],就是tranceId,tid是下面的TraceIdMDCPatternLogbackLayout塞进去的
tranceId是链路追踪的一个很重要属性-->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] [%X{tid}] %-5level %logger{20} - [%method,%line] - %msg%n" />

3、定义appender:负责将日志输出到目的地(由不同的appender实现。)

3.1、控制台

   <!-- 控制台输出,看appender,下面class属性的ConsoleAppender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--encoder大部分都是这个的,直接使用就好了,不用特别关注-->
   <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!--下面这行,skywalking的apm-toolkit-logback-1.x组件提供了TraceIdPatternLogbackLayout,可以在日志中打印tid。--->
      <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
          <!--这里的格式,就是刚刚(2、定义日志输出格式)里自定义的日志输出格式-->
         <pattern>${log.pattern}</pattern>
      </layout>
   </encoder>
</appender>

。。
。。
。。
3.2、skywalking

<!-- skywalking日志收集 看appender,下面class属性的GRPCLogClientAppender,它允许开发者将应用程序的日志通过gRPC协议发送到SkyWalkingOAP--->
<appender name="skywalking-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
            <pattern>${log.pattern}</pattern>
        </layout>
    </encoder>
</appender>

下面是TraceIdPatternLogbackLayout类截图
在这里插入图这个是片描述在这里插入图片描述
。。
。。
。。
3.3、日志文件

   <!-- 系统日志输出 看appender,下面class属性的RollingFileAppender,这个是输出日志文件-->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	<!-- 这是和前面几个一样的配置 -->
   <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
         <pattern>${log.pattern}</pattern>
      </layout>
   </encoder>
   
 	<!-- 这是输出日志文件的配置,重要的话说三遍 -->
 	<!-- 这是输出日志文件的配置,重要的话说三遍 -->
 	<!-- 这是输出日志文件的配置,重要的话说三遍 -->
 	<!-- 文件输出地址,项目路径下的地址
 	比如,项目在/usr/local/aa/bb (通常bb文件里会有xxx.jar、 deploy.sh、 startup.sh等文件)
 	 那么,日志文件地址就是/usr/local/aa/bb/logs/xxxx/info.log-->
    <file>${log.path}/info.log</file>
       <!-- 循环政策:基于时间创建日志文件 -->
   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <!-- 日志文件名格式 -->
      <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
      <!-- 日志最大的历史 60天,即文件可以保留60-->
      <maxHistory>60</maxHistory>
      <!-- 当文件大小达到这个限制时,会进行滚动(即使没有达到新的日期)  -->
      <maxFileSize>300MB</maxFileSize>  
   </rollingPolicy>
</appender>

以下是日志文件例子
在这里插入图片描述
。。
。。
。。
3.4、logstash

 <appender name="logstashForTest" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
     <!--可以访问的logstash日志收集端口-->
     <destination>10.xx.xx.xx:xxxx</destination>
     <destination>10.xx.xx.xx:xxxx</destination>
     <destination>10.xx.xx.xx:xxxx</destination>
     <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
       <includeMdc>true</includeMdc>
       <includeMdcKeyName>ip</includeMdcKeyName>
       <includeMdcKeyName>server-port</includeMdcKeyName>
       <!--这些键名是在项目定义的-->
       <includeMdcKeyName>REQID</includeMdcKeyName>
       <includeMdcKeyName>PL</includeMdcKeyName>
       <includeMdcKeyName>CHANNEL</includeMdcKeyName>
       <includeMdcKeyName>USERID</includeMdcKeyName>
       <includeCallerData>true</includeCallerData>
<customFields>{"appName":"${APP_NAME:-}"}</customFields>
     </encoder>
 </appender>

定义MDC
在这里插入图片描述

4、定义日志级别:root 必选
…root必须存在,它定义了日志系统的默认行为,包括日志的默认级别和appender引用。如果没有root,那么logback将没有明确的默认日志级别和appender配置,可能导致日志不被记录或者记录行为不确定。

   <!--系统操作日志-->
    <root level="info">
    <!-- 添加appender-ref  -->
        <appender-ref ref="skywalking-log" />
        <appender-ref ref="file_info" />
        <!--<appender-ref ref="file_error" />-->
    </root>

5、定义日志级别:logger 可选
… logger级别更高,针对特定的包或类进行精细的配置,会覆盖root中相同名称的日志级别。需要root提供上下文。

        <logger name="com.hthx" level="info" /> <!--输出info及以上(warn error)-->
        <logger name="org.springframework" level="warn" /><!--输出warn及以上-->

6、一个logback文件至少要包括1个root和一个appender,root应该至少包括一个Appender,并指定一个日志级别

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值