如下是slf4j-api包下的Logger接口类里其中几个方法的声明:
packageorg.slf4j;public interfaceLogger {/*** Log a message at the INFO level.
*
*@parammsg the message string to be logged*/
public voidinfo(String msg);/*** Log a message at the INFO level according to the specified format and argument.
*
*@paramformat the format string
*@paramarg the argument*/
public voidinfo(String format, Object arg);/*** Log a message at the INFO level according to the specified format and arguments.
*
*@paramformat the format string
*@paramarguments a list of 3 or more arguments*/
public voidinfo(String format, Object... arguments);/*** Log a message at the ERROR level.
*
*@parammsg the message string to be logged*/
public voiderror(String msg);public voiderror(String format, Object arg);public voiderror(String format, Object... arguments);/*** Log an exception (throwable) at the ERROR level with an accompanying message.
*
*@parammsg the message accompanying the exception
*@paramt the exception (throwable) to log*/
public voiderror(String msg, Throwable t);
}
slf4j(Simple Logging Facade for Java)是Facade模式的典型应用,它定义了一套标准的日志接口,诸如logback、log4j、slf4j-simple等框架都是这个日志接口的具体实现。从这一点来看,slf4j的标准化显得相当重要,当然,从上面这些方法可见,它做到了!
我这里要点赞的也是这几个方法的定义。注意观察比较这几个有参的info/error方法的第一个参数:有的是format,有的是msg。
充分展现了代码的整洁之道,由此可以看出来作者是很讲究代码的可读性的。
看上面几个方法,
如果记录异常信息,不妨调用error(String msg, Throwable t)方法。这时,第一个参数不是format,是msg。所以下面语句里的“{}”就有画蛇添足之嫌了:
try{
......
}
}catch(IOException e) {
LOG.error("#PayCenterHttpTransport,http调用出错!异常信息:{}", e);
}
如果要打印更详细的info日志,可以调用logger.info那几个重载方法,支持用format形式。
log.info("融宝请求url:{},请求报文:{}", url, json);
logger.error也是支持format的。如下是Logger接口类里这个error重载方法的定义。注意调用方式是
log.error("执行请求{}出现异常,",1,new Exception("test"));
/*** Log a message at the ERROR level according to the specified format and arguments.
*
*
This form avoids superfluous object creation when the logger is disabled for the ERROR level.
*
*@paramformat the format string
*@paramarg1 the first argument
*@paramarg2 the second argument*/
public void error(String format, Object arg1, Object arg2);
打印的异常日志是:
14:55:25.997 [main] ERROR ddd - 执行请求1出现异常,
java.lang.Exception: test
at com.emax.paycenter.common.util.MailUtil.main(MailUtil.java:100) [classes/:na]
=====over=====