空间站

北极心空

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

扩充Log4j日志级别的方法

我们的项目需要记不同类型,不同格式,不同级别的日志。一般来说很容易想到Log4j,的确用它来写日志很方便,但是我们的项目对日志的需求有一点超出了它本身的处理能力:log4j只有debug,info,warn,error四种级别定义,而我们的日志不只这四类,还有serious,checkout等,如果直接用log4j的log.debug(),log.warn()....是不会写诸如
serious:XXXX:20060708
checkout:xxxxx:20060708这种形式的日志内容的
 
看了看资料,log4j的日志级别是通过Level类来实现的,log.warn(Object)实际调用的logger.log(Level,Object)方法
这样就好办了,写一个类继承Log4j的Level类,扩充其日志级别,然后封装log4j的logger类,在封装的类中调用logger.log(扩充的Level类,Object)就可以了,具体步骤如下:
 
1:写一个类继承Level,override父类的构造函数,比如我们需要Serious级别
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, "SERIOUS", SyslogAppender.LOG_LOCAL0);
   public static final Level ALARM_LEVEL = new AlarmLevel(Priority.DEBUG_INT + 50, "ALARM", SyslogAppender.LOG_LOCAL0);
  ......
   
}
Priority.ERROR_INT是log4j的级别定义,通过这个我们可以定义自己的级别的大小,比如上述ALARM_LEVEL就比SERIOUS_LEVEL日志级别要高50点

3:封装Log4j的Logger,新增serious(Object) alarm(Object)等方法,在方法中调用Logger.log(Level,Object)来传入我们自己的日志level
public class MyLogger{
 private Logger log ;
 .......
 
 
 public void serious(Object pm_objLogInfo)
 {
    log.loger(MyLogLevel.SERIOUS_LEVEL,pm_objLogInfo); 
   /*MyLogLevel接口中的所有自定义日志级别都继承自Level*/
 }
 
 public void serious(Object pm_objLogInfo)
 {
    log.loger(MyLogLevel.ALARM_LEVEL,pm_objLogInfo);
 }
 ......
}
 
 
4:ok!这就搞定了,Log4j新增了Serious,Alarm等级别,在你的log4j.conf(or log4j.property)配置你需要的日志级别,然后在你的写日志的代码中如此调用即可:
.....
Mylogger loger = new MyLogger();
loger.serious("严重错误!");
......
posted on 2008-06-23 09:23 芦苇 阅读(8208) 评论(1)  编辑  收藏 所属分类: JAVA其他

Feedback

# re: 扩充Log4j日志级别的方法 2012-02-24 17:17 2
2  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: