Logback
jar包介绍:
1.logback-classic:它是log4j的改良版本,同时它完整的实现了slf4j API ,使你可以很方便的更换成其他日志系统,如log4j或jdk 14 logger
2.logback-access:访问模块与servlet容器集成,提供通过http访问日志的功能
3.logback-core:其他俩个模块的基础模块
Maven 依赖jar包:
添加依赖包logback使用,需要和slf4j一起使用,所以需要添加的依赖包有 slf4j-api.jar,logback-classic.jar,logback-core.jar,logback-access.jar(这个暂时用不到所以不添加了)
logback配置文件:
Logback默认配置的步骤
(1). 尝试在 classpath下查找文件logback-test.xml;
(2). 如果文件不存在,则查找文件logback.xml;
(3). 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台。
1.根节点 <configuration scan="true" scanPeriod="60 seconds" debug="false" > ...</configuration>
scan:默认为true,如果配置文件发生变化时,将会被重载。
scanPeriod:检测配置文件被修改的时间间隔,默认的时间单位是毫秒,当scan被设置为true时,默认值为一分钟
debug:默认为false,当设置为true时,将打印logback内部日志信息,实时查看logback运行状态
2.子节点:<contextName>${maven.app-name}</contextName>
//maven.app-name为maven定义的properties标签
用来设置上下文名称,默认为default
3.子节点:<property name="logHome" value="${maven.log-home}/tesla_${CONTEXT_NAME}" scope="context" />
用来定义变量值,应用在logger上下文中,使用"${}“ 来引用变量
4.子节点<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> 获取时间戳字符串,他有两个属性key和datePattern
key为当前<timestamp>的名称
datePattern格式化时间格式
5.子节点<jmxConfigurator/> 使用jmx动态设置日志级别,而无需重启服务器。
6.字节点<appender name="CONSOLE" class="ch.qos.logback.cron.ConsoleAppender">
日志输出组件,name指定组件名称,class指定appender 的全限定类名。
//ch.qos.logback.cron.ConsoleAppender 将日志输出到控制台上
<appender name="CONSOLE" class="ch.qos.logback.cron.ConsoleAppender">
<filter class="com.logtext.ConsoleLogFilter">
<consoleLogEnable>${maven.console-log-enable}</consoleLogEnable>
</filter>
<filter class="com.logtext.FunctionThresholdFilter">
<functionIds>demo</functionIds>
<level>DEBUG</level>
</filter>
<layout class="ch.qos.logback.classic.PatternLayout"> //格式化日志输出内容
<pattern>
<![CDATA[%-4relative [%thread] %-5level %logger{35} - %msg %n]]>
<pattern>
</layout>
<charset>UTF-8</charset>
</appender >
com.logtext.ConsoleLogFilter 继承 ch.qos.logback.core.filter.Filter 过滤器会执行decide(ILoggingEvent event)方法,decide方法返回结果是枚举类FilterReply(DENY, NEUTRAL, ACCEPT其中一个)。返回值为DENY时,日志事件直接丢弃这条日志,不会再传递给剩下的过滤器。返回值为NEUTRAL时,则传递给下面的过滤器。返回值为ACCEPT时,日志事件立即处理这条日志,跳过调用其它过滤器。
com.logtext.FunctionThresholdFilter 继承ch.qos.logback.classic.filter.ThresholdFilter 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
<appender name="SIFT_CRONTASK" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator> //日志鉴别器,根据key对应的value鉴别日志事件,然后委托给具体的appender写日志
<key>CRON_TASK_NAME</key>
<defaultValue>application</defaultValue>
</discriminator>
<sift>
<appender name="SIFT_${CRON_TASK_NAME}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logHome}/crontask/%d{yyyy-MM-dd}/${CRON_TASK_NAME}
_%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNameingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNameingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<Pattern>%n%-4r ... </Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
</sift>
</appender>
SiftingAppender会对日志事件做一些区分,然后不同的事件SiftingAppender会委托不同的appender去完成真正的写操作
RollingFileAppender:滚动文件记录,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件
rollingPolicy :当发生滚动时,决定RollingFileAppender的行为,涉及到文件移动动重命名, TimeBasedRollingPolicy设置时间滚动策略
fileNamePattern :设置文件名称
<timeBasedFileNameingAndTriggeringPolicy> SizeBasedTriggeringPolicy和TimeBasedRollingPolicy联合使用方式 ,<maxFileSize>设置当前活动文件大小,当超过当前文件size,会告知RollingFileAppender触发当前活动文件滚动
<logger>:用来设置某一个包或者某一个类的之日打印,可以指定打印日志的appender,也可以通过设置属性addtivity为true,向上级传递,通过日志根日志root来打印日志,具体参数如下:
name:指定要打印的某一个类或者某一个包的日志
level:设置日志打印级别,TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
addtivity:设置是否向上传递,默认为true
root:也是logger元素,是根logger,只有一个level属性,应为已经被命名为"root".
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。
<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>