logback学习与使用(二)

<appender>:是写日志的组件,规定日志的级别,格式,以什么方式写日志。有两个重要的属性,name和class,name是appender的名称,class是appender的名称,也是以什么方式进行输出。

1.ConsoleAppender

在控制台上输出日志,有以下几个节点

<encoder>:对日志进行格式化;<target>:字符串是以System.out还是System.err输出

2.FileAppender

把日志添加到文件,有如下子节点

<file>:文件路径,可以使用相对路径,也可以使用绝对路径,目录不存在会自动创建,没有默认值

<appender>:如果是true,添加到文件末尾,如果是false,清空先存文件,默认是true

<encoder>与其他appender一样

<prudent>:如果是true,日志被安全的写入文件,即使其他的FileAppender也在写入文件,效率较低,默认是false

<appender name="B" class="ch.qos.logback.core.FileAppender">
		<file>./log/B.log</file>
		<append>true</append>
		<encoder>
      		<pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n</pattern>
    	</encoder>
	</appender>
3.RollingFileAppender

滚动记录文件,将日志记录到指定文件,当符合其他条件时,将日志记录到其他文件,有如下几个节点

<file> <append> <encoder>与上面一致

<rollingPolicy>当发生滚动时,决定文件的行为,包括文件的移动和重命名

<triggeringPolicy>:告警RollingFileAppender何时激活滚动

<prudent>:为true时,不支持FixedWindowRollingPolicy,只支持TimeBasedRollingPolicy,但是有两个限制,1不允许压缩2.不能设置file属性,必须为空


TimeBasedRollingPolicy:最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动。有以下子节点:

<fileNamePattern>:

必要节点,包含文件名和%d转换符,%d可以包含一个时间格式,如%d{yyyy-MM},默认格式是yyyy-MM-dd.RollingFileAppender的file节点可有可无,通过设置file,可以为活动文件和归档文件指定不同的位置,当前日志总是记录到file文件,活动文件的名字不会改变,如果没有设置file,活动文件的名字会每隔一段时间改变一次。

<maxHistory>:

可选节点,控制保留的归档文件的最大个数,超出个数就删除旧文件,删除旧文件时,那些为了归档而创建的目录也会被删除。

FixedWindowRollingPolicy:根据固定窗口算法重命名文件的滚动策略。

<minIndex>窗口索引最小值

<maxIndex>窗口索引最大值,用户指定窗口过大时,会自动将窗口设置为12

<fileNamePattern>: 必须包含%i,还可设置文件压缩选项,例如log%i.log.gz,log%i.log.zip


triggerPolicy:

SizeBasedTriggeringPolicy:查看当前活动文件的大小,如果超出这个数字,就会触发滚动,只有一个节点

<maxFileSize>:这是活动文件的大小,默认是10M


例如每天生成一个日志文件,保存30天

<appender name="C" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">   
      		<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>   
      		<maxHistory>30</maxHistory>    
    	</rollingPolicy>
    	
    	<encoder>   
      		<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
    	</encoder> 
	</appender>
每5M生成一个日志,最多3个,进行zip压缩

<appender name="D" class="ch.qos.logback.core.rolling.RollingFileAppender">   
    	<file>test.log</file>   
   
    	<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">   
    		<fileNamePattern>tests.%i.log.zip</fileNamePattern>   
      		<minIndex>1</minIndex>   
      		<maxIndex>3</maxIndex>   
    	</rollingPolicy>   
   
    	<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">   
      		<maxFileSize>5MB</maxFileSize>   
    	</triggeringPolicy>   
    
    	<encoder>   
      		<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
    	</encoder>   
 </appender>
4.socketAppender包含以下节点

<includeCallerData>:r如果是true,调用者的数据将提供给远程主机,默认是false

<port>:远程提供服务的端口

<reconnectionDelay>:这个属性提供一个周期性的字符串,例如“10 seconds”,描述每一次连接失败后重新连接需要等待的时间,默认是30s,设置为0关闭重连机制,注意,全部连接成功后,不再有连接的线程。(意思是不是断连之后不会再重连,只有第一次出现连接失败时会重新连接?)

<queueSize>:这个属性值是一个非负整数,表示交付到远程主机的日志事件的数量。如果是0,是同步交付的,如果不是0,队列当中有可用空间,使用非0,能提高性能,解决由于网络延迟引起的效率问题。

<eventDelayLimit>:这个属性提供一个周期性的字符串,例如“10 seconds”,它表示在扔掉由于队列满了,事件无法放入队列的时间之前,等待的时间。如果远程主机是持续缓慢接受事件,这种情况会发生。默认是100毫秒

<remoteHost>:远程主机服务器的地址

<ssl>:SSLSocketAppender才会支持,里面包含SSLSocketAppender的配置

客户端配置

<appender name="Client" class="ch.qos.logback.classic.net.SocketAppender">
<span style="white-space:pre">	</span><remoteHost>127.0.0.1</remoteHost>
	<port>8080</port>
	<reconnectionDelay>30 seconds</reconnectionDelay>
	<includeCallerData>true</includeCallerData>
	<queueSize>100</queueSize>
	<eventDelayLimit>30 seconds</eventDelayLimit>
</appender>

服务器端包含以下节点<address>,<port>,<includeCallerData>,<ssl>

服务器端配置

<appender name="Server" class="ch.qos.logback.classic.net.server.ServerSocketAppender">
<span style="white-space:pre">	</span><address>127.0.0.1</address>
	<port>8080</port>
	<includeCallerData>true</includeCallerData>
</appender>
下载logback包,解压缩之后
可以直接执行ch.qos.logback.classic.net.SimpleSocketServer这个类,需要用到core,classic,slf4j作为classpath,两个参数,第一个是port,第二个是配置文件的问题,会启动一个简单的服务器端,具体到应用当中需要重新写服务器


执行java\chapters\appenders\socket\SocketClient1.java即可连接服务器,也需要两个参数,第一个是IP,第二个是port

总的来说,客户端不需配置太复杂的logback.xml,输出形式在服务器端配置即可

<pattern>里面的转换符说明:

 

转换符作用
c {length } 
lo {length } 
logger {length } 
输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。
Conversion specifierLogger nameResult
%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 PatternResult
%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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值