日志级别基础 等级从高到低(并不是全部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>