log4j2.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- status="OFF",可以去掉,它的含義爲是否記錄log4j2本身的event信息,默認是OFF -->
<configuration status="OFF">
<!-- 定義下面的引用名 -->
<Properties>
<!--linux目錄 /logs -->
<!--<property name="basePath">/logs</property>-->
<property name="basePath">${sys:catalina.home}/logs/webchat</property>
<property name="rolling_pattern">%d{yyyy-MM-dd}-%i.gz</property>
<property name="every_file_size">10MB</property><!-- 日誌切割的最小單位 -->
<property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n</property>
</Properties>
<!--先定義所有的appender -->
<appenders>
<!--這個輸出控制檯的配置 -->
<Console name="Console" target="SYSTEM_OUT" >
<!--控制檯只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
<!--這個都知道是輸出日誌的格式 -->
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
</Console>
<!--這個會打印出所有的信息,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的文件夾下面並進行壓縮,作爲存檔 -->
<!-- 按月生成歸檔日誌,可以使用 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" -->
<RollingFile name="RollingFile" fileName="${basePath}/sinter.log"
filePattern="${basePath}/sinter.log${rolling_pattern}" >
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
<SizeBasedTriggeringPolicy size="${every_file_size}" />
</RollingFile>
<!--fileName com.sinter.interceptor.IndexInterceptor.java 方法日誌 -->
<RollingFile name="InterceptorRollingFile" fileName="${basePath}/interceptor.log"
filePattern="${basePath}/sinter.log${rolling_pattern}" >
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
<SizeBasedTriggeringPolicy size="${every_file_size}" />
</RollingFile>
<!--fileName com/sinter/controller/login/LoginController.java sendCode方法日誌 -->
<!-- <File name="sendCodeFile" fileName="${basePath}/sendCode.log" append="false">
<PatternLayout pattern="${log_pattern}"/>
</File>-->
<RollingFile name="sendCodeRollingFile" fileName="${basePath}/sendCodeRollingFile.log" append="true"
filePattern="${basePath}/sendCodeRollingFile.log${rolling_pattern}">
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
<Policies>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
<!-- 每天凌晨0點 匹配的所有文件在10天或更長時間內將在翻滾時間刪除。-->
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${basePath}" maxDepth="2">
<IfFileName glob="*.gz" />
<IfLastModified age="10d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</appenders>
<!--然後定義logger,只有定義了logger並引入的appender,appender纔會生效 -->
<loggers>
<!--建立一個默認的root的logger,需要在root的level中指定輸出的級別, -->
<root level="INFO" >
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root>
<!--將logger中的 additivity 屬性配置爲 false,則這個logger不會將日誌流反饋到root中。-->
<Logger name="sendCodeLogger" additivity="false" level="INFO">
<!--<appender-ref ref="sendCodeFile" level="INFO" />-->
<appender-ref ref="sendCodeRollingFile" level="INFO" />
</Logger>
<Logger name="interceptorLogger" additivity="false" level="INFO">
<appender-ref ref="InterceptorRollingFile" level="INFO" />
</Logger>
</loggers>
</configuration>
其實主要的是RollingFile標籤中的:
<RollingFile name="sendCodeRollingFile" fileName="${basePath}/sendCodeRollingFile.log" append="true"
filePattern="${basePath}/sendCodeRollingFile.log${rolling_pattern}">
<PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
<Policies>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
<!-- 每天凌晨0點 匹配的所有文件在10天或更長時間內將在翻滾時間刪除。-->
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${basePath}" maxDepth="2">
<IfFileName glob="*.gz" />
<IfLastModified age="10d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
和loggers標籤的:
<!--將logger中的 additivity 屬性配置爲 false,則這個logger不會將日誌流反饋到root中。-->
<Logger name="sendCodeLogger" additivity="false" level="INFO">
<!--<appender-ref ref="sendCodeFile" level="INFO" />-->
<appender-ref ref="sendCodeRollingFile" level="INFO" />
</Logger>
使用代碼:
static Logger log = LogManager.getLogger("sendCodeLogger");
log.info("###################ip爲: "+ip);
==========================================
SpringBoot的logback.xml 配置指定包或類輸出至單獨的日誌文件中
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!--定義日誌文件的存儲地址目錄--><!--
<property name="LOG_HOME" value="./USER_QQBK_GA/qqbk/"/>-->
<property name="LOG_HOME" value="./qqbk/"/>
<!-- 日誌級別 有高到低 ERROR、WARN、INFO、DEBUG、TRACE -->
<!--輸出到控制檯-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>-->
<withJansi>true</withJansi>
<encoder>
<!--格式化輸出:%d:表示日期 %thread:表示線程名 %-5level:級別從左顯示5個字符寬度 %msg:日誌消息 %n:是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--輸出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/qbbk_service_operation.log</file> <!-- 日誌名稱 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按分鐘分割 文件名2019-10-07[0].log,如果文件大小超過10240kb,則繼續分割日誌2019-10-07[1].log,
2019-10-07[2].log。%d和%i不能缺少
-->
<fileNamePattern>${LOG_HOME}%d{yyyy-MM-dd}[%i].log</fileNamePattern>
<maxFileSize>10240kb</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<!--格式化輸出:%d:表示日期 %thread:表示線程名 %-5level:級別從左顯示5個字符寬度 %msg:日誌消息 %n:是換行符-->
<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
<pattern>%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="debugfile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/qbbk_service_debug.log</file>
<!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
</filter>-->
<!-- 配置日誌所生成的目錄以及生成文件名的規則 在logs/mylog-2017-06-31.0.log.zip -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/qbbk_service_debug.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!-- 如果按天來回滾,則最大保存時間爲30天,30天之前的都將被清理掉 -->
<maxHistory>30</maxHistory>
<!-- 日誌總保存量爲10GB -->
<totalSizeCap>10 GB</totalSizeCap>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件達到 最大128MB時會被壓縮和切割 -->
<maxFileSize>128 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %.-5level %class{25} - %msg%n</pattern>
</encoder>
</appender>
<!--輸出到文件-->
<appender name="sysfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/qbbk_service_system.log</file> <!-- 日誌名稱 -->
<!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
</filter>-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按分鐘分割 文件名2019-10-07[0].log,如果文件大小超過10240kb,則繼續分割日誌2019-10-07[1].log,
2019-10-07[2].log。%d和%i不能缺少
-->
<fileNamePattern>${LOG_HOME}/qbbk_service_system.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<maxFileSize>10240kb</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<!--格式化輸出:%d:表示日期 %thread:表示線程名 %-5level:級別從左顯示5個字符寬度 %msg:日誌消息 %n:是換行符-->
<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
<pattern>%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--==============================單獨類日誌輸出方式=============================-->
<!-- log info start -->
<appender name="demo-info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/aa.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/aa.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!-- 如果按天來回滾,則最大保存時間爲30天,30天之前的都將被清理掉 -->
<maxHistory>30</maxHistory>
<!-- 日誌總保存量爲10GB -->
<totalSizeCap>10 GB</totalSizeCap>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件達到 最大128MB時會被壓縮和切割 -->
<maxFileSize>128 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%msg%n</pattern>
</layout>
</encoder>
<!--日誌文件最大的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--對應類的路徑地址 -->
<logger name="com.jiuddata.common.utils.LogsUtils" level="DEBUG">
<appender-ref ref="demo-info" />
</logger>
<!--==========================單獨類日誌輸出方式結束===============================-->
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
<appender-ref ref="sysfile" />
<appender-ref ref="debugfile" />
<!-- 將我們新增的配置添加進root中統一設置輸出級別 -->
</root>
<!-- 指定文件,日誌級別和輸出路徑 -->
<logger name="com.demo.controller.MainTestController" level="info" additivity="false">
<appender-ref ref="console" />
</logger>
</configuration>
使用:
public class LogsUtils {
private final static Logger LOGGER = LoggerFactory.getLogger(LogsUtils.class);
LOGGER.info("惺惺惜惺惺想尋尋尋尋");
}