溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

log4j2.xml中如何配置 logback

發(fā)布時間:2021-07-30 14:33:36 來源:億速云 閱讀:134 作者:Leah 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)log4j2.xml中如何配置 logback ,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">

<Properties>
   <Property name="LOG_HOME">E:/logs</Property>
   <Property name="LOG_NAME">shou</Property>
   <Property name="LOG_PATTERN">%d|1771|shou||%p||%c|%m|%t||||%ex%n</Property>
</Properties>

<Appenders>
   <!--commented by ysma RFC5424是日志輸出格式,通常會涉及日志服務(wù)器中template的配置
   <Syslog name="LBSYSLOG" format="RFC5424" host="10.40.16.62"
         port="515" protocol="TCP" appName="shou1771" messageId="shou"
         facility="LOCAL2" newLine="true" mdcId="mdc" includeMDC="true"
         newLineEscape="#NewLine#" exceptionPattern="%ex"
         immediateFlush="false" connectTimeoutMillis="3000" reconnectionDelayMillis="3000">
      <LoggerFields>
         <KeyValuePair key="syslogk1" value="%l"/>
         <KeyValuePair key="syslogk2" value="%X{syslogk2}"/>
         <KeyValuePair key="syslogk3" value="%X{syslogk3}"/>
         <KeyValuePair key="syslogk4" value="%X{syslogk4}"/>
         <KeyValuePair key="syslogk5" value="%X{syslogk5}"/>
      </LoggerFields>
   </Syslog>-->

   <!--打印日志到控制臺-->
   <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="${LOG_PATTERN}"/>
   </Console>

   <!-- DEBUG日志格式 RollingFile 滾動日志的配置 filePattern需要%i 的關(guān)鍵字和 yyyy-MM-dd的格式 這樣 DefaultRolloverStrategy 才能有效按天刪除過期日志文件-->
   <RollingFile name="shou_debug_appender" fileName="${LOG_HOME}/${LOG_NAME}-debug.log"
             filePattern="${LOG_HOME}/${LOG_NAME}-debug.log.%d{yyyy-MM-dd}-%i.gz" append="true" immediateFlush="true">
      <Filters>
         <!-- 控制輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
         <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout>
         <pattern>${LOG_PATTERN}</pattern>
      </PatternLayout>
      <Policies>
         <!--interval,表示多久滾動一次。默認(rèn)是1 hour。modulate=true用來調(diào)整時間:比如現(xiàn)在是早上3am,interval是4,那么第一次滾動是在4am,接著是8am,12am...而不是7am    是基于時間的滾動 rollover-->
         <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
         <!--日志文件最大的大小 是基于大小的滾動  即超過500m就滾動一次日志-->
         <SizeBasedTriggeringPolicy size="500 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="7"/>
   </RollingFile>

   <!-- INFO日志格式 -->
   <RollingFile name="shou_info_appender" fileName="${LOG_HOME}/${LOG_NAME}-info.log"
             filePattern="${LOG_HOME}/${LOG_NAME}-info.log.%d{yyyy-MM-dd}-%i.gz" append="true" immediateFlush="true">
      <Filters>
         <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout>
         <pattern>${LOG_PATTERN}</pattern>
      </PatternLayout>
      <Policies>
         <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
         <SizeBasedTriggeringPolicy size="500 MB"/>
      </Policies>
      <!--保留7天的日志 默認(rèn)也是保留7天-->
      <DefaultRolloverStrategy max="7"/>
   </RollingFile>

   <!-- ERROR日志格式 -->
   <RollingFile name="shou_error_appender" fileName="${LOG_HOME}/${LOG_NAME}-error.log"
             filePattern="${LOG_HOME}/${LOG_NAME}-error.log.%d{yyyy-MM-dd}-%i.gz" append="true" immediateFlush="true">
      <Filters>
         <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <PatternLayout>
         <pattern>${LOG_PATTERN}</pattern>
      </PatternLayout>
      <Policies>
         <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
         <SizeBasedTriggeringPolicy size="500 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="7"/>
   </RollingFile>

</Appenders>
<Loggers>
   <!-- 配置日志的根節(jié)點 Logger中沒有明確指定輸出路徑的都會進(jìn)入到root中依據(jù)level進(jìn)行輸出-->
   <Root level="INFO">
      <AppenderRef ref="shou_info_appender"/>
      <AppenderRef ref="shou_error_appender" />
   </Root>

   <!-- 第三方日志系統(tǒng) additivity=false標(biāo)識不走root模式輸出日志, AppenderRef 指定了輸出路徑-->
   <Logger name="com.esup" level="DEBUG" additivity="false">
      <AppenderRef ref="shou_debug_appender"/>
      <AppenderRef ref="shou_info_appender"/>
      <AppenderRef ref="shou_error_appender"/>
   </Logger>
   <Logger name="com.shou" level="DEBUG" additivity="false">
      <AppenderRef ref="shou_debug_appender"/>
      <AppenderRef ref="shou_info_appender"/>
      <AppenderRef ref="shou_error_appender"/>
   </Logger>
</Loggers>
</Configuration>

logback配置樣例

