要记录给定类的错误,我正在访问类名,如下所示:这是将类名作为字符串返回的“好”方式,因此可用于记录吗?
private static final String CLASS_NAME = MyClass.class.getName();
logger.error("Error occurred in "+CLASS_NAME);
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
...
private final static Logger LOG =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
如果您以这种方式初始化记录器:
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
您可以在 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
我会这样做:
logger.error("Error occured in " + this.getClass().getName());
如果发生变化,维护起来会更容易,但还有其他方法可以做到这一点。
由于您没有说明您使用的是哪个日志库,我建议使用slf4j。我认为这是你能得到的最简单的。您只需像这样从 slf4j 请求 Logger 对象LoggerFactory
:
private static final Logger LOGGER = LoggerFactory.getLogger(YouerClass.class);
现在您可以使用 LOGGER 对象进行日志记录。
例如,记录错误如下所示:
LOGGER.error(yourMessage, throwable);
您可以发送简单的字符串消息或整个异常。
我看到很多人使用外部库,比如 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 的示例。