在代码中插入日志语句是调试代码的低端做法,但是它也可能是唯一的做法,因为调试器并不总是可用或者适用,尤其对于分布式应用。

另一方面,有人争论说日志语句污染了源代码并且降低了源代码的清晰度。在Java这样的不具备预处理器的语言中,日志语句的存在增加了代码文件的大小并且降低了代码运行的速度,即便是在日志被关闭的情况下。鉴于一个正常大小的应用程序可能包含几千条日志语句,其执行速度就显得非常重要。

 

使用log4j,你可以在运行时启动日志,但并不需要修改源代码。日志行为可以通过编辑一个配置文件来进行控制,你丝毫不需要去改动程序的二进制代码。

 

日志让开发者了解应用程序失败(崩溃)的详细的上下文信息。另一方面,测试为应用程序提供质量和信心保证。日志和测试不应该被混为一谈,它们是互补的关系。

 

log4j中一个独特的特性是日志器继承关系的概念。利用日志器的层次关系,可以轻松地控制日志语句的输出,从而减少日志输出量和日志操作的开销。

日志输出的目标可以是一个文件,一个输出流,一个java.io.Writer,一个远程log4j服务器,一个远程Unix Syslog守护进程或者许多其他目标。

 

在800Mhz的AMD Duron上运行JDK 1.3.1的环境下,需要花费大约5纳秒来判断一个日志语句是否需要输出。实际的日志输出同样也非常快,使用SimpleLayout大约为21微秒,使用TTCCLayout大约为37微秒,PatternLayout的性能也与以上的layout同样好,只是它在输出格式上更灵活。