logback学习
1.Logback介紹
Logback 分為三個模塊:Core、Classic?和 Access。Core模塊是其他兩個模塊的基礎。 Classic模塊擴展了core模塊。 Classic模塊相當于log4j的顯著改進版。Logback-classic 直接實現了 SLF4J API。
要引入logback,由于Logback-classic依賴slf4j-api.jar和logback-core.jar,所以要把slf4j-api.jar、logback-core.jar、logback-classic.jar,添加到要引入Logbac日志管理的項目的class path中.
以下是maven pom配置
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.7</version> </dependency> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.2</version> </dependency> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.2</version> </dependency>2.Logback的配置
Logger、Appender和 Layout
Logback建立于三個主要類之上:Logger、Appender 和 Layout。Logger類是logback-classic模塊的一部分,而Appender和Layout接口來自logback-core。作為一個多用途模塊,logback-core 不包含任何 logger。
Logger作為日志的記錄器,把它關聯到應用的對應的context上后,主要用于存放日志對象,也可以定義日志類型、級別。Appender主要用于指定日志輸出的目的地,目的地可以是控制臺、文件、遠程套接字服務器、 MySQL、 PostreSQL、 Oracle和其他數據庫、 JMS和遠程UNIX Syslog守護進程等。Layout 負責把事件轉換成字符串,格式化的日志信息的輸出。
2.1 Logger context
各個logger 都被關聯到一個 LoggerContext,LoggerContext負責制造logger,也負責以樹結構排列各 logger。
如果 logger的名稱帶上一個點號后是另外一個 logger的名稱的前綴,那么,前者就被稱為后者的祖先。如果 logger與其后代 logger之間沒有其他祖先,那么,前者就被稱為子logger 之父。比如,名為 "com.foo""的 logger 是名為"com.foo.Bar"之父。root logger 位于 logger 等級的最頂端。
2.2 有效級別與級別繼承
Logger 可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定義于 ch.qos.logback.classic.Level類。如果 logger沒有被分配級別,那么它將從有被分配級別的最近的祖先那里繼承級別。root logger 默認級別是 DEBUG。
打印方法與基本選擇規則
打印方法決定記錄請求的級別。例如,如果 L 是一個 logger 實例,那么,語句 L.info("..")是一條級別為 INFO 的記錄語句。記錄請求的級別在高于或等于其 logger 的有效級別時被稱為被啟用,否則,稱為被禁用。
記錄請求級別為 p,其 logger的有效級別為 q,只有則當 p>=q時,該請求才會被執行。
該規則是 logback 的核心。級別排序為:?TRACE < DEBUG < INFO < WARN < ERROR。
例如,轉換模式"%-4relative [%thread] %-5level %logger{32} - %msg%n"在 PatternLayout里會輸出形如:
176?[main] DEBUG manual.architecture.HelloWorld2 - Hello world.- 第一個字段是自程序啟動以來的逝去時間,單位是毫秒。
- 第二個地段發出記錄請求的線程。
- 第三個字段是記錄請求的級別。
- 第四個字段是與記錄請求關聯的 logger 的名稱。
- "-"之后是請求的消息文字。
2.3 Logback的默認配置
如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默認地會調用BasicConfigurator ,創建一個最小化配置。最小化配置由一個關聯到根 logger 的ConsoleAppender 組成。輸出用模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 進行格式化。root logger 默認級別是 DEBUG。
2.4 logback配置文件
Logback 配置文件的語法非常靈活。可以這樣描述配置文件的基本結構:以<configuration>開頭,后面有零個或多個<appender>元素,有零個或多個<logger>元素,有最多一個<root>元素。
2.4 Logback默認配置的采用的步驟
2.5 Logback自定義配置
2.5.1 配置root logger
<root>元素配置根 logger。該元素有一個 level屬性。沒有 name 屬性,因為已經被命名為"ROOT"。 Level 屬性的值大小寫無關,其值為下面其中一個字符串:TRACE、DEBUG、INFO、WARN、ERROR、ALL和 OFF。注意不能設置為"INHERITED" 或"NULL"。 <logger>元素可以包含零個或多個<appender-ref>元素。與<logger>元素類似,聲明<root>元素后,會先關閉然后移除全部當前 appender,只引用聲明了的 appender。
如果 root 元素沒有引用任何 appender,就會失去所有 appender。
2.5.2 配置 Appenders
Appender 用<appender>元素配置,該元素必要屬性 name 和 class。 name 屬性指定 appender 的名稱,class 屬性指定 appender 類的全限定名。 <appender>元素可以包含零個或多個<layout>元素、零個或多個<encoder>元素和零個或多個<filter>元素。除了這三個常用元素之外,還可以包含 appender 類的任意數量的 javabean
2.5.3 運用滾動策略與觸發策略
RollingFileAppender 繼承 FileAppender,能夠滾動記錄文件。例如,RollingFileAppender能先記錄到文件"log.txt",然后當符合某個條件時,變成記錄到其他文件。 RollingFileAppender 有兩個與之互動的重要子組件。第一個是RollingPolicy,負責滾動。第二個是 TriggeringPolicy,決定是否以及何時進行滾動。所以,RollingPolicy 負責"什么", TriggeringPolicy 負責"何時"。
要想 RollingFileAppender 起作用,必須同時設置 RollingPolicy 和 TriggeringPolicy。不過,如果 RollingPolicy 也實現了 TriggeringPolicy 接口,那么只需要設置 RollingPolicy。
下面附上我的配置
xml version="1.0" encoding="UTF-8" <configuration><jmxConfigurator/><!--定義一個名為 console 的appender,并將其關聯到ch.qos.logback.core.ConsoleAppender--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!-- 典型的日志pattern --><encoder><!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度 %msg:日志消息,%n是換行符--><pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern><!-- 此處設置字符集 --><charset>UTF-8</charset></encoder></appender><!-- 綜合時間與大小的滾動策略,先按天滾動,文件大于100mb時再按大小滾動 --><appender name="businessLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${catalina.base}/logs/business.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${catalina.base}/logs/business-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!-- 保存前30天的日志文件 --><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern><!-- 此處設置字符集 --><charset>UTF-8</charset></encoder></appender><!-- 錯誤日志 --><appender name="errorlogFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${catalina.base}/logs/error.log</file><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${catalina.base}/logs/error-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!-- 保存前30天的日志文件 --><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern><!-- 此處設置字符集 --><charset>UTF-8</charset></encoder></appender><!-- 需要打印SQL時,修改下面的INFO為DEBUG --><logger name="com.os" level="INFO"/> <!-- 正式環境使用 INFO,測試時改為 DEBUG --><!-- business log 使用獨立的appender,不繼承Root的appender --><logger name="business" level="INFO" additivity="false"><appender-ref ref="businessLogFile"/></logger><logger name="myerror" level="ERROR" additivity="false"><appender-ref ref="errorlogFile"/></logger><logger name="org.springframework" level="INFO"/><logger name="org.mybatis" level="INFO"/><logger name="org.apache.ibatis" level="INFO"/><root level="INFO"><appender-ref ref="console"/><appender-ref ref="businessLogFile"/><appender-ref ref="errorlogFile"/></root> </configuration>- 13 小時前發布
總結
- 上一篇: 记一次 @Transactional不生
- 下一篇: java List实体排序