日志整理
分享思路
- 日志前言
- 日志框架的简单介绍
- 日志级别
- 日志demo整合
- springboot的日志加载过程
- slf4j的加载过程
- Log4j2的标签详解
日志前言
- 什么是日志 ?
日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分。 - 日志的作用 ?
好的日志可以帮助我们:了解线上系统的运行状态;快速准确定位线上问题;发现系统瓶颈;预警系统潜在风险;挖掘产品最大价值……
不好的日志导致:对系统的运行状态一知半解;系统出现问题无法定位,或需要花费巨大的时间和精力;无法发现系统瓶颈;不知优化从何做起;无法对错误进行监控和报警;对挖掘用户行为和提升产品价值毫无帮助…… - 日志分类
日志从功能来说,可分为诊断日志、统计日志、审计日志。
- 诊断日志
3.1.1 请求的入口出口
3.1.2 服务调用和返回
3.1.3 资源消耗操作
3.1.4 容错行为
3.1.5 程序异常
3.1.6 后台操作
3.1.7 启动关闭、配置加载
… - 统计日志
3.2.1用户统计访问
3.2.2计费日志
… - 审计日志
3.3.1按照指定格式输出日志
3.3.2按照需求输出日志
…
注意:日志我们需要记录我们正好需要的日志信息,尽量避免繁杂无用的日志信息出现
日志框架的简单介绍
目前在在市场上目前的日志框架有:JCL(Jakarta Commons Logging)、JUL(Java util Logging)、Jboss-Logging、SLF4J、Log4j、Logback、Log4j2 …
日志门面框架:JCL、SLF4J…
日志实现框架:JUL、Log4J、Logback、Log4j2…
Remember a person and an institution:
Ceki Gulcu -->SLF4J、Log4J、Logback
Apache -->JCL、Log4J2
- JCL:采用适配器模式,是Java自身的一些包用了JUL,提供一套API来实现不同Logger之间的切换。JCL致命的缺点就是算法复杂,出现问题难以排除。
- SLF4J:简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。解决了JCL的缺点。
- JUL:是JDK 中自带的log功能,JDK1.4 才开始加入(2002年),但使用不够广泛。早期存在性能问题,到JDK1.5上才有了不错的进步,与Logback/Log4j2相比还是有所不如的。
- Log4J:2001年由Ceki Gulcu发布,在2014年12月发行了最后一版。springboot从1.4版本之后不再支持。短板在于它的性能问题。
- Logback:与Log4j相比,Logback重新了内核,使它的性能提升了很多,大约是Log4j的10倍,同时占用更小的内存,并且完整的实现了SLF4J API是你可以很方便的切换日志框架。
- Log4j2:Log4j的升级版本,比Log4j 1.x有重大改进,修复了Logback中一些问题。但是不兼容Log1.x版本。Log4J2是现在最优秀的Java日志框架是Log4j2,没有之一。根据官方的测试表明,在多线程环境下,Log4j2的异步日志表现更加优秀。在异步日志中,Log4j2使用独立的线程去执行I/O操作,可以极大地提升应用程序的性能。
Logback和Log4J2性能对比
当线程数量较少时:Logback和Log4j2的性能相差无几
当线程数量较大时,很明显Log4j2的性能要10倍于Logback。Log4j2在独立应用程序中基本是无垃圾的,在web项目中是低垃圾的,减少了GC的内存消耗。
(未完待续…)