logback 简单配置总述

近来有一个系统日志分模块输出的需求。其实需求很简单,只是第一次使用slf4j+logback的日志架构。故参照了很多博客和一些实例进行配置和测试。

在测试过程中发现网上有很多配置是错误的,有很多是误导的,故将自己前前后后,反反复复测试了很多遍,最后完美通过的实例拿上来和大家分享一下。

一、主要标签释义(因为都可以在网上查找到,我只列举几个重要的和我用到的)

1.configuration。是整个配置文件的父标签。有三个属性,我用到的是debug,默认false,因为途中需要看调试信息,查看配置是否有错误,故将该属性设置为true。

2.appender。负责写日志的组件。必要属性name指定appender的名称(可以自定义);class指定appender的全限定名。

appender有几种现实方式,较为常用的有三种。

(1)ConsoleAppender是把日志打印到控制台。

由于我做的日志系统没有这部分打印需求,故没有使用。

(2)FileAppender把日志打印到文件。可以实现结尾追加,也可以不结尾追加。

(3)RollingFileAppender滚动记录日志。先将日志记录到指定文件,当符合某个条件的时候将日志记录到其他文件。由于我的需求使用的是该方式实现。故重点讲该方式。

3.logger。该标签是子域,设定某包下的日志输出路径。

关键属性是additivity,默认为true,为true时则表明向上级结构输出。

4.root。该标签为父域,为根的意思。是logger的父。

二、滚动生成日志策略实现

主要是实现日志的按天生成日志,旧日志会自动压缩备份。同时如果当天的日志文件大小超过1g,则自动创建新日志文件,旧日志文件进行压缩备份。

<appender name="FRONT-FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_HOME}/front/front.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1024MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
				%msg%n
			</pattern>
		</layout>
	</appender>

对于这里的注意点有两个:

(1)网上很多网页误导人的一句是这里:

<fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>

丢写了%i,这样会导致每次都会覆盖原来文件,并没有达到备份的效果。

(2)时间和大小共同制约的策略实现。

有一些人是这样配置的:

<pre name="code" class="html" style="font-size: 14px;"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
				%msg%n
			</pattern>
		</layout>

<triggeringPolicy
		class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>30MB</MaxFileSize>
		</triggeringPolicy>

使用triggeringPolicy标签来实现。事实证明,这个是logback的一个bug,是实现不了。所以要务必注意。

三、日志多模块输出

一般日志会要求业务进行单独输出,这样的话可以理解为一个业务模块对应一个日志,多个业务模块对应不同日志。

<appender name="FRONT-FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_HOME}/front/front.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/front/front.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1024MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
				%msg%n
			</pattern>
		</layout>
	</appender>

	<appender name="GOODS-FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_HOME}/goods/goods.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${LOG_HOME}/goods/goods.%d{yyyy-MM-dd}.%i.log.zip</FileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1024MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} -
				%msg%n
			</pattern>
		</layout>
	</appender>

<logger name="com.test.goods" level="INFO" additivity="false">
<span style="white-space:pre">		</span><appender-ref ref="GOODS-FILE"/>
<span style="white-space:pre">	</span></logger>

<root level="INFO">
<span style="white-space:pre">		</span><appender-ref ref="FRONT-FILE" />
<span style="white-space:pre">	</span></root>

这样配置就能实现多模块输出了。以goods模块为模版,进行多模版配置即可。与相关业务相关的日志会打印到各自的日志中,与业务无关的日志则会打印到FRONT-FILE日志中。

希望对大家有些用处,共勉!

logback 简单配置总述

时间: 2024-11-02 14:55:41

logback 简单配置总述的相关文章

logback 简单配置记录

<?xml version="1.0" encoding="UTF-8"?> <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当scan为true时,此属性生效.默认的时间间隔为1分钟. debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态.默认

Solr4.8.0源码分析(5)之查询流程分析总述

Solr4.8.0源码分析(5)之查询流程分析总述 前面已经写到,solr查询是通过http发送命令,solr servlet接受并进行处理.所以solr的查询流程从SolrDispatchsFilter的dofilter开始.dofilter包含了对http的各个请求的操作.Solr的查询方式有很多,比如q,fq等,本章只关注select和q.页面下发的查询请求如下:http://localhost:8080/solr/test/select?q=code%3A%E8%BE%BD*+AND+l

设计模式之总述篇

以下是对<Head First 设计模式>中提到的OO原则和设计模式的总结. OO原则和设计模式的联系:模式可以让我们建造出具有良好OO设计质量的系统.模式被认为是历经验证的OO设计经验. OO设计原则: 1.封装变化:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起: 2.多用组合,少用继承:良好的OO设计必须具备可复用.可扩充.可维护三个特性. 3.针对接口编程,而不是针对实现编程:"针对接口编程"真正的意思是"针对超类型(sup

关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)

在存储瓶颈的开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大规模的并发访问量,如果是一个动态的网站,特别是使用到了数据库的网站是很难做到通过增加web服务器数量的方式来有效的增加网站并发访问能力的.但是现实情况是像淘宝.京东这样的大型动态网站在承担高并发的情况下任然能保证快速的响应,这其中有什么样的技术手段可以达到动态网站支撑高并发的场景了,这也许是每个做web开发的朋友都很感兴趣的问题,今天我将写一个新的系列来探讨下这个问题,希望我的经验和研究能给大多数人

很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>

Web应用程序系统的多用户权限控制设计及实现-总述【1】

中大型的Web系统开发均需要权限的配置,基于多角色,多用户的操作权限管理是一个系统开发的基础.搭建好一套权限,用户,角色,页面一体的开发架构,可以用于后期业务的开发,同时也可用于不同业务的系统开发. 本文以实际项目开发中权限管理,用户管理模块为背景,通过数据库说明,开发代码说明,解析一个Web应用程序系统多权限,多用户配置管理的来龙去脉.特别说明: 1.实例所用数据库为sql sever 2012; 2.开发技术:ASP.NET MVC 4.0; 3.网站前台页面设计:EasyUI 1.4.3;

SL4J+logback基本配置

SL4J简介 SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统,也就是说它只是一个抽象层(abstract layer),它允许你在后台使用任意一个日志类库.如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统.在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要. Pom配置 <properties> &l

【转】关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)

在存储瓶颈的开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大规模的并发访问量,如果是一个动态的网站,特别是使用到了数据库的网站是很难做到通过增加web服务器数量的方式来有效的增加网站并发访问能力的.但是现实情况是像淘宝.京东这样的大型动态网站在承担高并发的情况下任然能保证快速的响应,这其中有什么样的技术手段可以达到动态网站支撑高并发的场景了,这也许是每个做web开发的朋友都很感兴趣的问题,今天我将写一个新的系列来探讨下这个问题,希望我的经验和研究能给大多数人

logback常用配置详解及logback简介

logback 简介(一) Ceki Gülcü在Java日志领域世界知名.他创造了Log4J ,这个最早的Java日志框架即便在JRE内置日志功能的竞争下仍然非常流行.随后他又着手实现SLF4J 这个“简单的日志前端接口(Façade)”来替代Jakarta Commons-Logging . LOGBack,一个“可靠.通用.快速而又灵活的Java日志框架”. 要在工程里面使用logback需要以下jar文件: slf4j-api-1.6.1.jar 官网网址:http://www.slf4