12

要记录给定类的错误,我正在访问类名,如下所示:这是将类名作为字符串返回的“好”方式,因此可用于记录吗?

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

6 回答 6

19

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());
于 2015-09-06T12:36:10.073 回答
7

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

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

那么类的名称将出现在每个日志事件中,您不需要在每个日志调用中显式地放置它:

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

您可以配置日志服务(如果是 ,则在logging.properties,如果使用 Apache log4j,则在 log4j.properties 中)以在每条日志消息中包含类名java.util.logging

于 2012-06-20T08:19:18.587 回答
4

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

对于经验 -

<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
于 2012-06-20T08:14:29.823 回答
2

我会这样做:

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

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

于 2012-06-20T08:17:26.903 回答
1

由于您没有说明您使用的是哪个日志库,我建议使用slf4j。我认为这是你能得到的最简单的。您只需像这样从 slf4j 请求 Logger 对象LoggerFactory

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

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

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

LOGGER.error(yourMessage, throwable);

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

于 2012-06-20T08:20:42.783 回答
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

在此链接中,您可以找到 Handler 的示例。

于 2020-04-28T21:06:54.390 回答