获取日志记录的类名

blu*_*sky 10 java logging

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

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

Mar*_*szS 15

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());
Run Code Online (Sandbox Code Playgroud)


buc*_*buc 5

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

private static Logger logger = Logger.getLogger(MyClass.class.getName())>
Run Code Online (Sandbox Code Playgroud)

那么该类的名称将出现在每个日志记录事件中,您无需在每个日志调用中都明确地放置它:

logger.error("Error occured while doing this and that");
Run Code Online (Sandbox Code Playgroud)

在你可以配置日志记录服务(在logging.properties中的情况下java.util.logging,或log4j.properties如果你使用Apache log4j的),包括在每一个日志消息类的名称。


Pra*_*mar 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>
Run Code Online (Sandbox Code Playgroud)

它将在 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
Run Code Online (Sandbox Code Playgroud)