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


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:/stlogtest  
logfile=logfile

所有的源代码可以从

http://git.oschina.net/wangjian/STLogBack中下载运行。直接运行CompositeTest.java即可执行。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值