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

5
我正在使用log4j进行日志记录,为了在执行过程中获取相应方法的类名,我有一些常见的方法使用SecurityManager来获取类名,但我不想使用SecurityManager,有没有其他方法在运行时获取类名。另外,我不想在每个类中编写代码( MyClass.getClassName )来获取类名。
class log extends SecurityManager {

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

}
6个回答

5

静态日志记录器的解决方案:

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

4

完整名称(包括包名):

this.getClass().getName();

类名(只需类名,无需其他):

this.getClass().getSimpleName();

3

你能提供一个使用上面代码片段的可工作代码吗?我的意思是应该使用的确切代码。谢谢。 - samshers

2

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


你好,我的log4j属性文件如下,你能指导我在哪里做出更改吗?#控制台日志附加器 log4j.appender.ConsoleAppender.layout=org.apache.log4j.PatternLayout log4j.appender.ConsoleAppender=org.apache.log4j.ConsoleAppender log4j.appender.ConsoleAppender.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.appender.ConsoleAppender.Target=System.out - user1787641
1
在你喜欢的位置添加它到你的模式中。这应该可以工作:log4j.appender.ConsoleAppender.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %l - %m%n。 - Simulant

1
我猜您需要调用日志类的类名?
试试这个:
StackTraceElement stackTraceElement = new Throwable().getStackTrace()[3];

嗨,感谢回复,这个方法可行。还有一个问题是我无法正确获取行号,请检查下面的控制台信息。它总是显示95..18:54:20,410 INFO CreateRequisitionTest:95 - <==iONTest 18:54:46,010 INFO BaseTest:95 - ==>getDriver() ::Firefox - user1787641

0

你也可以这样做:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接