基本上,当使用 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");
}
}
我的日志没有问题。他们很好。但是,日志中显示的类名称是相同的(Logger)。这是输出
INFO [main] (Logger.java:18) - Hello, World
我期待这个
INFO [main] (MyClass.java:18) - Hello, World
我哪里出错了?
最佳答案
使用%c
模式输出类别/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。
关于java - log4j:当我从另一个类调用记录器时,日志中显示的类名不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935367/