關於日志slf4j+logback&logback.xml配置


1.maven依賴

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <!--    <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.25</version>
        </dependency>-->
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.2.3</version>
    <!--   <scope>test</scope>-->
        </dependency>
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
     <!--  <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-core</artifactId>
          <version>1.2.3</version>
        </dependency>-->
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-access -->
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-access</artifactId>
          <version>1.2.3</version>
        </dependency>

2.logback.xml

<?xml version="1.0" encoding="utf-8" ?>
<configuration debug="false">

    <!--設置日志上下文名稱,后面輸出格式中可以通過定義 %contextName 來打印日志上下文名稱-->
    <contextName>sk-log</contextName>
    <!--用來設置相關變量,通過key-value的方式配置,然后在后面的配置文件中通過 ${key}來訪問-->
    <property name = "sk.name" value ="test"></property>

    <!--======================================ConsoleAppender===================================================================-->
    <!--日志輸出組件,主要負責日志的輸出以及格式化日志。  stdout:標准輸出-->
    <appender name ="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定義了一個過濾器,在LEVEL之下的日志輸出不會被打印出來   這個和logger里的level共同決定在stdout輸出的級別(filter非必需的)
          臨界值過濾器,過濾掉低於指定臨界值的日志。當日志級別等於或高於臨界值時,過濾器返回NEUTRAL;當日志級別低於臨界值時,日志會被拒絕。 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <!--級別過濾器,根據日志級別進行過濾。如果日志級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志
        <level>:設置過濾級別
        <onMatch>:用於配置符合過濾條件的操作
        <onMismatch>:用於配置不符合過濾條件的操作-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>debug</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
        <!-- encoder 默認配置為PatternLayoutEncoder -->
        <!--定義控制台輸出格式-->
        <!--
            %d{yyyy-MM-dd  HH:mm:ss} 時間格式 hh是12h制  HH是24h制
            [%thread]      線程
            %-5level       級別
            %logger{36}    日志包     36包長度
            [%file : %line]   目標類  和  行數
            %msg           log信息
            %n              換行
            (encoder必需的)-->
        <encoder>
            <pattern>%d{yyyy-MM-dd  HH:mm:ss} [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!--==========================RollingFileAppender===============================================================================-->

        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <!--如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true
            but 我加了之后 警告 Append mode is mandatory for RollingFileAppender. Defaulting to append=true. 我還是不加了-->
<!--            <append>false</append>-->

            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>trace</level>
            </filter>
                <!--rollingPolicy沒寫的話 會有警告 No TriggeringPolicy was set for the RollingFileAppender named file 沒有輸出本地文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>E:/logDemo1/${sk.name}.log.%i.%d{yyyy-MM-dd}</fileNamePattern>
                <!--30d周期-->
                <maxHistory>30</maxHistory>
                <!--每個文件最大10M-->
                <maxFileSize>10MB</maxFileSize>
            </rollingPolicy>

            <encoder>
                <pattern>%d{yyyy-MM-dd  HH:mm:ss} [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
            </encoder>
        </appender>

    <!--=========================================================================================================-->

    <!--root是默認的logger 這里沒設定輸出級別-->
    <root>
        <!--定義了appender,日志會通過往appender里面寫-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>

    <!--==================================指定包的日志======================================================-->
    <!--這個logger沒有指定appender,它會繼承root節點中定義的那些appender     -->
    <logger name="com.sk" level="info">
    <!-- <appender-ref ref="stdout"/>-->
    </logger>

    <!--通過 LoggerFactory.getLogger("Test3") 可以獲取到這個logger
        additivity="false" 沒有它  輸出雙倍   自身的和繼承的root的appender-->
    <logger name="Test3" level="trace" additivity="false">
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </logger>

    <!--由於設置了 additivity="false" ,所以輸出時不會使用rootLogger的appender-->
    <!--但是這個logger本身又沒有配置appender,所以使用這個logger輸出日志的話就不會輸出到任何地方-->
<!--    <logger name="Test3" level="trace" additivity="false"></logger>-->

</configuration>

  在idea上的截圖。。。(長截圖真好)

 3.Test


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM