<?xml version="1.0" encoding="UTF-8" ?> <!-- 在此未說明屬性爲非必須的,那就表示屬性必須設置 --> <!-- *****************最小配置文件結構介紹******************************* --> <!-- <configuration> <appender></appender> //存在1或多個,功能指定記錄輸出目的地 <root></root> //最多存在一個,根logger <logger><logger> //存在1或多個,普通logger </configuration> --> <!-- *************************各個標籤詳細介紹********************************** --> <!-- debug(非必須)屬性:true表示輸出logback內部的日誌信息(不影響配置和級別) ; scan(非必須)屬性:默認爲false,true表示掃描配置文件的變化並自動從新配置,默認每隔1分鐘掃描一次; scanPeriod(非必須)屬性:搭配scan屬性使用,設置掃描的間隔時間 --> <configuration debug="true" scan="true" scanPeriod="1 seconds"> <!-- 用於指定logger上下文名稱,默認爲default --> <contextName>logback</contextName> <!-- 設置變量FILE_PATH,用於指定名爲FILE的appender的目的文件存放的目錄 --> <property name="FILE_PATH" value="D:/"></property> <!-- **********************配置TurboFilter類型的過濾器********************************** TurboFilter類型過濾器有三種:這裏使用的是DuplicateMessageFilter 子標籤<cacheSize>:表示內部緩存對舊消息引用的個數上限 子標籤<allowedRepetitions>:表示容許消息出現的重複次數上限,超過次數上限的記錄請求將被丟棄 --> <!-- 使用自定義的TurboFilter --> <turboFilter class="logback.SampleTurboFilter"> </turboFilter> <!-- 使用DuplicateTurboFilter --> <turboFilter class="ch.qos.logback.classic.turbo.DuplicateMessageFilter"> <allowedRepetitions>1</allowedRepetitions> <cacheSize>20</cacheSize> </turboFilter> <!-- ************************經常使用的Appender************************************** --> <!-- <appender>標籤包含2個屬性:name、class name屬性:指定appender名稱;class屬性:指定目的地類型 (好比ConsoleAppender、FileAppender等) class屬性的值決定了<appender>標籤包含的子標籤的種類。 --> <!-- 該appender的功能是將記錄信息以特定格式寫到控制檯 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--encoder:將事件轉換爲字符串 默認配置爲PatternLayoutEncoder類 encoder用於替代Layout,encoder擴展了Layout功能 Layout功能:只負責把事件轉換爲字符串,可是不能指定什麼時候將記錄寫入到指定目的地 encoder功能:即負責把事件轉換爲字符串,也能夠指定什麼時候將記錄寫入到指定目的地 --> <encoder> <!-- 指定輸出格式 %d{} :表示時間 %thread:請求記錄所在的線程名 %-5level:用5位顯示請求級別 %logger{36}:輸出logger名,{36}表示logger名最大佔用的字符位數,{0}表示最簡短logger名(不包含包名)。 --> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern> </encoder> </appender> <!-- 該appender的功能是將記錄信息以特定格式寫到文件 --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <!-- $使用變量FILE_PATH的格式,相似Linux中使用的格式:${FILE_PATH} --> <file>${FILE_PATH}/file.log</file> <encoder> <!-- 指定輸出格式 --> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern> </encoder> </appender> <!-- ***********************以最小窗體爲指定的滾動規則的appender***************************** RollingFileAppender類型的appender中必須包含4個子標籤:<file>、<rollingPolicy>、<triggerPolicy>、<encoder> <rollingPolicy>標籤用於指定滾動規則,該標籤有一個屬性class:用於指定實現具體的滾動規則的類。 <triggerPolicy>標籤用於指定發生滾動的條件,該標籤有一個屬性class:用於指定具體滾動條件的類。 <rollingPolicy>和<triggerPolicy>中具體包含哪些子標籤是由class屬性指定的類來決定的,由於不一樣的類有不一樣的參數,從而須要不一樣的標籤來傳參 --> <!-- 該appender的功能是將記錄信息以特定格式寫到文件,當文件達到20MB時,建立以特定規則新的 文件,以後的記錄會寫到新文件--> <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 在第一次觸發滾動以前記錄將會寫到該文件中 --> <file>${FILE_PATH}/rolling.log</file> <!-- 前提條件:class的值爲FixedWindowRollingPolicy,表示以最小窗體爲指定的滾動規則 RollingPolicy標籤必須子標籤:<fileNamePattern>、<minIndex>、<maxIndex> <fileNamePattern>:表示滾動條件達到後,建立文件名的規則,其中"%i"表明數字1~5。第一次觸發條件,建立文件rolling1.log,而且記錄開始寫到這個文件中 <minIndex>與<maxIndex>共同決定了文件的個數 --> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${FILE_PATH}/rolling%i.log</fileNamePattern> <minIndex>1</minIndex> <maxIndex>5</maxIndex> </rollingPolicy> <!-- <triggeringPolicy>功能:用於限制文件大小 前提條件:class的值爲SizeBasedTriggeringPolicy,表示以文件大小爲觸發條件 只有一個子標籤<maxFileSize>用於指定觸發條件 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>20MB</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern> </encoder> </appender> <!-- *****************************根據時間滾動 爲滾動規則和條件的appender(最經常使用)*********************** --> <!-- 該appender的功能:將記錄信息以特定格式寫到文件,當文件達到20MB時,建立以時間爲特定規則新的 文件,以後的記錄會寫到新文件, 文件個數最多維持10個,文件達到10個 後刪除舊的文件--> <appender name="time_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- TimeBasedRollingPolicy實現了RollingPolicy與TriggeringPolicy, 所以只須要<rollingPolicy>標籤,不須要<TriggeringPolicy>標籤 <rollingPolicy>標籤有兩個子標籤:<fileNamePattern>、<maxHistory> <fileNamePattern>:用於指定文件名命名規則 <maxHistory>:保留文件的個數,超過了就刪除建立時間最久的文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名 --> <fileNamePattern>${FILE_PATH}/java_log/test%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern> <maxHistory>10</maxHistory> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern> </encoder> </appender> <!-- ***********************常規級別過濾器的使用**************************************** 本配置功能:過濾並接受請求級別爲debug的請求,對於其餘級別請求一概丟棄。 --> <appender name="level_console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern> </encoder> </appender> <!-- ***********************常規臨界值濾器的使用**************************************** 本配置功能:請求級別高於或等於info的請求響應NEUTRAL(進入下一個環節),低於info的級別請求響應DENY(表示丟棄)。 --> <appender name="threshold_console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} -%msg%n</pattern> </encoder> </appender> <!-- appender的目的地爲mysql數據庫 --> <appender name="jdbc" class="ch.qos.logback.classic.db.DBAppender"> <!-- 這裏只使用jdbc中的DriverManager得到鏈接,不使用任何數據源 --> <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource"> <driverClass>com.mysql.jdbc.Driver</driverClass> <url>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC</url> <user>root</user> <password>Zp970321</password> </connectionSource> </appender> <!-- ******如下DBAppender類型的appender的目的地爲mysql數據庫******** -->
<appender name="c3p0_datasource" class="ch.qos.logback.classic.db.DBAppender"> <!-- 這裏使用DataSource得到鏈接--> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <!-- 實現DataSource的數據庫鏈接池有不少,好比DBCP、c3p0、Druid等 這裏使用的是c3p0 --> <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> <user>root</user> <password>Zp970321</password> <driverClass>com.mysql.jdbc.Driver</driverClass> <jdbcUrl>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8</jdbcUrl> </dataSource> </connectionSource> </appender> <appender name="Druid_datasource" class="ch.qos.logback.classic.db.DBAppender"> <!-- 這裏使用DataSource得到鏈接--> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <!-- 實現DataSource的數據庫鏈接池有不少,好比DBCP、c3p0、Druid等 這裏使用的是Druid --> <dataSource class="com.alibaba.druid.pool.DruidDataSource"> <username>root</username> <password>Zp970321</password> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <url>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8</url> </dataSource> </connectionSource> </appender> <appender name="dbcp_datasource" class="ch.qos.logback.classic.db.DBAppender"> <!-- 這裏使用DataSource得到鏈接--> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <!-- 實現DataSource的數據庫鏈接池有不少,好比DBCP、c3p0、Druid等 這裏使用的是dbcp --> <dataSource class="org.apache.commons.dbcp.BasicDataSource"> <username>root</username> <password>Zp970321</password> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <url>jdbc:mysql://localhost:3306/logback?useUnicode=true&characterEncoding=utf8</url> </dataSource> </connectionSource> </appender> <!-- level屬性:指定根logger的分配級別 --> <root level="debug"> <!-- ref屬性:指定根logger關聯的appender --> <appender-ref ref="STDOUT"></appender-ref> </root> <!-- name:指定logger名稱;level:指定logger的分配級別;additivity(非必須,默認爲true):設置appender疊加性 --> <logger name="demo" level="debug" additivity="false"> <appender-ref ref="FILE"></appender-ref> </logger> <logger name="demo2" level="debug"> <appender-ref ref="rollingFile"></appender-ref> </logger> <logger name="demo3" level="debug"> <appender-ref ref="time_file"></appender-ref> </logger> <logger name="demo4" level="debug" additivity="false"> <appender-ref ref="level_console"></appender-ref> </logger> <logger name="demo5" level="debug" additivity="false"> <appender-ref ref="threshold_console"></appender-ref> </logger> <logger name="demo6" level="debug" additivity="false"> <appender-ref ref="jdbc"></appender-ref> </logger> <logger name="demo7" level="debug" additivity="false"> <appender-ref ref="c3p0_datasource"></appender-ref> </logger> <logger name="demo8" level="debug" additivity="false"> <appender-ref ref="Druid_datasource"></appender-ref> </logger> <logger name="demo9" level="debug" additivity="false"> <appender-ref ref="dbcp_datasource"></appender-ref> </logger> </configuration>
上述的全部appender與filter都試驗過,因此能夠保證正確性,若是有不懂的能夠跳轉到個人博客https://www.cnblogs.com/z-x-p/java
裏面有很詳細的講解。mysql