<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:當(dāng)此屬性設(shè)置為true時,配置文件如果發(fā)生改變,將會被重新加載,默認(rèn)值為true。
scanPeriod:設(shè)置監(jiān)測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認(rèn)單位是毫秒當(dāng)scan為true時,此屬性生效。默認(rèn)的時間間隔為1分鐘。
debug:當(dāng)此屬性設(shè)置為true時,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)。默認(rèn)值為false。
-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">
    <!-- 定義日志的根目錄 -->
    <property name="LOG_HOME" value="/home/lbyw/logs" />
    <!-- 定義日志文件名稱(項目應(yīng)用名稱) -->
    <property name="appName" value="butt-service"/>
    <!-- 定義當(dāng)前項目所屬項目部門 -->
    <property name="projectDept" value="1771"/>
    <!-- ch.qos.logback.core.ConsoleAppender 表示控制臺輸出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- <pattern>%date [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %m%n</pattern> -->
            <pattern>%date|${projectDept}|${appName}|%X{logType}|%level|%X{traceId}|%logger|%message|%thread|%X{col2}|%X{col3}|%X{col4}|%exception%n</pattern>
        </layout>
    </appender>

    <!-- 滾動記錄文件,先將日志記錄到指定文件,當(dāng)符合某個條件時,將日志記錄到其他文件 -->  
    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名稱 -->
        <file>${LOG_HOME}/${appName}.log</file>
        <!--
		        當(dāng)發(fā)生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名
		        TimeBasedRollingPolicy: 最常用的滾動策略,它根據(jù)時間來制定滾動策略,既負(fù)責(zé)滾動也負(fù)責(zé)出發(fā)滾動。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
			            滾動時產(chǎn)生的文件的存放位置及文件名稱 %d{yyyy-MM-dd}:按天進(jìn)行日志滾動 
			            %i:當(dāng)文件大小超過maxFileSize時,按照i進(jìn)行文件滾動
            -->
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 
			            可選節(jié)點,控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件。假設(shè)設(shè)置每天滾動,
			            且maxHistory是365,則只保存最近365天的文件,刪除之前的舊文件。注意,刪除舊文件是,
			            那些為了歸檔而創(chuàng)建的目錄也會被刪除。
            -->
            <MaxHistory>365</MaxHistory>
            <!-- 
            	當(dāng)日志文件超過maxFileSize指定的大小是,根據(jù)上面提到的%i進(jìn)行日志文件滾動 注意此處配置SizeBasedTriggeringPolicy是無法實現(xiàn)按文件大小進(jìn)行滾動的,必須配置timeBasedFileNamingAndTriggeringPolicy
            -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!--
			  日志輸出格式:
			  timestamp|project|app|logtype|level|traceid|logger|msg|col1|col2|col3|col4|exception
			 
			  說明:
			  timestamp: 統(tǒng)一格式y(tǒng)yyy-MM-dd HH:mm:ss.SSS,如2018-08-20 00:00:01,095
			  project: 項目:1771/7881/uhaozu
			  app: 具體應(yīng)用:www/order/intf
			  logtype: 日志種類,自定義名稱,和col配合記錄自定義信息
			  traceid: 唯一線程號,invokeNO
			  msg: log4j或logback輸出的正文
			  exception: JavaStack
			  col1-col4:預(yù)留的4個字段,col1-col2是字符串,col3-col4是數(shù)字,內(nèi)容自定義;
			 
			  特別說明:
			  logtype和col字段結(jié)合,可滿足日志自定義的場景,前提是自己記住col的含義,如:
			     記錄用戶操作的耗時: logtype="useractiontime",col1=userid,col2="login",col3=0.5
			     記錄某個重要方法的耗時:logtype="methodtime", col1=方法名稱, col3=0.8
			     日志文件地址/home/lbyw/logs下
        -->    
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%date|${projectDept}|${appName}|%X{logType}|%level|%X{traceId}|%logger|%message|%thread|%X{col2}|%X{col3}|%X{col4}|%exception%n</pattern>
        </layout>
    </appender>
    

    <!-- 
		logger主要用于存放日志對象,也可以定義日志類型、級別
		name:表示匹配的logger類型前綴,也就是包的前半部分
		level:要記錄的日志級別,包括 TRACE < DEBUG < INFO < WARN < ERROR
		additivity:作用在于children-logger是否使用 rootLogger配置的appender進(jìn)行輸出,
		false:表示只用當(dāng)前l(fā)ogger的appender-ref,true:
		表示當(dāng)前l(fā)ogger的appender-ref和rootLogger的appender-ref都有效
    -->
    <!-- SpringBoot的高級Profile功能 -->
    <springProfile name="dev">
	    <!-- Butt service logger -->
	    <logger name="com.liebao.butt" level="debug" additivity="false">
	    	<appender-ref ref="stdout" />
	    </logger>
	    <!-- SQL logger -->
	    <logger name="tk.mybatis.mapper.common.base" level="debug" additivity="false">
	    	<appender-ref ref="stdout" />
	    </logger>
	    <!-- Spring framework web logger -->
	    <logger name="org.springframework.web.servlet.DispatcherServlet" level="debug" additivity="false">
	    	<appender-ref ref="stdout" />
	    </logger>
	</springProfile>
    <!-- 
	    root與logger是父子關(guān)系,沒有特別定義則默認(rèn)為root,任何一個類只會和一個logger對應(yīng),
	    要么是定義的logger,要么是root,判斷的關(guān)鍵在于找到這個logger,然后判斷這個logger的appender和level。 
    -->
    <root level="info">
        <appender-ref ref="stdout" />
        <appender-ref ref="appLogAppender" />
    </root>
</configuration>

上述就是小編為大家分享的log4j2.xml中如何配置 logback 了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI