基本上,当使用log4j时,我知道我们必须使用Logger.getLogger(MyClass.class)或Logger.getLogger(“ MyClass”)来启动Logger。
我的课程太多了,我不想在每个课程中都添加此语句。相反,我想做的是这样
Logger.info(this,"My message");
Logger是我编写的类(而不是log4j中的类),该类继而启动Logger类型的对象(org.apache.log4j.Logger)并继续执行消息。
这是我的Logger.java
package com.mypackage;
/**
* @author Sriram Sridharan
*Custom logging implementation using log4j
*/
public class Logger {
private static org.apache.log4j.Logger logger;
/**
* Writes an INFO log
* @param oClass
* @param message
*/
public static void INFO(Object oClass, String message){
org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(oClass.getClass());
logger.info(message);
}
}
现在,我有了自己的类,该类调用此Logger实现来记录事件。看起来像这样
public class MyClass {
public void myMethod(){
com.mypackage.Logger.INFO(this, "Hello, World");
}
}
我的日志没有问题。他们很好。但是,日志中显示的类名称相同(记录器)。这是输出
INFO [main] (Logger.java:18) - Hello, World
我希望这个
INFO [main] (MyClass.java:18) - Hello, World
我要去哪里错了?
使用%c
pattern输出类别//,getLogger("myCategory")
而不是%C
输出呼叫者类别。
这个想法是您有通用方法:
public static void debug(String category, String message) {
Logger logger = org.apache.log4j.Logger.getLogger(category);
logger.debug(message);
}
并且您的log4j配置包含您的模式:
%d{ISO8601} %c %m %n
这将打印
2014-02-21 14:38:120 YourCategory Your Message
因此,您无需为每个带有日志的类弄乱Logger的实例化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句