电脑版荒野行动pc版总是弹出弹出这个怎么办

> 博客详情
摘要: logback 日志输出级别设置方法
在公司的项目中用logback做日志输出操作,一个logger日志会同时显示在界面,也会记录到文件.通过仔细阅读官方文档,发现可以在不影响界面的输出情况下改变文件的输出级别.具体如下:
&appender name="DEVICE_MESSAGE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"&
&file&log/device/message.txt&/file&
&rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&
&!-- rollover daily --&
&fileNamePattern&log/device/message-%d{yyyy-MM-dd}.%i.txt&/fileNamePattern&
&maxHistory&10&/maxHistory&
&timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"&
&!-- or whenever the file size reaches 100MB --&
&maxFileSize&10MB&/maxFileSize&
&/timeBasedFileNamingAndTriggeringPolicy&
&/rollingPolicy&
&pattern&%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n &/pattern&
&/encoder&
&filter class="ch.qos.logback.classic.filter.LevelFilter"&
&level&ERROR&/level&
&onMatch&ACCEPT&/onMatch&
&onMismatch&DENY&/onMismatch&
&/appender&
&logger name="com.dongluhitec.card.hardware" level="INFO"&
&appender-ref ref="DEVICE_MESSAGE_DEBUG"/&
这样logger还是会接收info级别的日志,但输出到文件时,会过滤ERROR级别以下的日志.
人打赏支持
码字总数 5358
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥1179人阅读
Logback(2)
1 一定要使用slf4j的jar包,不要使用apache commons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~
import org.slf4j.L
import org.slf4j.LoggerF
2& 举例子说吧
scan&&& 属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod&& 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug&&& 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
contextName 标签&& 每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用&contextName&设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
&scan=&true&&scanPeriod=&60&seconds&&debug=&false&&&&&&&&&&&myAppName&&&&&&&&&&&&&&&&
&configuration scan=&true& scanPeriod=&60 seconds& debug=&false&&
&contextName&myAppName&/contextName&
&!-- 其他配置省略--&
&/configuration&
&&&&&&&name=&STDOUT&&class=&ch.qos.logback.core.ConsoleAppender&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%d{HH:mm:ss.SSS}&[%thread]&%-5level&%logger{36}&-&%msg%n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&level=&INFO&&&&&&&&&&&&ref=&STDOUT&&&&&&&&&&&&
&configuration&
&appender name=&STDOUT& class=&ch.qos.logback.core.ConsoleAppender&&
&!-- encoder 默认配置为PatternLayoutEncoder --&
&pattern&%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
&/pattern&
&/encoder&
&/appender&
&root level=&INFO&&
&appender-ref ref=&STDOUT& /&
&/configuration&
%logger{36} 表示logger名字最长36个字符,否则按照句点分割。
logger{length}输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边。
Conversion specifier
Logger name
mainPackage.sub.sample.Bar
mainPackage.sub.sample.Bar
%logger{0}
mainPackage.sub.sample.Bar
%logger{5}
mainPackage.sub.sample.Bar
%logger{10}
mainPackage.sub.sample.Bar
%logger{15}
mainPackage.sub.sample.Bar
m.s.sample.Bar
%logger{16}
mainPackage.sub.sample.Bar
m.sub.sample.Bar
%logger{26}
mainPackage.sub.sample.Bar
mainPackage.sub.sample.Bar
%d{HH:mm:ss.SSS}输出日志的打印日志,模式语法与java.text.SimpleDateFormat&兼容。看上去%d就已经够好了~~
Conversion Pattern
14:06:49,812
14:06:49,812
%date{ISO8601}
14:06:49,812
%date{HH:mm:ss.SSS}
14:06:49.812
%date{dd&MMM&yyyy&;HH:mm:ss.SSS}
20 oct. :49.812
%msg%n& 其中msg表示打印输出的消息, %n表示换行
m / msg / message
输出应用程序提供的信息。
可选的格式修饰符位于“%”和转换符之间。第一个可选修饰符是左对齐&标志,符号是减号“-”;
接着是可选的最小宽度&修饰符,用十进制数表示。如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。
如果字符大于最小宽度,字符永远不会被截断。
t / thread
输出产生日志的线程名。
p / le / level
输出日志级别。
&name=&MONITOR&&&&&&&class=&ch.qos.logback.core.rolling.RollingFileAppender&&&&&&&${jingwei.loggingRoot}/monitor.log&&&&&&&&&&&&&&&&&&&&&class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&&&&&&&&&&${jingwei.loggingRoot}/monitor.%i.log.gz&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&&&&&&&&&100MB&&&&&&&&&&&&&&&&&&&&true&&&&&&GBK&&&&&&&&&&&&&&&class=&ch.qos.logback.classic.PatternLayout&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&![CDATA[&&&&&&&&&&&&&&&&&%n%-4r&[%d{yyyy-MM-dd&HH:mm:ss}]&-&%X{method}&&%-5level&%logger{35}&-&%m%n&&&&&&&&&&&&&&&&&]]&&&&&&&&&&&&&&&&&&&&&&&&&&name=&com.taobao.jingwei.monitor&&&&&&&&value=&WARN&&&&&&&&&&&&&&&ref=&MONITOR&&&&&&
&appender name=&MONITOR&
class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&file&${jingwei.loggingRoot}/monitor.log&/file&
&!-- Policy定义如何滚动,按文件大小滚动生成日志 --&
&!-- 如果是按文件大小滚动生成日志,前面的file标签可省略,而使用fileNamePattern标签定义的名字 --&
&rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&fileNamePattern&${jingwei.loggingRoot}/monitor.%i.log.gz
&/fileNamePattern&
&!-- 归档日志的下标,替换fileNamePattern的%i,最多3个归档文件 --&
&minIndex&1&/minIndex&
&maxIndex&3&/maxIndex&
&/rollingPolicy&
&!-- triggeringPolicy定义什么时候滚动,下面是定义了文件大小超过100M的时候产生归档文件 --&
&triggeringPolicy
class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&
&maxFileSize&100MB&/maxFileSize&
&/triggeringPolicy&
&!-- append是否接着上次写文件结尾继续写,默认为true --&
&append&true&/append&
&encoding&GBK&/encoding&
&!-- layout,望文生义,就是定义格式的 --&
&layout class=&ch.qos.logback.classic.PatternLayout&&
%n%-4r [%d{yyyy-MM-dd HH:mm:ss}] - %X{method}
%-5level %logger{35} - %m%n
&/pattern&
&/appender&
&!-- name 属性表示匹配的logger类型前缀 --&
&logger name=&com.taobao.jingwei.monitor&&
&level value=&WARN& /&
&!-- 引用的appender,类似于spring的ref --&
&appender-ref ref=&MONITOR& /&
logger中有一个additivity属性,作用在于 children-logger是否使用 rootLogger配置的appender进行输出。
false:表示只用当前logger的appender-ref。
true:表示当前logger的appender-ref和rootLogger的appender-ref都有效。
&&&name=&com.taobao.jingwei.monitor&&&&&&&&value=&WARN&&&&&&&&&&&&&&&ref=&MONITOR&&&&&&
&!-- name 属性表示匹配的logger类型前缀 --&
&logger name=&com.taobao.jingwei.monitor&&
&level value=&WARN& /&
&!-- 引用的appender,类似于spring的ref --&
&appender-ref ref=&MONITOR& /&
&/logger&这样logger名字匹配com.taobao.jingwei.monitor的信息就只在MONITOR的appender输出,而不会在root logger中输出了
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:492762次
积分:7378
积分:7378
排名:第2528名
原创:134篇
转载:711篇
译文:30篇
评论:75条
(25)(48)(39)(53)(3)(96)(74)(39)(64)(71)(57)(154)(132)(14)(2)(3)(3)(16)(2)(2)(1)java(14)
大家都知道,slf4j是原来log4j的作者写的一个新的日志组件,意思是简单日志门面接口,可以跟其他日志组件配合使用,常用的配合是slf4j+logback,无论从功能上还是从性能上都较之log4j有了很大的提升,我想很多用户都已经尝试,并应用到项目中。
对于日志记录,说实话,以前用过log4j,但没有深入研究,用其最简单的功能。有幸在项目中用到了slf4j,来解决一个稍微复杂点的日志记录需求。于是便深入研究了下,下边将自己的研究成果与大家分享:
首先描述下需要解决的问题:
比如有如下包:
com.spike.test.a
com.spike.test.b
com.spike.test.c
com.spike.test.d
com.spike.test
我的配置日志需求:
A. com.spike.test.a的日志级别任意设置,单独一日志文件,独立的日志级别。
B. com.spike.test.b的日志级别任意设置,单独一日志文件,独立的日志级别。
C. com.spike.test.b的日志级别任意设置,单独一日志文件,独立的日志级别。
D. com.spike.test.b的日志级别任意设置,单独一日志文件,独立的日志级别。
E. com.spike.test的日志记录需求:
1)记录所有的info级别的日志,也就是不记录debug级别日志,单独一个日志文件,可以看到整个系统的所有info级别以上的日志记录。且该配置不受A,B,C,D,E其他配置的任何影响。
2)记录所有的error级别的日志,也就是不记录debug,info,warn级别日志,单独一个日志文件,可以看到整个系统的所有error级别日志记录。且该配置不受A,B,C,D,E其他配置的任何影响。
一 准备相关工具
1.& 从网上下载slf4j组件和logback相关的jar包,很多网站都有,logback可以直接到这个网站下载,可以直接到这里下载。总之,不管在哪里下载,你都需要找到以下几个jar包(可能根据需要,有个别不需要,这个没有详细研究,读者可以自己研究下):
1)& logback-acces-0.9.18.jar
2)& logback-classic-0.9.18.jar
3)& logback-core-0.9.18.jar
4)& slf4j-api-1.5.6.jar
2. 准备测试环境:
1)建立一个JAVA工程,比如是LogTest,工程整体目录结构如下(csdn的博客发图很不方便,也许我不会 用,暂时描述下吧),工程根目录除了src目录外,新建一个lib目录,将上边4个jar包放入并导入工程。再新建一个config目录,用于存放日志配 置文件logback.xml,这个文件如何配置,后边再介绍。
2)建立测试类以及相关包:
包结构以及包类的文件如下:
com.spike.test.a
TestA.java
com.spike.test.b
TestB.java
com.spike.test.c
TestC.java
com.spike.test.d
TestD.java
com.spike.test:
Start.java
其中TestA.java类的测试代码如下,其他4个类代码类似:
package com.spike.test.a;
import org.slf4j.L
import org.slf4j.LoggerF
public class TestA {
&&&&&&&& private static Logger log = LoggerFactory.getLogger(TestA.class);
&&&&&&&& public TestA()
&&&&&&&& {
&&&&&&&&&&&&&&&&&& log.debug(&TestA-debug&);
&&&&&&&&&&&&&&&&&& (&TestA-info&);
&&&&&&&&&&&&&&&&&& log.warn(&TestA-warn&);
&&&&&&&&&&&&&&&&&& log.error(&TestA-error&);
&&&&&&&& }
目的很简单,就是在构造函数中打印各种级别的log日志信息,TestB.java如下:
package com.spike.test.b;
import org.slf4j.L
import org.slf4j.LoggerF
public class TestB {
&&&&&&&& private static Logger log = LoggerFactory.getLogger(TestB.class);
&&&&&&&& public TestB()
&&&&&&&& {
&&&&&&&&&&&&&&&&&& log.debug(&TestB-debug&);
&&&&&&&&&&&&&&&&&& (&TestB-info&);
&&&&&&&&&&&&&&&&&& log.warn(&TestB-warn&);
&&&&&&&&&&&&&&&&&& log.error(&TestB-error&);
&&&&&&&& }
其他2个文件就不再此列出,大家应该想得到,
启动类Start.java内容如下:
package com.spike.
import com.spike.test.a.TestA;
import com.spike.test.b.TestB;
import com.spike.test.c.TestC;
import com.spike.test.d.TestD;
public class Start {
&&& public static void main(String[] args) {
&&&&&&& TestA a = new TestA();
&&&&&&& TestB b = new TestB();
&&&&&&& TestC c = new TestC();
&&&&&&& TestD d = new TestD();
2.& 建立logback.xml配置文件
前面说过了,在config目录下建立了logback.xml文件,但文件内容没有介绍,下边说说:
先介绍最简单的一个配置,如配置文件内容如下:
&?xml version=&1.0& encoding=&UTF-8& ?&
&configuration&
&&& &appender name=&a& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_a_debug.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_a_debug.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&logger name=&com.spike.test.a& level=&DEBUG&&&
&&&& &appender-ref ref=&a& /&
&&/logger&
&&/configuration&&
配置的意思是把com.spike.test.a包下的debug级别的日志全部记录到这个日志文件./log /mylog_a_debug.log中。一个appender代表一个具体的日志配置项目,可以通过name属性的名字在logger节点中通过 appender-ref引用。具体不细说。
下边运行下配置结果,看是否跟我们想的一致。
运行前,先要配置个启动参数,,否则日志直接到控制台了,在ECLIPSE启动参数里加入如下代码:
-Dlogback.configurationFile=./config/logback.xml
这个主要是告诉系统日志配置文件放在哪里。
启动程序运行!
然后到跟/log/目录下,我们会看到有一个新的文件mylog_a_debug.log,打开看到内容如下:
09:19:30,718 [main] DEBUG com.spike.test.a.TestA - TestA-debug
09:19:30,718 [main] INFO& com.spike.test.a.TestA - TestA-info
09:19:30,718 [main] WARN& com.spike.test.a.TestA - TestA-warn
09:19:30,718 [main] ERROR com.spike.test.a.TestA - TestA-error
正好实现我们的简单需求。
3.& 根据我们的真实需求,修改logback.xml文件:
对于A,B,C,D4个日志配置需求,很简单,直接参考刚才的配置,拷贝三份,修改相关参数就可以实现,这里不再赘述,可以在后边的配置文件中看到配置。
下边重点说说需求E的配置:
1) E配置的第一个需求:记录所有的info级别的日志,也就是不记录debug级别日志,单独一个日志文件,可以看到整个系统的所有info级别以上的日志记录。且该配置不受A,B,C,D,E其他配置的任何影响,我们按常规的配置思路。
首先增加root节点配置,如下:
&&&& &appender-ref ref=&all_info& level=&INFO& /&&&
然后增加all_info对应的appender节点的配置,如下:
&&& &appender name=&all_info& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_all_info.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_all_info.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&&&
2)& E配置的第2个需求:记录所有的error级别的日志,也就是不记录debug,info,warn级别日志,单独一个日志文件,可以看到整个系统的所有error级别日志记录。且该配置不受A,B,C,D,E其他配置的任何影响,我们参考第一个需求配置如下:
&&&& &appender-ref ref=&all_info& level=&INFO& /&
&&& &appender-ref ref=&all_error& level=&error& /&&&&
&&& &appender name=&all_error& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_all_error.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_all_error.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&/appender&
&OK,全部配置完了,整个logback.xml的配置文件如下:
&?xml version=&1.0& encoding=&UTF-8& ?&
&configuration&
&&& &appender name=&all_error& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_all_error.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_all_error.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&& &appender name=&all_info& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_all_info.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_all_info.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&&&
&&& &appender name=&a& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_a_debug.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_a_debug.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&&& &appender name=&b& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_b_info.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_b_info.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&& &appender name=&c& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_c_warn.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_c_warn.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&& &appender name=&d& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_d_error.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_c_error.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&logger name=&com.spike.test.a& level=&DEBUG&&&
&&&& &appender-ref ref=&a& /&
&&/logger&
&&logger name=&com.spike.test.b& level=&INFO&&&
&&&& &appender-ref ref=&b& /&
&&/logger&
&&logger name=&com.spike.test.c& level=&warn&&&
&&&& &appender-ref ref=&c& /&
&&/logger&
& &logger name=&com.spike.test.d& level=&error&&&
&&&& &appender-ref ref=&d& /&
&&/logger&
&&&& &appender-ref ref=&all_info& level=&INFO& /&
&&&& &appender-ref ref=&all_error& level=&error& /&&&&
&&/configuration&&
下边我们运行下,看是否正确。
我检查了下A,B,C,D需求很简单,都能满足需求,分别输出了该包下的所有DEBUG日志,info日志,warn日志,error日志。但是对于E需求问题来了,我看了下mylog_all_error.log文件内容如下:
09:33:47,156 [main] DEBUG com.spike.test.a.TestA - TestA-debug
09:33:47,171 [main] INFO& com.spike.test.a.TestA - TestA-info
09:33:47,171 [main] WARN& com.spike.test.a.TestA - TestA-warn
09:33:47,171 [main] ERROR com.spike.test.a.TestA - TestA-error
09:33:47,171 [main] INFO& com.spike.test.b.TestB - TestB-info
09:33:47,171 [main] WARN& com.spike.test.b.TestB - TestB-warn
09:33:47,171 [main] ERROR com.spike.test.b.TestB - TestB-error
09:33:47,171 [main] WARN& com.spike.test.c.TestC - TestC-warn
09:33:47,171 [main] ERROR com.spike.test.c.TestC - TestC-error
09:33:47,187 [main] ERROR com.spike.test.d.TestD - TestD-error
也 就是说,&appender-ref ref=&all_error& level=&error& /&& 这个配置根本没有效果,而且这里输出的实际是各个子包配置结果的总和。再看看mylog_all_info.log文件,内容也是跟 mylog_all_error.log文件内容一样,配置失败。
后边经过反复实验,还是达不到需求。于是在网上,搜索找答案,论坛发贴,在一个csdn朋友的指引下,我到 这个是logback的官方网站,里边详细的介绍,不看不知道,一看吓一跳,内容真丰富,功能真强大,经过认真研究,终于把问题解决,过程不在细说,主要 是通过logback组件的filter来解决,logback提供的filter组件很多,多种类型,而且可以自己定义,实现它的接口即可,功能真是强
大,而且可配置能力强。
下边说说解决方法:
对于E配置的第一个需求,在其对应的appender配置里增加这个子节点:
&&&&&&& &filter class=&ch.qos.logback.classic.filter.ThresholdFilter&&
&&&&&&&&& &level&INFO&/level&
&&&&&&& &/filter&
这个配置官方网站提供的注释原文如下:
&!-- deny all events with a level below INFO, that is TRACE and DEBUG --&
意思是拒绝那些所有的级别在info以下用于跟踪和调式的事件。呵呵,后边的that is TRACE and DEBUG是一个定语从句,对a level进行解释。
对于E配置的第二个需求,在其对应的appender配置里增加这个子节点:
&&&&&& &filter class=&ch.qos.logback.classic.filter.LevelFilter&&
&&&&&&&&& &level&ERROR&/level&
&&&&&&&&& &onMatch&ACCEPT&/onMatch&
&&&&&&&&& &onMismatch&DENY&/onMismatch&
&&&&&&& &/filter&
这个filter又不一样,意思是用于日志级别过滤。
比如这里配置了level级别为ERROR, onMatch表示匹配如何处理,可以根据需求设置接受或拒绝,onMismatch表示不匹配如何处理,具体自行可以设置。
Ok,配置完成。整个logback.xml配置文件内容如下:
&?xml version=&1.0& encoding=&UTF-8& ?&
&configuration&
&&& &appender name=&all_error& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &filter class=&ch.qos.logback.classic.filter.LevelFilter&&
&&&&&&&&& &level&ERROR&/level&
&&&&&&&&& &onMatch&ACCEPT&/onMatch&
&&&&&&&&& &onMismatch&DENY&/onMismatch&
&&&&&&& &/filter&
&&&&&& &File&./log/mylog_all_error.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_all_error.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&& &appender name=&all_info& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&&& &filter class=&ch.qos.logback.classic.filter.ThresholdFilter&&
&&&&&&&&& &level&INFO&/level&
&&&&&&& &/filter&
&&&&&& &File&./log/mylog_all_info.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_all_info.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&&&
&&& &appender name=&a& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_a_debug.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_a_debug.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&&& &appender name=&b& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_b_info.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_b_info.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&& &appender name=&c& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_c_warn.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_c_warn.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&& &appender name=&d& class=&ch.qos.logback.core.rolling.RollingFileAppender&&
&&&&&& &File&./log/mylog_d_error.log&/File&
&&&&&& &rollingPolicy class=&ch.qos.logback.core.rolling.FixedWindowRollingPolicy&&
&&&&&&&& &FileNamePattern&./log/mylog_c_error.%i.log&/FileNamePattern&&&&
&&&&&&&& &MinIndex&1&/MinIndex&&&&
&&&&&&&& &MaxIndex&5&/MaxIndex&&&&
&&&&&& &/rollingPolicy&&
&&&&&& &triggeringPolicy class=&ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&&&
&&&&&&&& &MaxFileSize&5MB&/MaxFileSize&&&&
&&&&&& &/triggeringPolicy&&
&&&&&& &layout class=&ch.qos.logback.classic.PatternLayout&&&
&&&&&&& &Pattern&%date [%thread] %-5level %logger{80} - %msg%n&/Pattern&&&&
&&&&&& &/layout&&
&&& &/appender&
&&logger name=&com.spike.test.a& level=&DEBUG&&&
&&&& &appender-ref ref=&a& /&
&&/logger&
&&logger name=&com.spike.test.b& level=&INFO&&&
&&&& &appender-ref ref=&b& /&
&&/logger&
&&logger name=&com.spike.test.c& level=&warn&&&
&&&& &appender-ref ref=&c& /&
&&/logger&
& &logger name=&com.spike.test.d& level=&error&&&
&&&& &appender-ref ref=&d& /&
&&/logger&
&&&& &appender-ref ref=&all_info& level=&INFO& /&
&&&& &appender-ref ref=&all_error& /&&&&
&&/configuration&&
运行最后结果查看:
mylog_all_error.log文件内容如下:
09:51:40,875 [main] ERROR com.spike.test.a.TestA - TestA-error
09:51:40,875 [main] ERROR com.spike.test.b.TestB - TestB-error
09:51:40,890 [main] ERROR com.spike.test.c.TestC - TestC-error
09:51:40,890 [main] ERROR com.spike.test.d.TestD - TestD-error
OK,全部ERROR都输出,满足需求。
mylog_all_info.log文件内容如下:
09:51:40,875 [main] INFO& com.spike.test.a.TestA - TestA-info
09:51:40,875 [main] WARN& com.spike.test.a.TestA - TestA-warn
09:51:40,875 [main] ERROR com.spike.test.a.TestA - TestA-error
09:51:40,875 [main] INFO& com.spike.test.b.TestB - TestB-info
09:51:40,875 [main] WARN& com.spike.test.b.TestB - TestB-warn
09:51:40,875 [main] ERROR com.spike.test.b.TestB - TestB-error
09:51:40,875 [main] WARN& com.spike.test.c.TestC - TestC-warn
09:51:40,890 [main] ERROR com.spike.test.c.TestC - TestC-error
09:51:40,890 [main] ERROR com.spike.test.d.TestD - TestD-error
Ok,不再有DEBUG级别的日志了。满足需求。
再检查下A,B,C,D需求,都已经实现。
终于完成了,欢迎读者朋友对文中的内容进行批评指正。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:169312次
积分:1861
积分:1861
排名:第18960名
原创:27篇
转载:19篇
评论:12条
(1)(2)(1)(2)(2)(1)(2)(1)(1)(4)(2)(1)(1)(3)(1)(2)(6)(4)(1)(1)(1)(1)(1)(4)

我要回帖

更多关于 荒野行动pc防弹出 的文章

 

随机推荐