LogBack使用总结

今天学习一个项目的时候,里面有个LogBack日志工具。用来做日志分析的。所以在网上查阅了一番资料,并学习了一波。在此总结一下。

1.简介

LogBack是一个日志框架,它是Log4j作者的又一个日志组件。

网上有一段介绍当前日志框架组件的话,我复制过来。助于理解。

slf4j由log4j作者Ceki开发,逐步取代apahce commons logging。

logback由log4j作者Ceki开发,逐步取代log4j。

slf4j等于commons-logging,是各种日志实现的通用入口

logback相比较log4j的优势

slf4j支持参数化的logger.error("帐号ID:{}不存在", userId);

告别了if(logger.isDebugEnable()) 时代。

另外logback的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j。


2.核心对象

logback为取代log4j而生,当前可分为三个模块:logback-core,logback-classic,logback-access

logback的核心对象有logger,Appender,layout.logback主要建于logger,appender,layout这三个类之上。

1.Logger,即我们常用的日志记录器。把它关联到应用的对应的context上之后,主要用于存放日志对象,也可以定义日志类型,级别。Logger对象一般多定义为静态常量

public class MyApp {
      final static Logger logger = LoggerFactory.getLogger("MyApp.class");
      public static void main(String[] args) {
          
         logger.trace("trace");
         logger.debug("debug str");
         logger.info("info str");
         logger.warn("warn");
         logger.error("error");}

2.Appender:用于指定日志输出的目的地,目的地可以是控制台,文件,远程套接字服务器,MySQL等数据库。

3.Layout:负责把事件转化为字符串,格式化的日志信息的输出。具体的layout通配符,可以查看帮助文档。

3.level

logger可以被分配几倍,级别包括:TRACE,DEBUG,INFO,WARN,ERROR,定义域ch.qos.logback.classic.Level类,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少,如果设置级别为INFO,则优先级高于INFO(WARN,ERROR)级别的日志可以被输出,但是小于该级别的(TRACE,DEBUG)将不会被输出,为确保所有logger都能够最终继承一个级别,根logger总是有级别,默认情况下级别为DEBUG。

4.三值逻辑

LogBack的过滤器基于三值逻辑,允许把他们组装或成链,从而组成任意的符合过滤策略。过滤器很大程度上收到linux的iptables启发,所谓三值逻辑就是说过滤器返回值只能是ACCEPT,DENY和NEUTRAL的其中一个

DENY表示记录时间立即被抛弃,不再经过剩余过滤器,NEUTRAL表示有序列表里的下一个过滤器会接着处理记录事件,ACCEPT表示记录时间被立即处理,不再经过剩余过滤器。

5.Filter过滤器

logback-classic 提供两种类型的过滤器:常规过滤器和TuroboFilter过滤器。Logback整体流程:Logger产生日志信息llayout修饰这条msg的显示格式;Filrer过滤显示的内容,Appender具体的显示,即保存这日志信息的地方。

6.实际中解释

我把最近完善的一个logback.xml贴上,毕竟实际项目中的文件最能说明问题。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置信息,每60s扫描一次,这里的debug若设置为true,则会实时打印出logback的信息,所以这里我们设置为false-->
<configuration scan="true" scanPeriod="60 second" debug="false">
	<!-- 定义参数常量 -->
	<!-- TRACE<DUBUG<INFO<WARNING<ERROR 从小到大 -->
	<!-- log的level默认值是debug -->
	<property name="log.level" value="debug"></property>
	<!-- 文件保留时间。30天 -->
	<property name="log.maxhistory" value="30"></property>
	<!-- 日志文件的存储跟路径,catalina.base是tomcat下实例的路径 -->
	<property name="log.filePath" value="${catalina.base}/logs/webapps"></property>
	<!-- 日志内容的形式(格式) +执行的线程+日志级别+日志相关的信息-->
	<property name="log.pattern"
		value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"></property>
	<!-- 定义4个appender,后三个将日志分为3个级别。 -->
	<!-- 输出到控制台的配置-->
	<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
		<!-- 类似于layout,并有将转化后的文件写入文件中的功能 -->
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>
	<!-- DEBUG -->
	<!-- class代表相关的类 -->
	<appender name="debugAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/debug.log</file>
		<!-- rolling策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称,压缩文件的形式 -->
			<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史 -->
			<maxHistory>
				${log.maxhistory}
			</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 过滤器,过滤掉非dubug level的信息。 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch><!-- 过滤掉非debug信息 -->
		</filter>
	</appender>
	<!-- INFO 与debug配置形式相似-->
	<appender name="infoAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>
				${log.maxhistory}
			</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<!-- ERROR 与debug配置形式相似 -->
	<appender name="errorAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>
				${log.maxhistory}
			</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<!-- logger配置,定义日志对象 ,日志需要记录的package。需要与appender绑定 -->
	<!-- additivity =true,logger会将root下面的appender放入logger中,此项目中,会在控制台中输入相关的信息。 -->
	<logger name="com.imooc.o2o" level="${log.level}" additivity="true">
		<appender-ref ref="debugAppender"></appender-ref>
		<appender-ref ref="infoAppender"></appender-ref>
		<appender-ref ref="errorAppender"></appender-ref>
	</logger>
	<!--  特殊的logger,相当于logger的父属性-->
	<root level="info">
		<appender-ref ref="consoleAppender"></appender-ref>
	</root>
</configuration>

相关的细节在注释中写的很清楚了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值