要记录给定类的错误,我正在访问类名,如下所示: 这是一种将类名作为String返回的“好方法”,因此它可以用于记录吗?
private static final String CLASS_NAME = MyClass.class.getName();
logger.error("Error occurred in "+CLASS_NAME);
答案 0 :(得分:13)
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,您可以找到处理程序的示例。