获取日志记录的类名

时间:2012-06-20 08:11:21

标签: java logging

要记录给定类的错误,我正在访问类名,如下所示: 这是一种将类名作为String返回的“好方法”,因此它可以用于记录吗?

private static final String CLASS_NAME = MyClass.class.getName();
logger.error("Error occurred in "+CLASS_NAME);

6 个答案:

答案 0 :(得分:13)

Java 8解决方案

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
...

private final static Logger LOG = 
                     LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

答案 1 :(得分:5)

如果您以这种方式初始化记录器:

private static Logger logger = Logger.getLogger(MyClass.class.getName())>

然后每个日志记录事件中都会出现该类的名称,您无需在每次日志调用中明确地将其放入:

logger.error("Error occured while doing this and that");

您可以配置日志记录服务(在java.util.logging的情况下位于 logging.properties ,如果使用Apache log4j,则位于 log4j.properties 中)每条日志消息中的类名。

答案 2 :(得分:4)

您可以在log4j.xml中设置日志记录参数。

对于exp -

<appender name="swcd-web" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="DEBUG"/>
    <param name="Append" value="true"/>
    <param name="File" value="${catalina.home}/logs/swcd-web.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
    </layout>
</appender>

它会在swcd-web.log文件中记录这样的异常 -

2012-05-23 16:34:51,632 [main] ERROR com.idc.sage.sso.dynamo.SsoDbStorage - cannot get configuration for max SSO age

答案 3 :(得分:2)

由于您没有说明您使用的是哪个日志库,我建议使用 slf4j 。我认为这是最容易获得的。您只需要从slf4j的LoggerFactory中请求一个Logger对象:

private static final Logger LOGGER = LoggerFactory.getLogger(YouerClass.class);

现在您可以使用LOGGER对象进行记录。

记录错误的示例如下所示:

LOGGER.error(yourMessage, throwable);

您可以发送简单的字符串消息或整个异常。

答案 4 :(得分:1)

我这样做:

logger.error("Error occured in " + this.getClass().getName());

如果发生变化,维护起来会更容易,但还有其他方法可以做到这一点。

答案 5 :(得分:1)

我看到很多人在使用外部库,例如log4j,slf4j,jboss.logger等...

我更喜欢旧的方式,使用简单的

java.util.logging.Logger

这是标准操作,您不需要导入库。

您可以将其初始化为:

private static final Logger LOG = Logger.getLogger(A.class.getName());

,然后每次记录器在流上写消息时,您就会知道您使用了 A 类:

String errorcode = "ABC123";
LOG.log(Level.SEVERE,"This is a very important error with code {0}", new Object[]{errorcode});

无论您是标准流是什么(例如控制台或日志文件),它都将编写如下内容:

[date]     [hour]        [level] [class]       [description]
2020-01-01 00:00:10.123  SEVERE  my.package.A  This is a very important error with code AAA123

如果要自定义日志,可以使用java.util.logging.Handler

在此link,您可以找到处理程序的示例。