Java log4j的优势
Java log4j的优势,java,logging,log4j,Java,Logging,Log4j,log4j比设置System.out和System.err输出到日志文件有什么好处?我的收藏夹(不是全部) 能够设置登录配置的参数,无需重新编译 能够设置日志的写入方式(从文本文件到SMTP发件人) 按严重性筛选的能力 级别、格式、记录到多个文件。。。日志框架(即使是java.util.logging)在代码运行时可能出现任何问题时都非常有用。从较高的层次上讲,Log4j胜过手动日志记录,这是因为您可以将日志记录代码与实际要记录的内容、记录的位置和方式分离。有关日志详细信息/过滤、格式、日志位
log4j
比设置System.out
和System.err
输出到日志文件有什么好处?我的收藏夹(不是全部)
- 能够设置登录配置的参数,无需重新编译
- 能够设置日志的写入方式(从文本文件到SMTP发件人)
- 按严重性筛选的能力
我最喜欢的功能是能够轻松编写appender并将数据发送到非文件源,如,等等。这使得您的应用程序可以轻松地自定义登录到您的it部门已经使用的操作管理工具中 Log4j提供了根据大小旋转日志文件并根据数量删除日志文件的功能(logrotate),因此服务器不会填满磁盘。我个人认为这是Log4j中更有价值的特性之一
此外,Log4j也很受欢迎,并为许多开发人员所理解。我工作过的最后三家公司在大多数项目中都使用了Log4j。Log4j允许您登录各种资源,例如事件日志、电子邮件、文件系统等,同时允许您的应用程序与所有这些资源保持解耦。此外,您还可以使用一个通用接口登录到所有各种资源,而无需学习或集成相应的API。实际上,您现在应该研究一下slf4j facade,因为它允许您使用{}-占位符来获得最简洁的语句。然后,您可以使用slf4j背后的适当日志框架来处理日志语句的实际处理。这可能是log4j或slf4j simple,它只打印出所有信息、警告和错误,并丢弃其余信息 您需要进行的关键观察是,日志语句的编写是在编写代码时完成的,而所需内容的决定是在部署代码时完成的,这可能是在编写和测试代码之后的几年。System.out.println要求您实际更改代码以摆脱它们,这在严格的写测试部署周期中是不可接受的。如果代码更改,则必须重新测试。使用slf4j,您只需启用您想要查看的内容 我们在测试阶段有完整的日志记录,在生产部署的初始阶段有详细的日志记录,之后我们只讨论信息。在很少可能调试案例的情况下,这为我们提供了完整的信息
你可能会发现我写的这篇文章很有趣。目标受众是Java程序员,我打算从一开始就让他们养成良好的习惯 看一看,你就会明白log4j的威力: log4j.properties我曾经在一个项目中使用过:
# ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
# No appenders for rootLogger
log4j.rootLogger=OFF
folder=..
prefix=
fileExtension=.log
htmlExtension=${fileExtension}.html
datestamp=yyyy-MM-dd/HH:mm:ss.SSS/zzz
layout=%d{${datestamp}} ms=%-4r [%t] %-5p %l %n%m %n%n
# myLogger logger
log4j.logger.myLogger=ALL, stdout, infoFile, infoHtml, errorFile
# stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=${layout}
# infoFile
log4j.appender.infoFile=org.apache.log4j.FileAppender
log4j.appender.infoFile.File=${folder}/${prefix}_info${fileExtension}
log4j.appender.infoFile.layout=org.apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern=${layout}
# infoHtml
log4j.appender.infoHtml=org.apache.log4j.FileAppender
log4j.appender.infoHtml.File=${folder}/${prefix}_info${htmlExtension}
log4j.appender.infoHtml.layout=org.apache.log4j.HTMLLayout
log4j.appender.infoHtml.layout.Title=Logs
log4j.appender.infoHtml.layout.LocationInfo=true
# errorFile
log4j.appender.errorFile=org.apache.log4j.FileAppender
log4j.appender.errorFile.File=${folder}/${prefix}_error${fileExtension}
log4j.appender.errorFile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorFile.layout.ConversionPattern=${layout}
# APPENDERS SETTINGS
log4j.appender.stdout.Threshold = ALL
log4j.appender.infoFile.Threshold = INFO
log4j.appender.infoHtml.Threshold = INFO
log4j.appender.errorFile.Threshold = WARN.
- 日志记录(记录发生的历史业务事件,您可以检查旧日志)
- 跟踪应用程序(项目流程)
- 调试应用程序(详细信息在粒度级别的方法中发生了什么//数据、值和所有内部方法)
- 错误处理(有关发生的特定错误的信息)
String dynamicLog = // log directory somehow chosen...
Properties p = new Properties( Config.ETC + "/log4j.properties" );
p.put( "log.dir", dynamicLog ); // overwrite "log.dir"
PropertyConfigurator.configure( p );