您的位置:首页 > 其它

LogBack学习记录(八)综合例子

2013-10-24 11:01 239 查看
logback 的官方文档还有一些后续的部分,只要是将日志采用网络的方式进行存储,以及采用SSL来保证日志传输的加密。普通情况下很少用到,因此后续部分目前暂不学习。先对之前的学习做一个总结性的例子。一, 日志需求:1.可以通过系统属性文件对日志的生成目录(logfiles)进行设置。2.系统的所有日志划分为四种方式:(1)采用控制台(console)方式输出,系统的所有日志在控制台上都进行输出。(2)INFO及以上级别( WARN 、ERROR)的日志存储到logfiles目录下的info.log中,该文件每天自动备份一次,备份一个月的。备份文件放置logfiles目录下,info\yyyy-mm\yyyy-mm-dd.log中,日志按月自动创建文件夹进行备份。(3)WARN及以上级别(ERROR)的日志存储到logfiles目录下的warn.log中,该文件每月自动备份一次,备份一年的。备份文件放置logfiles目录下,info\yyyy\yyyy-mm.log中,日志按年自动创建文件夹进行备份。(4)日志信息中含有特定信息的(目前设置为special字符的)日志 存储到logfiles目录下的special.log中,该文件每月自动备份一次,备份一年的。备份文件放置logfiles目录下special\yyyy\yyyy-mm.log中,日志按年自动创建文件夹进行备份。具体配置文件如下:
<configuration debug="false"><!--logback 的一个综合使用。具体实现功能参见 com.wj.study.STLogBack.composite.CompositeTest的说明--><property file="src/main/resource/system.properties" /><!-- 在控制台上输出所有的日志,简单不多解释--><appender name="consloeAppender" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 输出WARN,ERROR级别的日志,采用 LevelFilter进行过滤,第一次先过滤warn级别的,将mismatch的设置为Neutral,在通过第二个过滤器对error级别的进行过滤,将mismatch的deny掉,完成只输出warn级别和error级别的目标  --><appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch></filter><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><file>${logfile}/warn.log</file><!-- 滚动策略,采用aux属性实现日志的分文件夹(此处按年存储)存储,这里可以将maxhistory的值设置的更大一些,这样可以存储更多的日志 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${logfile}/warn/%d{yyyy,aux}/%d{yyyy-MM}.log</fileNamePattern><maxHistory>12</maxHistory></rollingPolicy><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 输出INFO,WARN和ERROR级别的日志 ,原理与上一个相同  --><appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch></filter><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>NEUTRAL</onMismatch></filter><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><file>${logfile}/info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${logfile}/info/%d{yyyy-MM,aux}/%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>31</maxHistory></rollingPolicy><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 输出包含指定字符的日志 ,采用JaninoEventEvaluator进行字符串包含的判断,需要注意,需要引入Janino的jar包--><appender name="specialAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.core.filter.EvaluatorFilter"><evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator"><expression>return message.contains("special");</expression></evaluator><OnMismatch>DENY</OnMismatch><OnMatch>NEUTRAL</OnMatch></filter><file>${logfile}/special.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${logfile}/special/%d{yyyy,aux}/%d{yyyy-MM}.log</fileNamePattern><maxHistory>12</maxHistory></rollingPolicy><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 对所有的日志进行过滤,在具体的项目中可以扩展一下,分成不同的包进行过滤 --><root level="All"><appender-ref ref="consloeAppender" /><appender-ref ref="infoAppender" /><appender-ref ref="warnAppender" /><appender-ref ref="specialAppender" /></root></configuration>
调用实例代码:
package com.wj.study.STLogBack.composite;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class CompositeTest {/*** 对Logback的使用做一个综合的总结,完成下述功能。* 1.通过属性文件配置日志的生成目录,并自动生成info,warn,special文件夹* 2.将系统生成的所有日志在console进行展示* 3.将系统生成的info及以上级别的日志存储到info下的info.log中* 4.将系统生成的warn及以上级别的日志存储到warn下的warn.log中* 5.info级别的日志每天做一次备份,备份一个月的* 6.warn级别的日志每月做一次备份,备份一年的* 7.当日志中包含 speciallog 时,将日志放进special.log中,每月做一次备份,备份一年的。* @throws InterruptedException* TRACE < DEBUG < INFO <  WARN < ERROR.*/final static Logger logger = LoggerFactory.getLogger(CompositeTest.class);public static void main(String[] args) throws InterruptedException {String logString="测试日志输出,logIndex:{}";long logIndex =1;while(true){Thread.sleep(1000);logger.trace(logString, logIndex);logger.debug(logString, logIndex);logger.info(logString, logIndex);logger.warn(logString, logIndex);logger.error(logString, logIndex);logger.error("special{}", logIndex);logIndex++;}}}
属性配置文件的内容:
#如果想放置某个路径下,D:/stlogtestlogfile=logfile
所有的源代码可以从http://git.oschina.net/wangjian/STLogBack中下载运行。直接运行CompositeTest.java即可执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: