选择恰当的日志级别
常见的日志严重级别有:error warn info debug。
如果将日志级别设置为Info,通常情况下,会打印Info、Warn和Error级别的日志。这是因为通常情况下,日志级别是按照严重程度从高到低排列的,而设置为Info级别时,会打印Info级别及更严重级别的日志。
日志要打印出参入参数 方便甩锅
在真实业务中,我们并不需要很多的日志。只需要打印可以定位有效问题的日志,以及可能存在问题的日志。但是在追究问题的时候,婆说婆有理。所以:日志一定要有接口的入参、出参内容。
选择合适的日志格式
时间戳 线程名字 日志级别等
if-else ,switch 等分支语句
遇到逻辑分支:建议打印日志,方便排查方法执行。
对一些比较低的日志级别进行判断,使用log.isXXXX()方法判断
如果日志不被记录,但是日志内的字符拼接,对象的toString方法也会执行,浪费性能
不建议直接使用log4j ,logback等日志系统
建议使用slf4j框架,方便统一处理。教程可参考:https://www.zanglikun.com/19890.html
使用 SLF4J(Simple Logging Facade for Java)框架相对于直接使用特定的日志系统(如 log4j、logback 等)有一些优势,这些优势包括:
- 统一的日志接口:SLF4J 提供了统一的日志接口,它允许开发人员在代码中使用统一的日志 API 进行日志记录。这意味着,无论底层使用的是 log4j、logback 还是其他日志系统,开发人员都可以使用相同的 SLF4J API 进行日志记录,而无需关心具体的日志实现。
- 灵活性:使用 SLF4J 可以使得日志系统的选择更加灵活。开发人员可以根据需要轻松地切换底层的日志实现,而无需修改应用程序的代码。这种灵活性使得在不同的环境中(例如开发、测试、生产)可以方便地选择不同的日志实现。
- 避免依赖冲突:在复杂的应用程序中,可能会使用多个第三方库,这些库可能会依赖不同的日志系统。通过使用 SLF4J,可以避免因为不同日志系统的依赖冲突而导致的问题,因为 SLF4J 可以作为一个中间层来统一管理日志输出。
- 性能优化:SLF4J 提供了一些性能优化的机制,例如在日志级别不开启的情况下,可以避免构建日志信息,从而提高性能。
- 社区支持:SLF4J 是一个广泛使用的日志门面框架,拥有庞大的社区支持和活跃的维护。这意味着开发人员可以从社区中获得丰富的资源和支持。
总的来说,使用 SLF4J 可以带来更灵活、更统一的日志记录方式,同时也有助于避免日志依赖冲突、提高性能,并且得到了广泛的社区支持。因此,相对于直接使用特定的日志系统,使用 SLF4J 是一个更好的选择。
输出日志的文本建议使用参数占位符{},而不是 + 字符串吧拼接
使用参数占位符 {}
而不是字符串拼接 +
的方式来输出日志文本有以下几个优点:
- 性能优化:使用参数占位符可以提高性能。当日志级别未开启时,如果使用字符串拼接的方式,即使日志不会输出,字符串拼接的操作仍然会执行。而使用参数占位符的方式,日志框架会在日志级别未开启时避免字符串拼接操作,从而提高性能。
- 可读性:使用参数占位符的方式可以使日志文本更具可读性。通过在日志文本中使用占位符,可以清晰地看出日志信息中的变量部分,便于阅读和理解日志内容。
- 避免字符串拼接错误:使用参数占位符可以避免由于字符串拼接操作导致的错误。在字符串拼接时,如果不小心遗漏了某个变量或者拼接顺序出错,容易导致日志输出的内容不符合预期。而使用参数占位符,则可以避免这类错误。
- 国际化支持:使用参数占位符的方式更有利于支持国际化。在不同语言环境下,日志的文本可能需要进行翻译,使用参数占位符可以更方便地进行文本替换和处理。
综上所述,使用参数占位符 {}
而不是字符串拼接 +
的方式可以提高性能、增强可读性,避免错误,并有利于国际化支持。因此,建议在输出日志的文本时使用参数占位符的方式。
建议使用异步日志,能有效提升IO性能
异步日志是一种将日志写入磁盘的操作与主线程的业务逻辑分离的技术。通过使用异步日志,可以提高系统的 IO 性能和磁盘的 IOPS(每秒输入/输出操作数)。
提高 系统 IO 和 磁盘 IOPS 原理
使用异步日志可以提高系统的 IO 性能和磁盘的 IOPS,主要有以下几个原因:
- 减少主线程阻塞时间:主线程不再需要等待日志写入磁盘,可以立即继续执行后续的业务逻辑,从而减少了主线程的阻塞时间,提高了系统的处理能力。
- 批量写入:异步日志通常会采用批量写入的方式,将缓冲区中的日志一次性写入磁盘,减少了磁盘的随机写入操作,从而提高了磁盘的 IOPS。
- 缓冲区管理:异步日志可以通过合理管理缓冲区的大小和写入策略,优化日志写入的效率,减少了对磁盘的频繁访问,提高了 IO 性能。
总的来说,异步日志通过将日志写入操作与主线程的业务逻辑分离,有效地提高了系统的 IO 性能和磁盘的 IOPS,特别是在高并发和高负载的场景下能够发挥明显的优势。
不要使用e.printStackTrace ()
打印错误信息,因为太多信息,且是堆栈信息,会使得内存溢出
10、异常不要只打一半,要完成输出
11、禁止在线上开启debug 会把磁盘打满
12、不要记录了异常,又抛出异常
13、避免重复打印日志,浪费磁盘空间
14、日志文件分离,不同级别日志存放在不同文件中
15、核心功能模块,建议打印详细的日志
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