日誌級別基礎 等級從高到低(並不是全部log實現都有以下級別): OFF、 FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALLexpress
參考:app
http://aub.iteye.com/blog/1101222框架
一、簡介 LOGBack,一個「可靠、通用、快速而又靈活的Java日誌框架」。async
二、部署使用工具
在工程src目錄下創建logback.xml 注: 1.logback首先會試着查找logback.groovy文件; 2.當沒有找到時,繼續試着查找logback-test.xml文件; 3.當沒有找到時,繼續試着查找logback.xml文件; 4.若是仍然沒有找到,則使用默認配置(打印到控制檯)。性能
三、示例lua
<?xml version="1.0" encoding="UTF-8"?> <!-- configuration: scan:true設置加載配置,false不加載,defulat:true scanPeriod:掃描時間,默認1分鐘 debug:是否打印logback內部日誌 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- property:屬性名稱 k-v格式 contextName:每一個logger都關聯到logger上下文 timestamp:時間戳,datePattern 格式 --> <property name="APP_NAME" value="walter" /> <contextName>${APP_NAME}</contextName> <timestamp key="time" datePattern="yyyyMMdd'T'HHmmss"/> <property name="LOG_HOME" value="F:/project/logback" /> <!-- 配置開啓 JMXConfigurator,經過jconsle等工具能夠查看配置 --> <jmxConfigurator /> <!-- appender: name-引用名稱,class-類名 ch.qos.logback.core。* ConsoleAppender:控制檯 FileAppender:文件 RollingFileAppender:滾動 rollingPolicy:滾動策略,TimeBasedRollingPolicy-最經常使用按照時間 maxHistory:控制保留的歸檔文件的最大數量 timeBasedFileNamingAndTriggeringPolicy:maxFileSize最大文件 filter:ThresholdFilter:臨界值過濾器,指定級別level EvaluatorFilter:求值過濾器,如實例-過濾不含「billing」的日誌 <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator> <expression>return message.contains("billing");</expression> </evaluator> <OnMatch>ACCEPT</OnMatch> <OnMismatch>DENY</OnMismatch> </filter> --> <appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/error_%d{yyyy-MM-dd}_%i.log.zip </fileNamePattern> <maxHistory>7</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>300MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <file>${LOG_HOME}/error.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <charset>UTF-8</charset> <pattern>%date [%thread] [%file:%line] [%level %logger{0}] - %msg%n </pattern> </encoder> </appender> <appender name="warn_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/warn_%d{yyyy-MM-dd}_%i.log.zip </fileNamePattern> <maxHistory>7</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>300MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <file>${LOG_HOME}/warn.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> <encoder> <charset>UTF-8</charset> <pattern>%date [%thread] [%file:%line] [%level %logger{0}] - %msg%n </pattern> </encoder> </appender> <appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/info_%d{yyyy-MM-dd}_%i.log.zip </fileNamePattern> <maxHistory>7</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>300MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <file>${LOG_HOME}/info.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <encoder> <charset>UTF-8</charset> <pattern>%date [%thread] [%file:%line] [%level %logger{0}] - %msg%n </pattern> </encoder> </appender> <appender name ="info_async_file" class= "ch.qos.logback.classic.AsyncAppender"> <!-- 不丟失日誌.默認的,若是隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 --> <discardingThreshold >12</discardingThreshold> <!-- 更改默認的隊列的深度,該值會影響性能.默認值爲256 --> <queueSize>1024</queueSize> <includeCallerData>false</includeCallerData> <!-- 添加附加的appender,最多隻能添加一個 --> <appender-ref ref ="info_file"/> </appender> <appender name ="warn_async_file" class= "ch.qos.logback.classic.AsyncAppender"> <discardingThreshold >12</discardingThreshold> <queueSize>1024</queueSize> <includeCallerData>false</includeCallerData> <appender-ref ref ="warn_file"/> </appender> <appender name ="error_async_file" class= "ch.qos.logback.classic.AsyncAppender"> <discardingThreshold >12</discardingThreshold> <queueSize>1024</queueSize> <includeCallerData>false</includeCallerData> <appender-ref ref ="error_file"/> </appender> <appender name="special_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/special_%d{yyyy-MM-dd}_%i.log.zip </fileNamePattern> <maxHistory>7</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>300MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <file>${LOG_HOME}/special.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <encoder> <charset>UTF-8</charset> <pattern>%date [%thread] [%file:%line] [%level %logger{0}] - %msg%n </pattern> </encoder> </appender> <!-- logger:特定包或類日誌打印,能夠包含零個或多個<appender-ref>元素 name:特定包或類名稱 level:日誌級別 additivity: 是否向上級loger傳遞打印信息。默認是true --> <logger name="com.ent.yy.logback.SpecialLog" level="info" additivity="false"> <appender-ref ref="special_file" /> </logger> <!-- root:根logger,logger的一種,能夠包含零個或多個<appender-ref>元素 level:日誌級別 默認是DEBUG --> <root level="info"> <appender-ref ref="info_async_file" /> <appender-ref ref="warn_async_file" /> <appender-ref ref="error_async_file" /> </root> </configuration>