java 日志编码规范
应用程序的开发离不开日志,日志对于分析应用程序的故障(日志可以记录出现问题的那个段时间程序的运行情况)、性能、执行效果等都非常有帮助。可就是这样一个非常有帮助的东西,大家在使用的时候还存在不少的误区和使用不当的地方。这篇文章的目的就是整理一些Java日志的编码规范,希望对大家有帮助,整理有错误的地方也请告知。
以下是一些最基本的Logger编码规范
1.在一个对象中通常只使用一个Logger对象。
2.Logger应该是Static和final的,只有在少数需要在构造函数中传递logger的情况下才使用private final。
3.不允许出现System print(包括System.out.println和System.error.println)语句。
4.不允许出现printStackTrace,例如
class Foo { void bar() { try { // do something } catch (Exception e) { e.printStackTrace(); } } }
5.在公共的日志里禁止打印程序的调试或者提示信息。
以下是针对最常使用的org.apache.commons.logging.Log 接口的编码规范
6.Logger接口的调用必须包含两个参数String message和Throwable。
因为logger.error( e ); 这样的日志输出方法会丢失掉最重要的StackTrace信息。
public class Main { private static final Log _LOG = LogFactory.getLog( Main.class ); void bar() { try { } catch( Exception e ) { _LOG.error( e ); //错误_LOG.error(e.getMessage()) //错误 } catch( OtherException oe ) { _LOG.error( oe.getMessage(), oe ); //正确 } } }
7.在输出日志时,低级别的输出一定要判断isXXEnabled info及以下级别。
参考
7 Good Rules to Log Exceptions
Logging: commons-logging and Log4j
