Sri*_*ran 2 java logging log4j
基本上,当使用log4j时,我知道我们必须使用Logger.getLogger(MyClass.class)或Logger.getLogger("MyClass")来启动Logger.
我有太多的课程,我不想在每个课程中添加这个陈述.相反,我喜欢做的就是这个
Logger.info(this,"My message");
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我有自己的类,它调用此Logger实现来记录事件.它看起来像这样
public class MyClass {
public void myMethod(){
com.mypackage.Logger.INFO(this, "Hello, World");
}
}
Run Code Online (Sandbox Code Playgroud)
我没有日志问题.他们很好.但是,日志中显示的类名称是相同的(Logger).这是输出
INFO [main] (Logger.java:18) - Hello, World
Run Code Online (Sandbox Code Playgroud)
我期待这个
INFO [main] (MyClass.java:18) - Hello, World
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
使用%c
模式输出类别/ getLogger("myCategory")
/而不是%C
打印调用者类.
这个想法是你有通用的方法:
public static void debug(String category, String message) {
Logger logger = org.apache.log4j.Logger.getLogger(category);
logger.debug(message);
}
Run Code Online (Sandbox Code Playgroud)
并且您的log4j配置包含您的模式:
%d{ISO8601} %c %m %n
Run Code Online (Sandbox Code Playgroud)
这将打印出来
2014-02-21 14:38:120 YourCategory Your Message
Run Code Online (Sandbox Code Playgroud)
因此,您不需要为每个具有日志的类实现Logger的实例化.