如何使用log4j获取Java中的当前类名

时间:2013-03-25 12:57:08

标签: java log4j

我正在使用log4j进行日志记录,为了在执行时获取各个方法的类名,我得到了一些使用SecurityManager获取类名的常用方法,但我不想使用SecurityManager,是他们的任何一个在运行时获取类名的其他方法。另外,我不想编写代码(MyClass.getClassName)来获取每个类中的类名。

class log extends SecurityManager {

public String getClassName() {
        return getClassContext()[3].getName();
    }

}

6 个答案:

答案 0 :(得分:5)

静态记录器的解决方案:

private static final Logger LOG = Logger.getLogger(new Object() { }.getClass().getEnclosingClass());

答案 1 :(得分:4)

全名(包裹):

this.getClass().getName();

对于类的名称(只是类名而不是更多):

this.getClass().getSimpleName();

答案 2 :(得分:3)

您也可以通过类对象本身接收Logger而不是接收类名:

public static Logger getLogger(Class clazz)

这就是它的用法:

private static final Logger logger = Logger.getLogger(MyClass.class);

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html#getLogger(java.lang.Class)

答案 3 :(得分:2)

您可以在appender配置中将%l添加到PatternLayout以获取日志语句的调用类。

答案 4 :(得分:1)

我猜你需要调用你的日志类的类的类名吗?

试试这个:

StackTraceElement stackTraceElement = new Throwable().getStackTrace()[3];

答案 5 :(得分:0)

你也可以这样做:

private static final String CLASS_NAME = MyClass.class.getName();

log.debug(new LogRecord(CLASS_NAME," Success = "+isSuccess));