4

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

class log extends SecurityManager {

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

}
4

6 回答 6

5

静态记录器的解决方案:

private static final Logger LOG = Logger.getLogger(new Object() { }.getClass().getEnclosingClass());
于 2015-04-01T09:03:22.233 回答
4

对于全名(带包):

this.getClass().getName();

对于类的名称(只是类名,没有更多):

this.getClass().getSimpleName();
于 2013-03-25T13:01:27.703 回答
3

除了接收类名,您还可以接收Logger类对象本身的 a:

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)

于 2013-03-25T13:04:29.810 回答
2

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

于 2013-03-25T13:15:42.360 回答
1

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

尝试这个:

StackTraceElement stackTraceElement = new Throwable().getStackTrace()[3];
于 2013-03-25T13:08:45.853 回答
0

你也可以这样做:

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

log.debug(new LogRecord(CLASS_NAME," Success = "+isSuccess));
于 2013-03-25T13:04:59.217 回答