logback日志模板与详解

看了很多logback的资料,自己总结了一套模板供大家使用!

该文件应放在classpath:logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 默认为 <configuration scan="true" scanPeriod="60 seconds" debug="false"> -->
<!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟 -->
<!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false -->
<configuration>
	<!-- appender是指输出的形式或位置,name和class是两个必备属性 -->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoder负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。 -->
		<encoder>
			<pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level	[%thread]-%class:%line>>%msg%n
			</pattern>
			<charset>UTF-8</charset>
		</encoder>
	</appender>


	<!-- 输出到文件 -->
	<appender name="file" class="ch.qos.logback.core.FileAppender">
		<file>log/file.log</file>
		<!-- 默认append=true,即可追加而非覆盖 -->
		<append>true</append>
		<encoder>
			<!-- pattern部分见我的博客 -->
			<pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level	[%thread]-%class:%line>>%msg%n
			</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<!-- prudent=true表示日志写入线程安全,会降低效率,默认为false -->
		<prudent>false</prudent>
	</appender>


	<!-- 这个appender是每天生成一个日志文件,并且只保留30天 -->
	<!-- 滚动输出到文件,达到一定条件时,会将日志记录到其他文件 -->
	<appender name="timeFile"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 滚动策略。具体策略由class指定。 -->
		<!-- TimeBasedRollingPolicy是最常用的滚动策略,根据时间滚动,当达到一定时间时,自动重新开辟一个日志文件 -->
		<!-- FixedWindowRollingPolicy根据固定窗口算法重命名文件的滚动策略 -->
		<!-- triggeringPolicy根据当前活动文件大小来决定是否滚动的策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 由于表达式中最小单位为天,所以每天生成一个日志文件,且以此命名 -->
			<fileNamePattern>log/logFile%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 保留归档文件的最大数量。 -->
			<!-- 本例中由于使用了时间作为滚动策略,且fileNamePattern中最小单位为天,所以归档文件保存30天,超过30天将被删除 -->
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level	[%thread]-%class:%line>>%msg%n
			</pattern>
				<charset>UTF-8</charset>
		</encoder>
	</appender>


	<!-- 这个appender生成的日志文件满足5MB时会新建日志文件继续生成,只生成3个,当超过3个时将覆盖最早的日志 -->
	<appender name="fixedFile"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>log/fixedFile.log</file>
		<!-- 根据固定窗口模式生成日志文件,结合triggeringPolicy(当日志文件达到5MB时触发滚动,生成新的日志文件) -->
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<!-- 日志文件命名,%i代表从minIndex到maxIndex,即 fixedFile1.log.zip fixedFile2.log.zip 
				fixedFile3.log.zip -->
			<!-- 当生成了3个归档文件后,若继续生成,将覆盖最早的日志 -->
			<fileNamePattern>log/fixedFile%i.log.zip</fileNamePattern>
			<minIndex>1</minIndex>
			<!-- maxIndex若过大,会被设为12 -->
			<maxIndex>3</maxIndex>
		</rollingPolicy>


		<!-- 触发策略,达到一定条件时将通知appender,触发滚动 -->
		<triggeringPolicy
			class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<maxFileSize>5MB</maxFileSize>
		</triggeringPolicy>


		<encoder>
			<pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level	[%thread]-%class:%line>>%msg%n
			</pattern>
				<charset>UTF-8</charset>
		</encoder>
	</appender>


	<!-- appender与过滤器整合,一个appender可含一个或多个filter,有多个filter时,按照配置先后顺序执行 -->
	<appender name="filter" class="ch.qos.logback.core.FileAppender">
		<file>log/filter.log</file>
		<!-- 默认append=true,即可追加而非覆盖 -->
		<append>true</append>
		<!-- levelfilter:级别过滤器。根据日志级别进行过滤。如果日志级别等于配置级别level,则执行onMatch的;否则执行onMismatch -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<!-- onMatch、onMismatch里内容要大写 -->
			<!-- DENY:日志将立即被抛弃,不再经过其他过滤器,本appender也不进行处理 -->
			<!-- ACCEPT:日志被立即处理,不再经过其他过滤器-->
			<!-- NEUTRAL:下一个过滤器继续过滤,若为最后一个过滤器且通过,则appender进行处理-->
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		
		<!-- ThresholdFilter临界值过滤器,过滤掉低于指定临界值的日志-->
		<!-- 当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。 -->
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">   
     		 <level>INFO</level>   
    	</filter>   
    	
		<encoder>
			<!-- pattern部分见我的博客 -->
			<pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level	[%thread]-%class:%line>>%msg%n
			</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<!-- prudent=true表示日志写入线程安全,会降低效率,默认为false -->
		<prudent>false</prudent>
	</appender>


	<!-- logger是用于输出的对象,java文件中getLogger("app")即获得的该name=app的logger -->
	<!-- logger的name属性可指定为包名或类名。app是app.*的父亲,所有没有声明level的app.*都将继承app的level -->
	<!-- addtivity属性表明是否向上级logger传递打印信息,即上级logger又重新打了一遍。默认为true -->
	<logger name="app" level="debug" addtivity="false">
		<appender-ref ref="file" />
		<appender-ref ref="timeFile" />
		<appender-ref ref="fixedFile" />
	</logger>

	<!-- 根logger,level表示输出的level级别,从下到上为:TRACE, DEBUG, INFO, WARN, ERROR, ALL 
		和 OFF,低于这里设定级别的不显示 -->
	<root level="debug">
		<!-- 表示该appender被引入到该logger中,一个logger可含多个appender,即多个输出位置或形式 -->
		<!-- ref引用的是appender的name -->
		<appender-ref ref="stdout" />
	</root>
</configuration>

上面有详细的注释,有需要的可以根据实际情况进行修改。


同时附上<pattern>的转换符说明: (这部分引用自http://aub.iteye.com/blog/1103685
转换符 作用

c {length } 
lo {length } 
logger {length }
输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。 Conversion specifier Logger name Result
%loggermainPackage.sub.sample.BarmainPackage.sub.sample.Bar
%logger{0}mainPackage.sub.sample.BarBar
%logger{5}mainPackage.sub.sample.Barm.s.s.Bar
%logger{10}mainPackage.sub.sample.Barm.s.s.Bar
%logger{15}mainPackage.sub.sample.Barm.s.sample.Bar
%logger{16}mainPackage.sub.sample.Barm.sub.sample.Bar
%logger{26}mainPackage.sub.sample.BarmainPackage.sub.sample.Bar

 

C {length } 
class {length }
输出执行记录请求的调用者的全限定名。参数与上面的一样。尽量避免使用,除非执行速度不造成任何问题。
contextName 
cn
输出上下文名称。
d {pattern } 
date {pattern }
输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。 Conversion Pattern Result
%d2006-10-20 14:06:49,812
%date2006-10-20 14:06:49,812
%date{ISO8601}2006-10-20 14:06:49,812
%date{HH:mm:ss.SSS}14:06:49.812
%date{dd MMM yyyy ;HH:mm:ss.SSS}20 oct. 2006;14:06:49.812
F / file输出执行记录请求的java源文件名。尽量避免使用,除非执行速度不造成任何问题。
caller{depth}caller{depth, evaluator-1, ... evaluator-n}输出生成日志的调用者的位置信息,整数选项表示输出信息深度。

例如, %caller{2}   输出为:

0    [main] DEBUG - logging statement 
Caller+0   at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1   at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)

例如, %caller{3}   输出为:

16   [main] DEBUG - logging statement 
Caller+0   at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)
Caller+1   at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)
Caller+2   at mainPackage.ConfigTester.main(ConfigTester.java:38)
L / line输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。
m / msg / message

输出应用程序提供的信息。

M / method输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。
n输出平台先关的分行符“\n”或者“\r\n”。
p / le / level输出日志级别。
r / relative输出从程序启动到创建日志记录的时间,单位是毫秒
t / thread输出产生日志的线程名。
replace(p ){r, t}

p 为日志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。

例如, "%replace(%msg){'\s', ''}"


格式修饰符,与转换符共同使用:

可选的格式修饰符位于“%”和转换符之间。

第一个可选修饰符是左对齐 标志,符号是减号“-”;接着是可选的最小宽度 修饰符,用十进制数表示。如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。如果字符大于最小宽度,字符永远不会被截断。最大宽度 修饰符,符号是点号"."后面加十进制数。如果字符大于最大宽度,则从前面截断。点符号“.”后面加减号“-”在加数字,表示从尾部截断。

 

例如:%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值