欠费停机不注销后果,移动有无紧急开机服务

log4j自定义级别并将新级别日志信息输出到指定带日期格式的log文件
我的图书馆
log4j自定义级别并将新级别日志信息输出到指定带日期格式的log文件
参考网上各家的资料,本人实现的功能如下:1、自定义级别:SERIOUS2、将log.mailLog日志信息输出到指定log文件3、按天更新日志,并将当天日期添加在文件名中&具体参考的地址是log4j可以实现INFO、DEBUG、ERROR等级别的日志输出,但是如果我们想自定义一个级别,并且将此级别的日志输出到指定的文件里,应该怎样做呢。手上没有log4j的源码,只有用反编译工具对其开膛破肚了有发现:public class Level extends Priority& implements Serializable{& public static final int TRACE_INT = 5000;& public static final Level OFF = new Level(, "OFF", 0);& public static final Level FATAL = new Level(50000, "FATAL", 0);& public static final Level ERROR = new Level(40000, "ERROR", 3);& public static final Level WARN = new Level(30000, "WARN", 4);& public static final Level INFO = new Level(20000, "INFO", 6);& public static final Level DEBUG = new Level(10000, "DEBUG", 7);& public static final Level TRACE = new Level(5000, "TRACE", 7);像FATAL、ERROR这些级别,实际上对应一数字5猜想:我们可以自己定义一个级别呀,比如我们定义一个级别:20050,暂叫做SERIOUS吧我打算将邮件发送情况记录在这个级别的日志文件里,写了个MailLog的类,源码如下:/**&*&&*& 用途:用于记录邮件发送的LOG类&*&*/public class MailLog {&private static Logger logger = Logger.getLogger(MailLog.class);&private static class SeriousLevel extends Level {&&private static final long serialVersionUID = 2079835L;&&private SeriousLevel(int level, String name, int sysLogLevel) {&&&super(level, name, sysLogLevel);&&}&}&private static final Level MAIL_LOG_LEVEL = new SeriousLevel(&&&20050, "SERIOUS", SyslogAppender.LOG_LOCAL0);&public static void mailLog(Object pm_objLogInfo) {&&logger.log(MAIL_LOG_LEVEL, pm_objLogInfo);&}}log4j.xml的配置如下:&appender name="LOG.EMAIL" class="org.apache.log4j.RollingFileAppender"&&&&param name="File" value="${catalina.home}/logs/EMAIL_LOG.log" /&&&&param name="MaxFileSize" value="5120KB" /&&&param name="MaxBackupIndex" value="10" /&&&&layout class="org.apache.log4j.PatternLayout"&&&& &param name="ConversionPattern" value="%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n" /&&&&/layout&&filter class="org.apache.log4j.varia.LevelRangeFilter"&&&&&&& &param name="LevelMin" value="20050" /&&&&&&& &param name="LevelMax" value="20050" /&&&&&&&/filter&&&&&&/appender&测试发现不对呀,EMAIL_LOG.log这个文件里除了自定义的级别日志外,还有debug、INFO等日志,是哪里的问题呢?注意到,配置文件里有个filter,再次开膛破肚中,看下这个类org.apache.log4j.varia.LevelRangeFilter很明了,过滤器里有个方法decide,就是在这里进行判断过滤的,所以,我们可以参考着,自己写个filter,源码如下:public class MailLogFilter extends Filter {&boolean acceptOnMatch =&int levelM&int levelM&public int getLevelMin() {&&return levelM&}&public void setLevelMin(int levelMin) {&&this.levelMin = levelM&}&public int getLevelMax() {&&return levelM&}&public void setLevelMax(int levelMax) {&&this.levelMax = levelM&}&@Override&public int decide(LoggingEvent lgEvent) {&&int inputLevel = lgEvent.getLevel().toInt();&&if (inputLevel &= levelMin && inputLevel &= levelMax) {&&&return 0;&&}&&return -1;&}}再将log4j.xml的配置里的filter更改为上面的类:&appender name="LOG.EMAIL" class="org.apache.log4j.DailyRollingFileAppender"&&param name="File" value="${catalina.home}/logs/EMAIL_LOG.log" /&&&&param name="Append" value="true"/&&param name="MaxFileSize" value="5120KB" /&&&param name="MaxBackupIndex" value="10" /&&&&layout class="org.apache.log4j.PatternLayout"&&&& &param name="ConversionPattern" value="%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n" /&&&&/layout&&filter class="com.test.mail.MailLogFilter"&&&&&&& &param name="LevelMin" value="20050" /&&&&&&& &param name="LevelMax" value="20050" /&&&&&&&/filter&&&&&&/appender&如果XML中有category,则在相应的下面添加LOG.EMAIL即可,例如在我的配置文件中还应该有如下两段:&category name="com"&&priority value="DEBUG"/&& &&appender-ref ref="console"/&& &&appender-ref ref="LOG.EMAIL"/&&/category&&category name="jsp_servlet"&&priority value="DEBUG"/&& &&appender-ref ref="console"/&& &&appender-ref ref="LOG.EMAIL"/&&/category&大功告成!测试:在项目文件中添加如下代码进行测试MailLog&loger = newMailLog&();loger.mailLog("mailLog测试!--SERIOUS");可以看到控制台有输出:mailLog测试!--SERIOUS然后要将日志输出到指定文件,需要在xml配置文件中进行控制:&appender name="LOG.EMAIL" class="org.apache.log4j.RollingFileAppender"& &&此处控制日志生成模式。RollingFileAppender:普通生成日志文件,将新日志生成到一个文件&param name="Append" value="true"/& 该参数控制是否覆盖掉文件中已有的日志信息,默认是false,即覆盖掉已有信息而不是追加到文件中&param name="MaxFileSize" value="5120KB" /& 此处控制当文件大小达到设定大小后,将会另起一个新日志文件&param name="MaxBackupIndex" value="10" /&&DailyRollingFileAppender:按天生成日志文件&param name="ConversionPattern" value="%d{yyy-MM-dd HH:mm:ss} &在日志文件名中添加当天日期,但是会先生成一个EMAIL_LOG.log文件(相当于临时文件),只有一天结束后才会将上一天的日志信息汇总到一个新文件并添加日期到文件名中。具体可以参见:[%-5p] %c {%F:%L} - %m%n" /& &控制日志信息的输出格式,不在赘述!&filter class="com.test.mail.MailLogFilter"&&&&&&& &param name="LevelMin" value="20050" /&&&&&&& &param name="LevelMax" value="20050" /&&&&&&&/filter& &&& & & &上述可以控制只是输出loger.mailLog信息到日志文件,这对于监测工程中特定操作还是十分有效的,当让你也可以设定多个级别,只需将其控制在LevelMin和LevelMax之间,即可同时输出到日志文件,十分便捷!& & & &
TA的最新馆藏log4j指定输出日志级别
Log4J的配置文件(Configuration
File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。
1. 配置文件
Log4J配置文件的基本格式如下:
&#配置根Logger
log4j.rootLogger&
=&& [ level
appenderName1 ,& appenderName2 ,&
#配置日志信息输出目的地Appender
log4j.appender.appenderName& =&
fully.qualified.name.of.appender.class
  log4j.appender.appenderName.option1&
  log4j.appender.appenderName.optionN&
#配置日志信息的格式(布局)
log4j.appender.appenderName.layout&
=& fully.qualified.name.of.layout.class
  log4j.appender.appenderName.layout.option1&
  log4j.appender.appenderName.layout.optionN&
=& valueN&
其中 [level] 是日志输出级别,共有5级:
&FATAL&&&&&
ERROR&&&&&
WARN&&&&&&
INFO&&&&&&
DEBUG&&&&&
Appender 为日志输出目的地,Log4j提供的appender有以下几种:
&org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
Layout:日志输出格式,Log4j提供的layout有以下几种:
&org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
输出代码中指定的消息
输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
输出自应用启动到输出该log信息耗费的毫秒数
  %c&& 输出所属的类目,通常就是所在类的全名
  %t&& 输出产生该日志事件的线程名
输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss ,
SSS},输出类似:日& 22 : 10 : 28 ,
输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:
2. 在代码中初始化Logger:
1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r
[%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG.
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。
3. 为不同的 Appender 设置日志输出级别:
当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。
这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改Appender的Threshold
就能实现,比如下面的例子:
[配置文件]
&### set log levels ###
log4j.rootLogger = debug ,& stdout
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =&
%d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG //输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd
HH:mm:ss}& [ %t:%r ] - [ %p ]&
### 保存异常信息到单独文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.llog ## 异常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ##
只输出ERROR级别以上的日志!!!log4j.appender.D.layout =
org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd
HH:mm:ss}& [ %t:%r ] - [ %p ]&
[代码中使用]
& public&&
TestLog4j&& {
static&& void&
main(String[] args)&& {
PropertyConfigurator.configure( " D:/Code/conf/log4j.properties "
Logger logger& =&
Logger.getLogger(TestLog4j. class );
logger.debug( " debug " );
logger.error( " error " );
运行一下,看看异常信息是不是保存在了一个单独的文件error.log中。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。&>&&>&&>&&>&log4j 配置日志文件,把日志信息输出到项目的某个文件夹下
log4j 配置日志文件,把日志信息输出到项目的某个文件夹下
上传大小:354KB
log4j 配置日志文件,把日志信息输出到项目的某个文件夹下,能把当前的日志输出到项目下制定的某文件夹,只要到web.xml配置log4j_save保存日志文件
综合评分:3.9(29位用户评分)
收藏((1))
所需积分:3
下载次数:82
审核通过送C币
创建者:caozhy
创建者:nigelyq
创建者:stephen1315
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
log4j 配置日志文件,把日志信息输出到项目的某个文件夹下
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:Log4j按级别输出日志到不同文件配置分析_服务器应用_Linux公社-Linux系统门户网站
你好,游客
Log4j按级别输出日志到不同文件配置分析
来源:Linux社区&
作者:projava
关于Log4j 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的Log4j.properties的设置是这样的关于Log4j 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的Log4j.properties的设置是这样的
log4j.rootLogger=info,stdout,info,debug,error&&
log4j.appender.stdout=org.apache.log4j.ConsoleAppender&&
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout&&
log4j.appender.stdout.layout.ConversionPattern=[%-5p]&[%d{HH:mm:ss}]&%c&-&%m%n&&
=org.apache.log4j.DailyRollingFileAppender&&
.layout=org.apache.log4j.PatternLayout&&
.layout.ConversionPattern=[%-5p]&[%d{HH:mm:ss}]&%c&-&%m%n&&
.datePattern='.'yyyy-MM-dd&&
.Threshold&=&INFO&&&
.append=true&&
.File=${webApp.root}/WEB-INF/logs/info.log&&
log4j.logger.debug=debug&&
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender&&
log4j.appender.debug.layout=org.apache.log4j.PatternLayout&&
log4j.appender.debug.layout.ConversionPattern=[%-5p]&[%d{HH:mm:ss}]&%c&-&%m%n&&
log4j.appender.debug.datePattern='.'yyyy-MM-dd&&
log4j.appender.debug.Threshold&=&DEBUG&&&
log4j.appender.debug.append=true&&
log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log&&
log4j.logger.error=error&&
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender&&
log4j.appender.error.layout=org.apache.log4j.PatternLayout&&
log4j.appender.error.layout.ConversionPattern=[%-5p]&[%d{HH:mm:ss}]&%c&-&%m%n&&
log4j.appender.error.datePattern='.'yyyy-MM-dd&&
log4j.appender.error.Threshold&=&ERROR&&&
log4j.appender.error.append=true&&
log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log&&&
而实际上这部分代码解决不了按照LOG4J的级别文件进行文件输出。
配置中关键的配置说明是这一句:
log4j.appender.debug.Threshold = INFO&
而它的作用是输出INFO级别以上的内容到${webApp.root}/WEB-INF/logs/info.log中,所以info.log文件中包含了ERROR级别的文件。
正确的解法是:
定义自己的Appender类,继承DailyRollingFileAppender,改写针对Threshold 的设置说明。
源代码记载:
public&boolean&isAsSevereAsThreshold(Priority&priority)&&
&&&&&&return&threshold&==&null&||&priority.isGreaterOrEqual(threshold);&&
重写 isAsSevereAsThreshold(Priority priority)方法
public&class&LogAppender&extends&DailyRollingFileAppender&{&&
&@Override&&
&public&boolean&isAsSevereAsThreshold(Priority&priority)&{&&
&&return&this.getThreshold().equals(priority);&&
这样,进行唯一判断,只有当Threshold与priority一致时,才进行输出,就实现了真正Log4j按照级别输出日志文件。
在log4j.properties中,将配置文件作如下修改:
=pany.LogAppender&&
.layout=org.apache.log4j.PatternLayout&&
.layout.ConversionPattern=[%-5p]&[%d{HH:mm:ss}]&%c&-&%m%n&&
.datePattern='.'yyyy-MM-dd&&
.Threshold&=&INFO&&&
.append=true&&
.File=${webApp.root}/WEB-INF/logs/info.log&&
到此,即完成了按照Log4j按照日志级别输出到不同文件中的功能。
Log4j 的详细介绍:Log4j 的下载地址:
相关资讯 & & &
& (11/17/:34)
& (10/16/:39)
& (01月14日)
& (11/13/:52)
& (05/31/:41)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款3404人阅读
本文主要介绍以下内容(所用版本log4j 1.x):
0、Hello World 示例
配合着动手学习,效率会高很多,这先来个最简单的示例,好有个感性的认识先。
1、项目中所用日志介绍
在我使用log4j的项目中,需要将debug、info、warn、error日志分别输出到指定文件,且给用户看的info日志只含info级别的日志,这里贴出log4j配置文件及测试程序,列示测试结果。
2、log4j理论介绍
这部分介绍log4j的类层次结构、log4j的配置等信息
3、如何自定义日志等级级并将自定义日志输出到指定文件中
实际使用中可能需要将用户登录、邮件发送等特定的日志输出到指定的文件中,这里举例说明。
4、log4j其他功能简介
log4j功能强大,这里就它有但尚未使用到的功能做一个介绍,好心里有个概念。
1、log4j的Hello World示例
0、到Apache下载jar包&&,这里的版本是log4j 1.2.17。
1、建java项目,并将导入下面两个jar包
2、编写代码
import org.apache.log4j.L
&span style=&font-family: Arial, Helvetica, sans-&&public class HelloWorld {&/span&
&span style=&white-space:pre&& &/span&private static Logger logger = Logger.getLogger(HelloWorld.class.getName()); 
    
    public static void main(String[] args) { 
    &span style=&white-space:pre&& &/span&logger.trace(&trace ...&);
&span style=&white-space:pre&& &/span&    logger.debug(&Debug ...&);
&span style=&white-space:pre&& &/span&   &#(&Info ...&);
&span style=&white-space:pre&& &/span&    logger.warn(&Warn ...&);
&span style=&white-space:pre&& &/span&    logger.error(&Error ...&);  
&span style=&white-space:pre&& &/span&    logger.fatal(&Fatal ...&); 
    }  
3、新建文件夹config用于存放配置文件,写配置文件log4j.xml。
有以下两点建议新建config文件夹存放配置文件:
a、一般项目中用到的配置文件比较多,有专门的文件夹存放会比较方便。
b、项目打成jar包时,一般不会把配置文件也打进jar包。
配置文件log4j内容如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE log4j:configuration SYSTEM &log4j.dtd&&
&log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' &
&appender name=&myConsole& class=&org.apache.log4j.ConsoleAppender&&
&layout class=&org.apache.log4j.PatternLayout&&
&param name=&ConversionPattern&
value=&[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n& /&
&/appender&
&priority value =&error&/&
&appender-ref ref=&myConsole&/&
&/log4j:configuration& 这时若报log4j.dtd的错误,则需要将log4j.dtd文件拷贝到xml配置文件目录中,log4j.dtd文件在log4j的jar包的org\apache\log4j\xml文件夹可以找到。
运行程序输出为:
[ 18:16:28,215 ERROR] [main] test.HelloWorld - Error ...
[ 18:16:28,215 FATAL] [main] test.HelloWorld - Fatal ...
1、使用项目中所用到的log4j配置文件说明
写本文时项目对log4j写日志的要求是:
a、提供用户及开发人员看的两大类日志。
b、提供给用户看的日志只有info级别的信息并输出到指定文件中
c、提供给开发人员用的有debug、warn、error,三个级别的日志分别输出到指定文件中。
1.1 先看配置文件
log4j.properties配置文件,配置简单,但不支持复杂过滤器filter,log4j.xml虽然配置文件看似复杂,但支持复杂过滤器和Log4j的新特性。推荐使用log4j.xml,本文也只讲解log4j.xml的配置。
&?xml version=&1.0& encoding=&UTF-8&?&  
&!DOCTYPE log4j:configuration SYSTEM &log4j.dtd&&  
    
&log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' &  
    
     &appender name=&myConsole& class=&org.apache.log4j.ConsoleAppender&&  
        &layout class=&org.apache.log4j.PatternLayout&&  
            &param name=&ConversionPattern&    
                value=&[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n& /&  
        &/layout&  
    &/appender&
    
 &span style=&white-space:pre&& &/span&&appender name=&user& class=&org.apache.log4j.DailyRollingFileAppender&&
&span style=&white-space:pre&&
&/span&&param name=&File& value=&files/logs/result.log& /&  
&span style=&white-space:pre&&
&/span&&param name=&Append& value=&true&/&
&span style=&white-space:pre&&
&/span&&layout class=&org.apache.log4j.PatternLayout&&  
&span style=&white-space:pre&& &/span&  &span style=&white-space:pre&& &/span&&param name=&ConversionPattern& value=&%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n& /&  
&span style=&white-space:pre&&
&/span&&/layout&
&span style=&white-space:pre&&
&/span&&filter class=&com.test.test.UserLogFilter&&     
&span style=&white-space:pre&& &/span& &span style=&white-space:pre&&
&/span&&param name=&LevelMin& value=&20060& /&     
&span style=&white-space:pre&& &/span&  &span style=&white-space:pre&&
&/span&&param name=&LevelMax& value=&20060& /& 
&span style=&white-space:pre&& &/span&  &span style=&white-space:pre&&
&/span&&param name=&acceptOnMatch& value=&true& /&     
&span style=&white-space:pre&&
&/span&&/filter&  
&span style=&white-space:pre&& &/span&&/appender& 
    
    &appender name=&info& class=&org.apache.log4j.DailyRollingFileAppender&&    
        &param name=&File& value=&files/logs/info.log& /&
        &!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --&  
        &param name=&Append& value=&true& /&  
&span style=&white-space:pre&&
&/span&&param name=&DatePattern& value=&'.'yyyy-MM-dd'.log'& /&
        &layout class=&org.apache.log4j.PatternLayout&&  
            &param name=&ConversionPattern& value=&[%d{yyyy-MM-dd HH:mm:ss\}] - %m%n& /&  
        &/layout&  
        &!--过滤器设置输出的级别--& 
        &filter class=&org.apache.log4j.varia.LevelRangeFilter&&    
&span style=&white-space:pre&&
&/span&   &param name=&levelMin& value=&INFO& /&    
&span style=&white-space:pre&&
&/span&   &param name=&levelMax& value=&INFO& /&    
&span style=&white-space:pre&&
&/span&   &param name=&AcceptOnMatch& value=&true& /&    
&span style=&white-space:pre&&
&/span&&/filter&
    &/appender& 
  
    &appender name=&debug& class=&org.apache.log4j.DailyRollingFileAppender&& 
      &span style=&white-space:pre&& &/span&&!-- 设置日志输出文件名 --&     
        &param name=&File& value=&files/logs/debug.log& /&
        &!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --&  
        &param name=&Append& value=&true& /&  
&span style=&white-space:pre&&
&/span&&param name=&DatePattern& value=&'.'yyyy-MM-dd'.log'& /&
&span style=&white-space:pre&&
&/span&&!-- 指定日志消息的输出最低层次 --&
&span style=&white-space:pre&&
&/span&&param name=&Threshold& value=&debug& /&
        &layout class=&org.apache.log4j.PatternLayout&&  
            &param name=&ConversionPattern& value=&[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n& /&  
        &/layout&  
    &/appender& 
    
    &appender name=&warn& class=&org.apache.log4j.DailyRollingFileAppender&& 
      &span style=&white-space:pre&& &/span&&!-- 设置日志输出文件名 --&     
        &param name=&File& value=&files/logs/warn.log& /&
        &!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --&  
        &param name=&Append& value=&true& /&  
&span style=&white-space:pre&&
&/span&&param name=&DatePattern& value=&'.'yyyy-MM-dd'.log'& /&
&span style=&white-space:pre&&
&/span&&!-- 指定日志消息的输出最低层次 --&
&span style=&white-space:pre&&
&/span&&param name=&Threshold& value=&warn& /&
        &layout class=&org.apache.log4j.PatternLayout&&  
            &param name=&ConversionPattern& value=&[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n& /&  
        &/layout&  
    &/appender& 
    
    &appender name=&error& class=&org.apache.log4j.DailyRollingFileAppender&& 
      &span style=&white-space:pre&& &/span&&!-- 设置日志输出文件名 --&     
        &param name=&File& value=&files/logs/error.log& /&
        &!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --&  
        &param name=&Append& value=&true& /&  
&span style=&white-space:pre&&
&/span&&param name=&DatePattern& value=&'.'yyyy-MM-dd'.log'& /&
&span style=&white-space:pre&&
&/span&&!-- 指定日志消息的输出最低层次 --&
&span style=&white-space:pre&&
&/span&&param name=&Threshold& value=&error& /&
        &layout class=&org.apache.log4j.PatternLayout&&  
            &param name=&ConversionPattern& value=&[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n& /&  
        &/layout&  
    &/appender& 
    
    &!-- 根logger的设置--&  
    &root&  
        &priority value =&debug&/&  
        &appender-ref ref=&myConsole&/&  
  &span style=&white-space:pre&&
&/span&&appender-ref ref=&debug&/&
        &appender-ref ref=&info&/&  
        &appender-ref ref=&warn&/&
        &appender-ref ref=&error&/&
    &/root&    
&/log4j:configuration& 
1.2、创建所需用到的文件夹及文件
1.3、编写测试方法
import org.apache.log4j.L
import org.apache.log4j.PropertyC
public class Log4jTest {
static final Logger logger = Logger.getLogger(Log4jTest.class.getName());
public static void main(String[] args) {
PropertyConfigurator.configure(&config/log4j.xml&);
logger.trace(&trace ...&);
logger.debug(&Debug ...&);
(&Info ...&);
logger.warn(&Warn ...&);
logger.error(&Error ...&);
1.4、日志输出结果
[ 18:32:51,923 DEBUG] [main] test.Log4jTest - Debug ...
[ 18:32:51,923 INFO ] [main] test.Log4jTest - Info ...
[ 18:32:51,924 WARN ] [main] test.Log4jTest - Warn ...
[ 18:32:51,924 ERROR] [main] test.Log4jTest - Error ...
b、debug日志
[ 18:32:51,923 DEBUG] [main] test.Log4jTest - Debug ...
[ 18:32:51,923 INFO ] [main] test.Log4jTest - Info ...
[ 18:32:51,924 WARN ] [main] test.Log4jTest - Warn ...
[ 18:32:51,924 ERROR] [main] test.Log4jTest - Error ...
c、准备给用户看的info日志
[ 18:32:51] - Info ...
d、warn日志
[ 18:37:02,224 WARN ] [main] test.Log4jTest - Warn ...
[ 18:37:02,225 ERROR] [main] test.Log4jTest - Error ...
&&e、error日志
[ 18:37:02,225 ERROR] [main] test.Log4jTest - Error ...
2、log4j理论介绍
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX
Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j主要有Logger、Appender、Layout三个主要的组件,这三个组件相互配合使得我们可以获得非常强大的日志记录的能力。
Log4j的类层次结构如下:
2.1、根类别
根类别在类别层次结构的顶部,即全局性的日志级别
配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, ...
level 是日志记录的类别,appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
类别level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、trace、ALL或自定义的优先级。
og4j常用的优先级FATAL&ERROR&WARN&INFO&DEBUG
如果为log4j.rootLogger=WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉。
举例:log4j.rootCategory=INFO,stdout,Runlog,Errorlog
根日志类别为INFO,DEBUG将被屏蔽,其他的将被输出。 stdout,Runlog,Errorlog分别为3个输出目的地。
2.2、Appender目的地
配置日志信息输出目的地Appender,其语法为
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.option = valueN
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
log4j支持的输出目的地:
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)&
org.apache.log4j.net.SMTPAppender 邮件
org.apache.log4j.jdbc.JDBCAppender 数据库
其他如:GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
& & & & &a.ConsoleAppender选项&
& & & & & & & & Threshold=WARN:指定日志消息的输出最低层次。&
& & & & & & & & ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。&
& & & & & & & & Target=System.err:默认情况下是:System.out,指定输出控制台&
& & & & & b.FileAppender&选项&
& & & & & & & &Threshold=WARN:指定日志消息的输出最低层次。&
& & & & & & & &ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。&
& & & & & & & &File=mylog.txt:指定消息输出到mylog.txt文件。&
& & & & & & & &Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。&
& & & & & c.DailyRollingFileAppender&选项&
& & & & & & & &Threshold=WARN:指定日志消息的输出最低层次。&
& & & & & & & &ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。&
& & & & & & & &File=mylog.txt:指定消息输出到mylog.txt文件。&
& & & & & & & &Append=false:默认值是true,即以追加的方式将消息增加到指定文件中,false指将消息覆盖指定的文件内容。&
& & & & & & & &DatePattern=''.''yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:&
&&&&&&&&&&&&&&&&&&&&1)''.''yyyy-MM:&每月&
&&&&&&&&&&&&&&&&&&&&2)''.''yyyy-ww:&每周&&
&&&&&&&&&&&&&&&&&&&&3)''.''yyyy-MM-dd:&每天&
&&&&&&&&&&&&&&&&&&&&4)''.''yyyy-MM-dd-a:&每天两次&
&&&&&&&&&&&&&&&&&&&&5)''.''yyyy-MM-dd-HH:&每小时&
&&&&&&&&&&&&&&&&&&&&6)''.''yyyy-MM-dd-HH-mm:&每分钟&
& & & & &d.RollingFileAppender&选项&
& & & & & & &Threshold=WARN:指定日志消息的输出最低层次。&
& & & & & & & ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。&
& & & & & & & File=mylog.txt:指定消息输出到mylog.txt文件。&
& & & & & & & Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。&
& & & & & & & MaxFileSize=100KB:&后缀可以是KB,&MB&或者是&GB.&在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。&
& & & & & & & MaxBackupIndex=2:指定可以产生的滚动文件的最大数。&
2.3、Layout 布局
log4j提供4种布局:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
常用输出格式%-Xp
%C or $class, &%F or %file, &%l or %location, &%L or %line, &%M or %method
-X号:X信息输出时左对齐;
%p:日志信息级别
%d{}:日志信息产生时间
%c:日志信息所在地(类名)
%m:产生的日志具体信息
%n:输出日志信息换行
2.4、Filters 过滤器
Filter 可以过滤 log 事件,并控制 log 输出
上面例子中用到了过滤器LevelRangeFilter,表示只输出INFO级别的日志
&pre name=&code& class=&html& style=&color: rgb(54, 46, 43); font-size: 14 line-height: 19.984375&&        &filter class=&org.apache.log4j.varia.LevelRangeFilter&&    
&span style=&white-space:pre&&
&/span&   &param name=&levelMin& value=&INFO& /&    
&span style=&white-space:pre&&
&/span&   &param name=&levelMax& value=&INFO& /&    
&span style=&white-space:pre&&
&/span&   &param name=&AcceptOnMatch& value=&true& /&    
&span style=&white-space:pre&& &/span&&/filter&
3、如何自定义log4j的日志级别并将自定义日志输出到指定文件中
我们的项目需要记不同类型,不同格式,不同级别的日志。用它来写日志很方便,但是我们的项目对日志的需求有时会超出它本身的处理能力如:serious,checkout等,如果直接用log4j的log.debug(),log.warn()....是不会写诸如下面这种形式的日志的:serious:XXXX:checkout:xxxxx:&看了看资料,log4j的日志级别是通过Level类来实现的,log.warn(Object)实际调用的logger.log(Level,Object)方法这样就好办了,写一个类继承Log4j的Level类,扩充其日志级别,然后封装log4j的logger类,在封装的类中调用logger.log(扩充的Level类,Object)就可以了,具体步骤如下:
1)、写一个类继承Level,override父类的构造函数,比如我们需要Serious级别。
&pre name=&code& class=&java&&private static class SeriousLevel extends Level {
private SeriousLevel(int level, String name, int sysLogLevel) {
super(level, name, sysLogLevel);
2)、把这些继承Level的子类归到一个接口中,便于统一调用
public interface MyLogLevel {
public static final Level SERIOUS_LEVEL = new SeriousLevel(Priority.ERROR_INT&span style=&font-family: verdana, sans-&& + 50&/span&&span style=&font-family: verdana, sans-&&, &SERIOUS&, SyslogAppender.LOG_LOCAL0);&/span&
public static final Level ALARM_LEVEL = new AlarmLevel(Priority.DEBUG_INT + 50, &ALARM&, SyslogAppender.LOG_LOCAL0);
}&span style=&font-family: verdana, sans- background-color: rgb(255, 255, 255);&& &/span&3)、封装Log4j的Logger,新增serious(Object)
alarm(Object)等方法,在方法中调用Logger.log(Level,Object)来传入我们自己的日志level
public class MyLogger {
private static Logger logger = Logger.getLogger(MyLogger.class);;
public static void serious(Object pm_objLogInfo){
logger.log(MyLogLevel.SERIOUS_LEVEL,pm_objLogInfo);
/*MyLogLevel接口中的所有自定义日志级别都继承自Level*/
public static void alarm(Object pm_objLogInfo){
logger.log(MyLogLevel.ALARM_LEVEL,pm_objLogInfo);
}4)、写自定义过滤器
public class MyLogFilter extends Filter{
boolean acceptOnMatch =
int levelM
int levelM
public int getLevelMin() {
return levelM
public void setLevelMin(int levelMin) {
this.levelMin = levelM
public int getLevelMax() {
return levelM
public void setLevelMax(int levelMax) {
this.levelMax = levelM
public int decide(LoggingEvent lgEvent) {
int inputLevel = lgEvent.getLevel().toInt();
if (inputLevel &= levelMin && inputLevel &= levelMax) {
return -1;
5)、写配置文件log4j.xml
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE log4j:configuration SYSTEM &log4j.dtd&&
&log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' &
&appender name=&myConsole& class=&org.apache.log4j.ConsoleAppender&&
&layout class=&org.apache.log4j.PatternLayout&&
&param name=&ConversionPattern&
value=&[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n& /&
&/appender&
&appender name=&serious& class=&org.apache.log4j.DailyRollingFileAppender&&
&param name=&File& value=&files/logs/serious.log& /&
&param name=&Append& value=&true&/&
&layout class=&org.apache.log4j.PatternLayout&&
&param name=&ConversionPattern& value=&%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n& /&
&filter class=&com.test.test.MyLogFilter&&
&param name=&LevelMin& value=&40050& /&
&param name=&LevelMax& value=&40050& /&
&param name=&acceptOnMatch& value=&true& /&
&/appender&
&appender name=&alarm& class=&org.apache.log4j.DailyRollingFileAppender&&
&param name=&File& value=&files/logs/alarm.log& /&
&param name=&Append& value=&true&/&
&layout class=&org.apache.log4j.PatternLayout&&
&param name=&ConversionPattern& value=&%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n& /&
&filter class=&com.test.test.MyLogFilter&&
&param name=&LevelMin& value=&10050& /&
&param name=&LevelMax& value=&10050& /&
&param name=&acceptOnMatch& value=&true& /&
&/appender&
&!-- 根logger的设置--&
&priority value =&debug&/&
&appender-ref ref=&myConsole&/&
&appender-ref ref=&serious&/&
&appender-ref ref=&alarm&/&
&/log4j:configuration&
6)、写测试类
import org.apache.log4j.L
import org.apache.log4j.PropertyC
public class Log4jTest {
static final Logger logger = Logger.getLogger(Log4jTest.class.getName());
static final MyLogger log = new MyLogger();
public static void main(String[] args) {
PropertyConfigurator.configure(&config/log4j.xml&);
logger.trace(&trace ...&);
logger.debug(&Debug ...&);
(&Info ...&);
logger.warn(&Warn ...&);
logger.error(&Error ...&);
log.serious(&Serious ...&);
log.alarm(&Alarm ...&);
7)、查看输出结果
log4j:WARN No such property [acceptOnMatch] in com.test.test.MyLogFilter.
[ 23:16:26,710 DEBUG] [main] test.Log4jTest - Debug ...
[ 23:16:26,710 INFO ] [main] test.Log4jTest - Info ...
[ 23:16:26,710 WARN ] [main] test.Log4jTest - Warn ...
[ 23:16:26,711 ERROR] [main] test.Log4jTest - Error ...
[ 23:16:26,712 SERIOUS] [main] test.MyLogger - Serious ...
[ 23:16:26,715 ALARM] [main] test.MyLogger - Alarm ...
b、serious.log
14-09-27 23:16:26 [SERIOUS] com.test.test.MyLogger {MyLogger.java:9} - Serious ...
c、alarm.log
14-09-27 23:16:26 [ALARM] com.test.test.MyLogger {MyLogger.java:14} - Alarm ...
4、log4j其他功能简介
4.1、log4j 2.0中的过滤器
2 定义了 10 种Filter。[]
1)、BurstFilter
&span style=&white-space:pre&& &/span&&BurstFilter level=&INFO& rate=&16& maxBurst=&100&/&
level :BurstFilter过滤的事件级别
rate :每秒允许的 log 事件的平均值
maxBurst:当BurstFilter过滤的事件超过 rate 值,排队的 log 事件上限。超过此上限的 log ,将被丢弃。默认情况下 maxBurst = 10*rate
按以上配置,假定每个 log 事件的执行时间较长,输出 117 个 log 事件( INFO级别)到RollingFileAppenders,BurstFilter会过滤得到INFO级别的 log 事件,之后会发生: 16 个 log 事件在执行, 100 个等待执行, 1 个被丢弃。
&&2)、CompositeFilter
&span style=&font-size:12&&&span style=&white-space:pre&& &/span&&Filters&
&span style=&white-space:pre&&
&/span&&Marker marker=&EVENT& onMatch=&ACCEPT& onMismatch=&NEUTRAL&/&
&span style=&white-space:pre&&
&/span&&DynamicThresholdFilter key=&loginId& defaultThreshold=&ERROR&
&span style=&white-space:pre&&
&/span&onMatch=&ACCEPT& onMismatch=&NEUTRAL&&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&User1& value=&DEBUG&/&
&span style=&white-space:pre&&
&/span&&/DynamicThresholdFilter&
&span style=&white-space:pre&& &/span&&/Filters&&/span& 不止一个过滤器时可以通过使用一个CompositeFilter。
3)、DynamicThresholdFilter
&span style=&white-space:pre&& &/span&&DynamicThresholdFilter key=&loginId& defaultThreshold=&ERROR& onMatch=&ACCEPT& onMismatch=&NEUTRAL&&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&User1& value=&DEBUG&/&
&span style=&white-space:pre&& &/span&&/DynamicThresholdFilter& DynamicThresholdFilter可以过滤具有特定的属性某一级别的日志。例如,&
如果用户的登录ID被捕获在ThreadContext的Map中则可以启用debug级的日志。&
4)、MapFilter
&span style=&white-space:pre&& &/span&&MapFilter onMatch=&ACCEPT& onMismatch=&NEUTRAL& operator=&or&&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&eventId& value=&Login&/&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&eventId& value=&Logout&/&
&span style=&white-space:pre&& &/span&&/MapFilter& MapFilter可以对Map中的信息进行过滤,进而记录特定事件,比如登入、退出。
5)、&MarkerFilter
&span style=&white-space:pre&& &/span&&RollingFile name=&RollingFile& fileName=&logs/app.log& filePattern=&logs/app-%d{MM-dd-yyyy}.log.gz&&
&span style=&white-space:pre&&
&/span&&MarkerFilter marker=&FLOW& onMatch=&ACCEPT& onMismatch=&DENY&/&
&span style=&white-space:pre&&
&/span&&PatternLayout&
&span style=&white-space:pre&&
&/span&&pattern&%d %p %c{1.} [%t] %m%n&/pattern&
&span style=&white-space:pre&&
&/span&&/PatternLayout&
&span style=&white-space:pre&&
&/span&&TimeBasedTriggeringPolicy /&
&span style=&white-space:pre&& &/span&&/RollingFile&
6)、RegexFilter
&span style=&white-space:pre&& &/span&&RollingFile name=&RollingFile& fileName=&logs/app.log& filePattern=&logs/app-%d{MM-dd-yyyy}.log.gz&&
&span style=&white-space:pre&&
&/span&&RegexFilter regex=&.* test .*& onMatch=&ACCEPT& onMismatch=&DENY&/&
&span style=&white-space:pre&&
&/span&&PatternLayout&
&span style=&white-space:pre&&
&/span&&pattern&%d %p %c{1.} [%t] %m%n&/pattern&
&span style=&white-space:pre&&
&/span&&/PatternLayout&
&span style=&white-space:pre&&
&/span&&TimeBasedTriggeringPolicy /&
&span style=&white-space:pre&& &/span&&/RollingFile&
7)、StructuredDataFilter
&span style=&white-space:pre&& &/span&&StructuredDataFilter onMatch=&ACCEPT& onMismatch=&NEUTRAL& operator=&or&&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&id& value=&Login&/&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&id& value=&Logout&/&
&span style=&white-space:pre&& &/span&&/StructuredDataFilter&
8)、ThreadContextMapFilter
&span style=&white-space:pre&& &/span&&ThreadContextMapFilter onMatch=&ACCEPT& onMismatch=&NEUTRAL& operator=&or&&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&User1& value=&DEBUG&/&
&span style=&white-space:pre&&
&/span&&KeyValuePair key=&User2& value=&WARN&/&
&span style=&white-space:pre&& &/span&&/ThreadContextMapFilter&
9)、ThresholdFilter
&span style=&white-space:pre&& &/span&&ThresholdFilter level=&TRACE& onMatch=&ACCEPT& onMismatch=&DENY&/&
10)、TimeFilter
&span style=&white-space:pre&& &/span&&TimeFilter start=&05:00:00& end=&05:30:00& onMatch=&ACCEPT& onMismatch=&DENY&/&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24916次
排名:千里之外
原创:11篇
(1)(3)(2)(1)(1)(1)(2)

我要回帖

更多关于 电信紧急开机服务位置 的文章

 

随机推荐