Logback日志
基础日志
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义参数,后面可以通过${APP_NAME}使用 -->
<property name="APP_NAME" value="sample"/>
<!-- ../logs日志文件会生成在项目的外面的一个文件夹下 -->
<!-- ./logs日志文件会生成在项目中的logs文件夹一个文件夹 -->
<property name="LOG_PATH" value="./logs"/>
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<property name="LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35}[%line] - %msg%n"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义日志输出的路径-->
<file>${LOG_FILE}</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
<!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<!-- 达到这个大小后,旧的文件日志将会被异步删除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 文件输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--rootLogger是默认的logger-->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<!--应用日志-->
<!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
<logger name="cn.com.wind" level="DEBUG"/>
<logger name="com.alibaba.cola" level="DEBUG"/>
<logger name="com.alibaba.cola.file" level="DEBUG"/>
<logger name="com.alibaba.cola.report" level="DEBUG"/>
<logger name="com.alibaba.cola.dictionary" level="DEBUG"/>
<logger name="com.alibaba.cola.logging" level="DEBUG"/>
<logger name="com.alibaba.cola.systemlog" level="DEBUG"/>
<logger name="com.alibaba.cola.property" level="DEBUG"/>
<!--数据库日志-->
<!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
<!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
<!--additivity表示要不要使用rootLogger配置的appender进行输出-->
<logger name="com.apache.ibatis" level="TRACE" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>
根据环境生效、日志继承
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="TEST_LOG_FILE" value="${LOG_PATH}/test.log"/>
<appender name="TEST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义日志输出的路径-->
<file>${TEST_LOG_FILE}</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
<!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
<fileNamePattern>${BUSS_LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<!-- 达到这个大小后,旧的文件日志将会被异步删除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="KAFKA_LOG_FILE" ..../>
<!-- 包含dev 分支生效 -->
<springProfile name="dev">
<!--根目录定义了两个appender,日志会通过往这两个appender里面写-->
<!--level表示本系统中所有大于等于info级别的日志都会往appender中写 -->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="TEST_FILE"/>
</root>
<!--additivity="false"表示不继承root中的配置。默认是true,相当于还有root中配置的两个appender,所以经常出现控制台打两条一样的日志 -->
<logger name="org.apache.kafka" level="debug" additivity="false">
<!-- 将kafka日志打印到-->
<appender-ref ref="KAFKA_LOG_FILE"/>
</logger>
<!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
<logger name="com.alibaba.cola" level="DEBUG"/>
</springProfile>
....
</configuration>
示例:按照启动分支生效
当时dev环境时,单独再保存一份kafka日志
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义参数,后面可以通过${APP_NAME}使用 -->
<property name="APP_NAME" value="sample"/>
<!-- ../logs日志文件会生成在项目的外面的一个文件夹下 -->
<!-- ./logs日志文件会生成在项目中的logs文件夹一个文件夹 -->
<property name="LOG_PATH" value="./logs"/>
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<property name="KAFKA_FILE" value="${LOG_PATH}/kafka.log"/>
<property name="LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35}[%line] - %msg%n"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义日志输出的路径-->
<file>${LOG_FILE}</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
<!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<!-- 达到这个大小后,旧的文件日志将会被异步删除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="KAFKA_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义日志输出的路径-->
<file>${KAFKA_FILE}</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
<!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
<fileNamePattern>${KAFKA_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<!-- 达到这个大小后,旧的文件日志将会被异步删除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 文件输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--rootLogger是默认的logger-->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<!-- 包含dev 分支生效 -->
<springProfile name="dev">
<!--根目录定义了两个appender,日志会通过往这两个appender里面写-->
<!--level表示本系统中所有大于等于info级别的日志都会往appender中写 -->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<!-- 保存info级别以上的kafka日志 -->
<logger name="org.apache.kafka" level="info">
<!-- 除了继承到的控制台与总文件日志,另外保存kafka日志打印到自己的日志文件中-->
<appender-ref ref="KAFKA_LOG_FILE"/>
</logger>
<!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
<logger name="com.alibaba.cola" level="DEBUG"/>
</springProfile>
<!--数据库日志-->
<!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
<!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
<!--additivity表示要不要使用rootLogger配置的appender进行输出-->
<logger name="com.apache.ibatis" level="TRACE" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>
示例:把全局warn级别的日志打印到指定文件
使用filter标签!!!!
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义参数,后面可以通过${APP_NAME}使用 -->
<property name="APP_NAME" value="sample"/>
<!-- ../logs日志文件会生成在项目的外面的一个文件夹下 -->
<!-- ./logs日志文件会生成在项目中的logs文件夹一个文件夹 -->
<property name="LOG_PATH" value="./logs"/>
<property name="LOG_FILE" value="${LOG_PATH}/application.log"/>
<property name="KAFKA_FILE" value="${LOG_PATH}/kafka.log"/>
<property name="WARN_FILE" value="${LOG_PATH}/warn.log"/>
<property name="LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35}[%line] - %msg%n"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义日志输出的路径-->
<file>${LOG_FILE}</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
<!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<!-- 达到这个大小后,旧的文件日志将会被异步删除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="KAFKA_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义日志输出的路径-->
<file>${KAFKA_FILE}</file>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
<!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
<fileNamePattern>${KAFKA_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<!-- 达到这个大小后,旧的文件日志将会被异步删除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="WARN_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义日志输出的路径-->
<file>${WARN_FILE}</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 当前运行的日志文件名从${LOG_FILE}读取,日志文件名为 application.log -->
<!-- 第二天运行就会把昨天得日志文件名称,修改成 application.log.yyyy-MM-dd.log -->
<fileNamePattern>${WARN_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<!-- 达到这个大小后,旧的文件日志将会被异步删除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 文件输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--rootLogger是默认的logger-->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<!-- 包含dev 分支生效 -->
<springProfile name="test">
<!--根目录定义了两个appender,日志会通过往这两个appender里面写-->
<!--level表示本系统中所有大于等于info级别的日志都会往appender中写 -->
<root level="INFO">
<!--定义了两个appender,日志会通过往这两个appender里面写-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="WARN_LOG_FILE"/>
</root>
<!-- 保存info级别以上的kafka日志 -->
<logger name="org.apache.kafka" level="info">
<!-- 除了继承到的控制台与总文件日志,另外保存kafka日志打印到自己的日志文件中-->
<appender-ref ref="KAFKA_LOG_FILE"/>
</logger>
</springProfile>
</configuration>