springboot配置logback日誌示例大全

PS: 1、springboot默認使用的日誌框架是logback;
2、想使用spring擴展profile支持,要以logback-spring.xml命名,其他如property需要改爲springProperty

一、configuration (最外層)

  1. scan
    當此屬性設置爲true時,配置文件如果發生改變,將會被重新加載,默認值爲true。

  2. scanPeriod:
    設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。

  3. debug:
    當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。

<configuration scan="true" scanPeriod="60 seconds" debug="false">

</configuration>

二、contextName

每個logger都關聯到logger上下文,默認上下文名稱爲“default”。但可以使用contextName標籤設置成其他名字,用於區分不同應用程序的記錄。

三、property

用來定義變量值的標籤,property標籤有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。通過property定義的值會被插入到logger上下文中。定義變量後,可以使“${name}”來使用變量

<property name="log.name" value="annoroad-log-demo"/>

<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%logger{80}:%5line-%msg%n" />

<substitutionProperty name="log.base" value="./logs/${log.name}"/>

四、appender

  1. 定義
    用於定義日誌如何輸出

  2. 屬性
    2.1 name:

    用於定義該appender的名稱,該名稱需要在root或者logger的配置中使用

    2.2 class:

    用於指定實現該appender的實現類

  3. 類別
    3.1 ConsoleAppender:

    把日誌添加到控制檯

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
     <pattern>${log.pattern}</pattern>
  </encoder>
</appender>

3.2 FileAppender:

把日誌添加到文件

3.3 RollingFileAppender:

滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件是,將日誌記錄到其他文件,是FileAppender的子類


 <!-- 定義appender的名稱爲logfile,用於在logger後者root中進行引用-->

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

    <!-- 指定日誌打印級別閾值,只能比logger或者root中設置的高,低了無效,如果logger中level設置的info,這裏設置的warn,那麼只打印warn級別往上的日誌 -->

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

       <level>warn</level>

   </filter>

   <!-- 上面限制的是範圍,這裏可以針對單個進行處理,如下設置表示,只有info級別的日誌纔會被打印,其他的都會拒絕打印,當然前提是level或者上面的那個filter的級別設置的低於等於info纔有效 -->

   <filter class="ch.qos.logback.classic.filter.LevelFilter">

      <level>info</level>

        <!-- 表示如果是info則通過可以打印-->

      <onMatch>ACCEPT</onMatch>

        <!-- 表示如果不是info則拒絕,不可以打印-->

      <onMismatch>DENY</onMismatch>
   </filter>

   <!-- 設置日誌文件的策略 -->

   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

        <!--設置文件名的生成規則,以及日誌文件存放的路徑--> 

        <!-- 這裏表示每天生成一個日誌文件,我們可以修改成每月生成一個,或者每小時生成一個 -->

        <FileNamePattern>${log.base}/${log.name}.%d{yyyy-MM-dd}.log</FileNamePattern>

        <!-- 最多保留10天的日誌文件 -->

        <MaxHistory>10</MaxHistory>

  </rollingPolicy>

 <!-- 這裏用來設置日誌的打印格式 -->

 <encoder>

    <pattern>${log.pattern}</pattern>

 </encoder>

</appender>

五、logger

1.定義

用於指定什麼包或者類下的什麼類型的日誌怎麼輸出

2.屬性
2.1 name:

用於指定要使用該logger配置的包名或類名(全路徑)

2.2 additivity:

用來描述是否向上級logger傳遞打印信息。默認是true。

簡單說就是需不需要將要打印的信息也讓上級logger打印,如果爲true的話,日誌就會打印多遍。

<!-- 指定該logger控制test目錄下的日誌,並且不讓不向上級傳遞打印信息 -->

<logger name="com.annoroad.log.demo.test" additivity="false">

    <!-- 指定只打印info以上的日誌 (TRACE、DEBUG、INFO、WARN、ERROR) -->

   <level value="info"/>

    <!-- 指定appender爲demo,可以指定多個appender-->

   <appender-ref ref="demo" />

   <!--<appender-ref ref="logfile" />-->

</logger>

六、root

一種特殊的logger,其實也是logger,如果沒有單獨制定logger,默認就是用root

<root>
    <level value="INFO"/><!-- TRACE、DEBUG、INFO、WARN和ERROR -->
    <appender-ref ref="stdout"/>
</root>

七、例子

<configuration>
	<!-- 定義日誌文件名稱 -->
	<property name="log.name" value="annoroad-log-demo"/>
	<!-- 定義日誌格式 -->
	<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%logger{80}:%5line-%msg%n"/>
	<!-- 定義日誌存放目錄-->
	<substitutionProperty name="log.base" value="./logs/${log.name}"/>

	<!-- 控制檯輸出 -->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

	<!-- 控制檯輸出,限制level等級大於warn的纔會輸出 -->
	<appender name="stdout2" class="ch.qos.logback.core.ConsoleAppender">
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>warn</level>
		</filter>

		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

	<!-- 輸出到文件,一天換一個日誌文件,只輸出warn級別的日誌,其他級別的日誌都拒絕輸出,日誌文件最多存10天 -->
	<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>warn</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/${log.name}.%d{yyyy-MM-dd}.log</FileNamePattern>
			<MaxHistory>10</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

	<!-- 輸出到文件,一天換一個日誌文件,只輸出info級別以上的日誌信息,但是不輸出warn級別的日誌,日誌文件最多存10天 -->
	<appender name="logfile2" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>info</level>
		</filter>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>warn</level>
			<onMatch>DENY</onMatch>
			<onMismatch>ACCEPT</onMismatch>
		</filter>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}/${log.name}2.%d{yyyy-MM-dd}.log</FileNamePattern>
			<MaxHistory>10</MaxHistory>
			</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

	<!-- 
		對於test文件夾下的日誌輸出:
			trace級別以上的輸出到控制檯,
			warn級別的日誌輸出到annoroad-log-demo.日期.log文件,
			info級別以上,不包括warn級別的日誌輸出到annoroad-log-demo2.日期.log文件,
		並且不向上級logger傳遞打印信息
	-->
	<logger name="com.annoroad.log.demo.test" additivity="false">
		<level value="trace"/>
		<appender-ref ref="stdout" />
		<appender-ref ref="logfile" />
		<appender-ref ref="logfile2" />
	</logger>

	<!-- 
		對於test2文件夾下的日誌,warn級別以上的日誌輸出的控制檯,warn以下日誌不輸出,並且不向上級logger傳遞打印信息
	-->
	<logger name="com.annoroad.log.demo.test2" additivity="false">
		<level value="info"/>
		<appender-ref ref="stdout2" />
	</logger>

	<!--
		對於starter下面的日誌,debug級別以上的控制檯輸出,並且輸出兩遍,因爲默認向上級logger傳遞打印信息,所以root也會進行打印
	-->
	<logger name="com.annoroad.springboot.starter">
		<level value="debug"/>
		<appender-ref ref="stdout"/>
	</logger>

	<!--
		其它沒有具體設置的都按此設置進行輸出
	-->
	<root>
		<level value="INFO"/>
		<appender-ref ref="stdout"/>
	</root>

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