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协议发送到SkyWalking的OAP--->
<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,并指定一个日志级别