log4j2的一些配置,爲某個類某個方法單獨文件打印日誌,定時刪除日誌和springboot的logback日誌單獨類打印

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("惺惺惜惺惺想尋尋尋尋");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章