首页 > 编程知识 正文

代码日志规范,日志规范

时间:2023-05-04 06:11:03 阅读:20226 作者:3111

概览

如果在生产环境中运行的程序没有日志,维护者会非常担心。 另外,太多杂乱无意义的日志也很悲伤。 程序发生问题时,如果从日志中找不到问题的可能原因,就会受挫。 本文想介绍如何在Java程序中创建日志。

一般来说,日志有业务日志和异常日志两种。 使用日志,我们希望实现以下目标:

记录和监测程序执行情况;

根据需要可以详细了解程序内部的动作状态;

对系统性能的影响尽可能小

Java日志框架

Java日志框架太多了。

Log4j或Log4j 2- Apache的开源项目。 使用Log4j,日志信息的目标可以控制控制台、文件、GUI组件、接口服务器、NT事件记录器、UNIX Syslog守护程序等。 用户还可以控制每个日志的输出格式。 通过定义每个日志信息的级别,用户可以更好地控制日志的生成过程。 它们可以在一个配置文件(XML或Properties文件)中灵活配置,而无需更改程序代码。 Log4j 2是前任的升级,借鉴了Logback的很多特性;

Logback- Logback是另一个由超冷风创始人设计的开源日记组件。 logback目前分为三个模块: logback-core、logback- classic和logback-access。 logback-core是其他两个模块的基础模块。 logback-classic是超冷风的改良版。 此外,logback-classic完全实现了SLF4J API,可以方便地更换为其他日记系统,如超级冷风和JDK14 Logging;

java.util.logging- JDK内置的登录接口和实现,功能简单

Slf4j- SLF4J为各种Logging API提供了一个简单、统一的接口,允许用户在部署时配置所需的Logging API实现;

apachecommonslogging-apachecommonslogging (JCL )希望解决的问题与Slf4j类似。

选择太多的结果,得了选择困难症。 在我看来没有最好的,只有最好的。 在性能方面,选择Logback或自行实现高性能Logging API可能更好;如果在已经使用Log4j的项目中未发现问题,则继续使用可能更好我通常选择在项目中使用Slf4j。 如果不想有依赖关系,请使用java.util.logging或框架容器已经提供的登录界面。

Java日志最佳实践

定义日志变量

由于日志变量经常不变,因此最好将其定义为final static,变量名称为大写。

日志级别

Java日志框架一般提供以下日志级别: 缺省情况下,打开info级别,即调试。 在生产环境中不输出跟踪级别的日志。 在开发和测试环境中,可以在不同的日志配置文件中打开调试级别。

故障-导致服务中断的严重错误

错误-其他错误运行时错误;

warn-程序调用预定废弃的接口、接口的非法使用、执行状态不期待但可以继续处理等警告消息;

info-有意义的事件信息,如启动程序、关闭事件和接收请求事件

调试-调试信息,记录详细的业务处理进展到了什么程度,以及当前变量的状态;

跟踪-更详细的跟踪信息;

程序中请合理使用日志等级:

基本Logger编码规范

1 .一个对象通常只使用一个Logger对象。 Logger必须是静态final,并且只有在构造函数需要传递Logger时才使用私有final。

输出Exceptions的所有可移植信息。 这是因为,logger.error(msg )和logger.error(msg,e.getMessage ) )这样的日志输出方法会丢失最重要的堆栈跟踪信息。

3 .记录日志后不允许抛出异常。 这将多次记录日志,因此只能记录一次日志。

4 .不能使用system print (包括system.out.println和System.error.println )语句。

不允许打印堆栈跟踪。

6 .考虑到日志的性能,当代码为核心代码且运行频率非常高时,输出日志会增加判断,特别是建议低级输出。

过多的调试日志可能会影响性能。 改进措施之一是:

但是,更好的方法是Slf4j提供的最佳做法:

虽然可以减少参数结构的开销,但也不需要多写两行代码。

7 .有意义的日志

程序日志通常记录相对有意义的状态数据。 程序启动并结束时; 执行程序需要时间的程序的执行进度重要变量的状态发生变化。

除了第一次以外,在公共日志中避免调试打印程序或提示信息。

常见问题解答:参考

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。