日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

logback 常用配置详解(二) appender

發(fā)布時(shí)間:2025/3/17 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 logback 常用配置详解(二) appender 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


詳細(xì)整理了logback常用配置

不是官網(wǎng)手冊的翻譯版,而是使用總結(jié),旨在更快更透徹的理解其配置

logback 簡介

logback常用配置詳解(一)<configuration> and <logger>

logback 常用配置詳解(二)<appender>

logback 常用配置詳解(三)<filter>

logback 中文手冊(官網(wǎng)手冊的翻譯版,在這里向中文版譯者-陳華,說聲辛苦啦)



logback 常用配置詳解(二)<appender>

<appender>:

<appender>是<configuration>的子節(jié)點(diǎn),是負(fù)責(zé)寫日志的組件。

<appender>有兩個(gè)必要屬性name和class。name指定appender名稱,class指定appender的全限定名。

1.ConsoleAppender:

把日志添加到控制臺,有以下子節(jié)點(diǎn):

<encoder>:對日志進(jìn)行格式化。(具體參數(shù)稍后講解

<target>:字符串 System.out 或者 System.err ,默認(rèn) System.out ;

例如:

Xml代碼:

  • <configuration>

  • <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">

  • <encoder>

  • <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>

  • </encoder>

  • </appender>

  • <rootlevel="DEBUG">

  • <appender-refref="STDOUT"/>

  • </root>

  • </configuration>

  • 2.FileAppender:

    把日志添加到文件,有以下子節(jié)點(diǎn):

    <file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動(dòng)創(chuàng)建,沒有默認(rèn)值。

    <append>:如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true。

    <encoder>:對記錄事件進(jìn)行格式化。(具體參數(shù)稍后講解

    <prudent>:如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認(rèn)是 false。

    例如:

    Xml代碼:

  • <configuration>

  • <appendername="FILE"class="ch.qos.logback.core.FileAppender">

  • <file>testFile.log</file>

  • <append>true</append>

  • <encoder>

  • <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>

  • </encoder>

  • </appender>

  • <rootlevel="DEBUG">

  • <appender-refref="FILE"/>

  • </root>

  • </configuration>

  • 3.RollingFileAppender:

    滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件。有以下子節(jié)點(diǎn):

    <file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動(dòng)創(chuàng)建,沒有默認(rèn)值。

    <append>:如果是 true,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件,默認(rèn)是true。

    <encoder>:對記錄事件進(jìn)行格式化。(具體參數(shù)稍后講解

    <rollingPolicy>:當(dāng)發(fā)生滾動(dòng)時(shí),決定RollingFileAppender 的行為,涉及文件移動(dòng)和重命名。

    <triggeringPolicy>:告知RollingFileAppender合適激活滾動(dòng)。

    <prudent>:當(dāng)為true時(shí),不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個(gè)限制,1不支持也不允許文件壓縮,2不能設(shè)置file屬性,必須留空。

    rollingPolicy:

    TimeBasedRollingPolicy: 最常用的滾動(dòng)策略,它根據(jù)時(shí)間來制定滾動(dòng)策略,既負(fù)責(zé)滾動(dòng)也負(fù)責(zé)出發(fā)滾動(dòng)。有以下子節(jié)點(diǎn):

    <fileNamePattern>:

    必要節(jié)點(diǎn),包含文件名及“%d”轉(zhuǎn)換符,“%d”可以包含一個(gè)java.text.SimpleDateFormat指定的時(shí)間格式,如:%d{yyyy-MM}。如果直接使用 %d,默認(rèn)格式是 yyyy-MM-dd。RollingFileAppender 的file字節(jié)點(diǎn)可有可無,通過設(shè)置file,可以為活動(dòng)文件和歸檔文件指定不同位置,當(dāng)前日志總是記錄到file指定的文件(活動(dòng)文件),活動(dòng)文件的名字不會改變;如果沒設(shè)置file,活動(dòng)文件的名字會根據(jù)fileNamePattern的值,每隔一段時(shí)間改變一次。“/”或者“\”會被當(dāng)做目錄分隔符。

    <maxHistory>:

    可選節(jié)點(diǎn),控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件。假設(shè)設(shè)置每個(gè)月滾動(dòng),且 <maxHistory>是6,則只保存最近6個(gè)月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創(chuàng)建的目錄也會被刪除。

    FixedWindowRollingPolicy: 根據(jù)固定窗口算法重命名文件的滾動(dòng)策略。有以下子節(jié)點(diǎn):

    <minIndex>:窗口索引最小值

    <maxIndex>:窗口索引最大值,當(dāng)用戶指定的窗口過大時(shí),會自動(dòng)將窗口設(shè)置為12。

    <fileNamePattern >:

    必須包含“%i”例如,假設(shè)最小值和最大值分別為1和2,命名模式為 mylog%i.log,會產(chǎn)生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項(xiàng),例如,mylog%i.log.gz 或者 沒有l(wèi)og%i.log.zip

    triggeringPolicy:

    SizeBasedTriggeringPolicy: 查看當(dāng)前活動(dòng)文件的大小,如果超過指定大小會告知 RollingFileAppender 觸發(fā)當(dāng)前活動(dòng)文件滾動(dòng)。只有一個(gè)節(jié)點(diǎn):

    <maxFileSize>:這是活動(dòng)文件的大小,默認(rèn)值是10MB。

    例如:每天生成一個(gè)日志文件,保存30天的日志文件。

    Java代碼:

  • <configuration> ? ?

  • ?<appender name="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"> ? ?

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

  • ? ? ?<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> ? ?

  • ? ? ?<maxHistory>30</maxHistory> ? ?

  • ? ?</rollingPolicy> ? ?

  • ? ?<encoder> ? ?

  • ? ? ?<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> ? ?

  • ? ?</encoder> ? ?

  • ?</appender> ? ?

  • ?<root level="DEBUG"> ? ?

  • ? ?<appender-ref ref="FILE" /> ? ?

  • ?</root> ? ?

  • </configuration> ?


  • ?例如:按照固定窗口模式生成日志文件,當(dāng)文件大于20MB時(shí),生成新的日志文件。窗口大小是1到3,當(dāng)保存了3個(gè)歸檔文件后,將覆蓋最早的日志。

    Xml代碼:

  • <configuration>

  • <appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">

  • <file>test.log</file>

  • <rollingPolicyclass="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">

  • <fileNamePattern>tests.%i.log.zip</fileNamePattern>

  • <minIndex>1</minIndex>

  • <maxIndex>3</maxIndex>

  • </rollingPolicy>

  • <triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

  • <maxFileSize>5MB</maxFileSize>

  • </triggeringPolicy>

  • <encoder>

  • <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>

  • </encoder>

  • </appender>

  • <rootlevel="DEBUG">

  • <appender-refref="FILE"/>

  • </root>

  • </configuration>

  • 4.另外還有SocketAppender、SMTPAppender、DBAppender、SyslogAppender、SiftingAppender,并不常用,這些就不在這里講解了,大家可以參考官方文檔。當(dāng)然大家可以編寫自己的Appender。

    <encoder>:

    負(fù)責(zé)兩件事,一是把日志信息轉(zhuǎn)換成字節(jié)數(shù)組,二是把字節(jié)數(shù)組寫入到輸出流。

    目前PatternLayoutEncoder 是唯一有用的且默認(rèn)的encoder ,有一個(gè)<pattern>節(jié)點(diǎn),用來設(shè)置日志的輸入格式。使用“%”加“轉(zhuǎn)換符”方式,如果要輸出“%”,則必須用“\”對“\%”進(jìn)行轉(zhuǎn)義。

    例如:

    Xml代碼:

  • <encoder>

  • <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>

  • </encoder


  • <pattern>里面的轉(zhuǎn)換符說明:

    轉(zhuǎn)換符 作用



    c {length }
    lo {length }
    logger {length }
    輸出日志的logger名,可有一個(gè)×××參數(shù),功能是縮短logger名,設(shè)置為0表示只輸入logger最右邊點(diǎn)符號之后的字符串。 ? Conversion specifier Logger name Result



    %loggermainPackage.sub.sample.BarmainPackage.sub.sample.Bar
    %logger{0}mainPackage.sub.sample.BarBar
    %logger{5}mainPackage.sub.sample.Barm.s.s.Bar
    %logger{10}mainPackage.sub.sample.Barm.s.s.Bar
    %logger{15}mainPackage.sub.sample.Barm.s.sample.Bar
    %logger{16}mainPackage.sub.sample.Barm.sub.sample.Bar
    %logger{26}mainPackage.sub.sample.BarmainPackage.sub.sample.Bar


    C {length }
    class {length }
    輸出執(zhí)行記錄請求的調(diào)用者的全限定名。參數(shù)與上面的一樣。盡量避免使用,除非執(zhí)行速度不造成任何問題。
    contextName
    cn
    輸出上下文名稱。
    d {pattern }
    date {pattern }
    輸出日志的打印日志,模式語法與java.text.SimpleDateFormat 兼容。 ? Conversion Pattern Result


    %d2006-10-20 14:06:49,812
    %date2006-10-20 14:06:49,812
    %date{ISO8601}2006-10-20 14:06:49,812
    %date{HH:mm:ss.SSS}14:06:49.812
    %date{dd MMM yyyy ;HH:mm:ss.SSS}20 oct. 2006;14:06:49.812
    F / file輸出執(zhí)行記錄請求的java源文件名。盡量避免使用,除非執(zhí)行速度不造成任何問題。
    caller{depth}caller{depth, evaluator-1, ... evaluator-n}輸出生成日志的調(diào)用者的位置信息,整數(shù)選項(xiàng)表示輸出信息深度。

    例如, %caller{2} ? 輸出為:

    0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)

    例如, %caller{3} ? 輸出為:

    16 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17) Caller+2 at mainPackage.ConfigTester.main(ConfigTester.java:38)
    L / line輸出執(zhí)行日志請求的行號。盡量避免使用,除非執(zhí)行速度不造成任何問題。
    m / msg / message

    輸出應(yīng)用程序提供的信息。

    M / method輸出執(zhí)行日志請求的方法名。盡量避免使用,除非執(zhí)行速度不造成任何問題。
    n輸出平臺先關(guān)的分行符“\n”或者“\r\n”。
    p / le / level輸出日志級別。
    r / relative輸出從程序啟動(dòng)到創(chuàng)建日志記錄的時(shí)間,單位是毫秒
    t / thread輸出產(chǎn)生日志的線程名。
    replace(p ){r, t}

    p 為日志內(nèi)容,r 是正則表達(dá)式,將p 中符合r 的內(nèi)容替換為t 。

    例如, "%replace(%msg){'\s', ''}"

    格式修飾符,與轉(zhuǎn)換符共同使用:

    可選的格式修飾符位于“%”和轉(zhuǎn)換符之間。

    第一個(gè)可選修飾符是左對齊 標(biāo)志,符號是減號“-”;接著是可選的最小寬度 修飾符,用十進(jìn)制數(shù)表示。如果字符小于最小寬度,則左填充或右填充,默認(rèn)是左填充(即右對齊),填充符為空格。如果字符大于最小寬度,字符永遠(yuǎn)不會被截?cái)唷?strong>最大寬度 修飾符,符號是點(diǎn)號"."后面加十進(jìn)制數(shù)。如果字符大于最大寬度,則從前面截?cái)?。點(diǎn)符號“.”后面加減號“-”在加數(shù)字,表示從尾部截?cái)唷?/p>

    例如:%-4relative 表示,將輸出從程序啟動(dòng)到創(chuàng)建日志記錄的時(shí)間 進(jìn)行左對齊 且最小寬度為4。

    **下一篇將講解過濾器 ? filter**

    轉(zhuǎn)載于:https://blog.51cto.com/aubdiy/815736

    與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的logback 常用配置详解(二) appender的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。