springboot日志配置


默認情況下,spring boot使用的是LogBack日志系統。在spring-boot-starter-web和spring-boot-starter中都已經默認依賴了logging的工具包。

如果要使用指定版本的logging或其他的日志工具,需要先在starter-web和starter中將spring-boot-starter-logging排除。

使用LogBack

當我們在項目中添加了spring-boot-starter-web或spring-boot-starter依賴時,項目會自動關聯依賴logging。即默認配置了LogBack,因此可以直接在項目中使用LoggerFactory來創建logger對象(注意:在LogBack中使用的是LoggerFactory)。

private static final Logger log = LoggerFactory.getLogger(Logger.class);

使用方法與其他日志一致

log.info("info");
log.war("war");
log.error("error");

在不添加配置的情況下,默認的logback日志范圍是info。同時我們可以在application.properties中進行相應的配置(測試代碼配置了該屬性,但不論是logback或log4j2均無效,需要待查原因,考慮可能是未添加日志配置文件原因)

##配置日志級別
##root為根目錄,即配置項目的所有日志
logging.level.root=warn
##配置com.yxf.demo包下的日志
logging.level.com.yxf.demo=WARN

默認情況下,日志只會輸出在控制台,在application.properties中可以進行相應的配置。需要注意的是,如果我們沒有添加logback-spring.xml配置文件,項目只會識別logging.file屬性,不會識別logging.path屬性,即如下配置,項目日志會生成在當前項目根目錄下,而不會生成在d盤,文件名為springbootdemo.log。

logging.path=D://t
logging.file=springbootdemo.log

配置輸出格式

logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n //配置控制台打印格式
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n //控制日志文件輸出格式

上面配置中,各個符號對應的含義

%d{HH:mm:ss.SSS}——日志輸出時間
%t——輸出日志的線程(thread)名字,這在Web應用以及異步任務處理中很有用
%-5level——日志級別,並且使用5個字符靠左對齊
%logger ——logger的名稱,rootlogger沒有名稱,因此不會有輸出
%msg——日志消息msg
%n——平台的換行符
%class{36}——類全名
%l——行號
%m——方法名
%f——類文件名
%I——包括類名、文件名、方法名、行數

最后,以上均是在springboot的application.properties配置文件中進行的日志配置,如果我們在單獨的配置文件中配置,可以將文件命名為logback-spring.xml,項目會在加載springboot的配置文件后自動加載該文件,但是千萬不能命名為logback.xml,因為雖然也會被項目自動加載,但是會在加載springboot的配置文件之前就加載,此時springboot里的配置將會無效。

使用Log4j2

如果使用非LogBack的日志系統,首先需要從相關依賴中剔除logging的依賴,並添加要使用的日志系統的相關依賴,如log4j2。

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
  </dependency>

如果不使用log4j2的配置文件,直接在application中配置,可以參考上面logback,相關配置參數一致。

如果使用log4j2的配置文件,將文件命名為log4j2.xml或log4j2-spring.xml,項目會對其自動加載。其他命名則需要在application中配置logging.config=classpath:**.xml。

log4j2的logger獲取為LogManager,如下

Logger log = LogManager.getLogger();

剩余關於log4j2配置文件的配置,如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration> <Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> <PatternLayout charset="UTF-8" pattern="[%-5p] %d %c - %m%n" /> </Console> <File name="File" fileName="/Users/jackie/workspace/rome/springboot.log"> <PatternLayout pattern="%m%n" /> </File> </Appenders> <Loggers> <root level="info"> <AppenderRef ref="CONSOLE" /> <AppenderRef ref="File" /> </root> </Loggers> </configuration>

<configuration>:log4j2.xml的最外層標簽,所有的配置均在該標簽內。

  status:設置log4j2自身內部信息輸出,可以設置trace、info、error等,也可以不設置。如果設置為trace,可以看到log4j自身內部的信息輸出。

  monitorInterval:設置log4j2自動檢測配置、重新配置的時間,單位為秒。

<appenders>:輸出源,可以配置一個或多個。

  <Console>:輸出控制台配置。

    name:該輸出源的名稱。

    target:配置控制台的輸出方式,可以是SYSTEM_ERR、SYSTEM_OUT等等。

    <thresholdFilter>:配置輸出范圍。

      level:輸出的最低范圍,可以為trace、debug、info、warn、error、fatal等。

      onMatch:配置達到level的日志信息如何處理,可以為ACCEPT(接收並打印)或DENY(不打印)。

      onMismatch:配置未達到level的日志信息如何處理,可以為ACCEPT(接收並打印)或DENY(不打印)。

    <PatternLayout>:日志輸出格式。

      pattern:日志輸出格式。

  <File>:文件輸出配置

    name:該輸出源的名稱。

    filename:輸出文件的路徑與文件名。

    append:配置為false,每次運行項目時自動清空之前日志,配置為true,不會清空之前日志。

    <ThresholdFilter>、<PatternLayout>:如上。

  <RollingFile>:配置文件輸出,當文件大小達到指定數額時,自動存入年-月文件夾下並壓縮,作為存檔。

    name:該輸出源的名稱。

    filename:輸出文件的路徑與文件名。

    filePattern:配置壓縮文件路徑與文件名,如log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.zip

    <PatternLayout>:如上。

    <SizeBasedTriggeringPolicy size="10MB"/> :配置文件大小。

    <TimeBasedTriggeringPolicy interval="1" />:配置文件更新時間,如果filePattern最小單位為月(如%d{yyyy-MM}),則單位為月,如果最小單位為日(如%d{MM-dd}),則單位為日。

    <DefaultRolloverStrategy max="20">:配置文件夾中最大的文件數,默認為7個文件。

  <RollingRandomAccessFile>:注意該方式采用異步操作,存在有緩沖區,日志不是實時地打印

<loggers>:輸出對象。

  <root level="trace">:默認的logger

    <appender-ref ref="console" />:配置該logger的輸出源,ref是上面所配的輸出源的name值。只有配置了的輸出源才會生效。

  <logger>:配置logger。

    name:該logger的名稱。

    level:

    additivity:可加性,可以設置為true或false。如果為true,會繼承root及父logger下的輸出源。如果為false,則不會繼承其他logger。

    <appender-ref ref="console" />:配置該logger的輸出源,ref是上面所配的輸出源的name值。只有配置了的輸出源才會生效。

注意:

1.我們通過LogManager.getLogger();獲取logger,會根據配置文件中<logger>的name屬性來尋找使用哪一個Logger配置,一般是定義指定的包下的日志放在單獨的文件中。如果使用getClass(),name匹配獲得的類全名。如果使用字符串,name匹配字符串。如果不指定參數,或者匹配不到指定的logger,則默認獲取root。(如果指定參數為字符串,則會根據字符串匹配logger的name值,匹配上,則使用logger的配置,否則仍使用root配置。如果指定參數為類對象,如xxx.class,則會根據類全名,即包名+類名,來匹配logger的name值,匹配上,則使用logger的配置,否則仍使用root配置。)

2.logger具有繼承性,所有的logger默認繼承root,可以通過屬性additivity=false,設置不繼承。同時name值com.yxf.demo1的logger,會默認繼承name值為com.yxf的logger。也可以通過屬性additivity來配置是否繼承。

 3.配置appender只輸出某一級別的日志,可以如下

        <RollingFile name="infoRollingFile" fileName="${LOG_HOME}/%d{yyyy-MM-dd}log.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/sgylog-%d{yyyy-MM-dd}-%i.log.zip">
            <PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
            <filters>
                <!-- 接收info及以上日志 -->
                <ThresholdFilter level="info"></ThresholdFilter>
                <!-- 不接收error及以上日志,兩者搭配后即只輸出info和warn兩個級別的日志 -->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"></ThresholdFilter>
            </filters>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
        </RollingFile>

 

參考地址:https://www.cnblogs.com/hlhdidi/p/6749572.html

下面記錄一下我目前使用的日志配置

<configuration>
    <properties>
        <!--日志目錄-->
        <property name="LOG_HOME">d://log</property>
        <!--日志格式-->
        <property name="LOG_FORMAT">%d{HH:mm:ss} %-5level %class{36} %L %M - %msg%n</property>
    </properties>

    <appenders>
        <!--控制台輸處-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--輸出級別info及以上-->
            <thresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"></thresholdFilter>
            <PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
        </Console>

        <!--文件輸出-->
        <File name="file" fileName="${LOG_HOME}/error.log">
            <Filters>
                <!--輸出級別info及以上-->
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"></ThresholdFilter>
            </Filters>
            <PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
        </File>

        <!--文件輸出,輸出級別為info和warn,按日,按大小生成壓縮包-->
        <RollingFile name="infoRollingFile" fileName="${LOG_HOME}/info.log"
                     filePattern="${LOG_HOME}/info/$${date:yyyy-MM}/sgyInfo-%d{yyyy-MM-dd}-%i.log.zip">
            <PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
            <filters>
                <!--限制輸出級別為info和warn-->
                <ThresholdFilter level="info"></ThresholdFilter>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"></ThresholdFilter>
            </filters>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
        </RollingFile>

        <!--文件輸出,輸出級別為error及以上,因為異常不是每天發生,因此只按大小生成壓縮包-->
        <RollingFile name="errorRollingFile" fileName="${LOG_HOME}/error.log"
                     filePattern="${LOG_HOME}/error/$${date:yyyy-MM}/sgyError-%d{yyyy-MM-dd}-%i.log.zip">
            <!--輸出級別為error及以上-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"></ThresholdFilter>
            <PatternLayout pattern="${LOG_FORMAT}"></PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
        </RollingFile>
    </appenders>

    <loggers>
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="infoRollingFile"/>
        </root>
        <Logger name="info" additivity="false">
            <appender-ref ref="infoRollingFile"/>
        </Logger>
        <Logger name="error" additivity="false">
            <appender-ref ref="errorRollingFile"/>
        </Logger>
    </loggers>
</configuration>

l


免責聲明!

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



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