JAVA日志的前世今生

简介: 这世界上很多事情,看起来就像彩虹一样炫目而神奇,实际上背后蕴含着随处可见的原理。就好像静儿几年前买过一件超贵的防辐射服,当时销售人员把手机严严实实的包在防辐射服里,然后让我打电话测试,果然没有信号。直到今天,静儿为了写文章,把自己蒙在空调被里,额,竟然连不上网。于是掀起一个被角,“大象”的巡检结果哒哒哒的弹出来了。然后我感慨:自己当年何苦买那么贵一个“围裙”。 日志作为逻辑跟踪、线上问题排查、监控报警的有效基础利器被开发人员所熟知。问题发现、定位到解决,都离不开它,真是如彩虹般绚烂。而从它的演进过程也能看到现代互联网发展的一个缩影。

12132328-96094797822b2571.png


      这世界上很多事情,看起来就像彩虹一样炫目而神奇,实际上背后蕴含着随处可见的原理。就好像静儿几年前买过一件超贵的防辐射服,当时销售人员把手机严严实实的包在防辐射服里,然后让我打电话测试,果然没有信号。


直到今天,静儿为了写文章,把自己蒙在空调被里,额,竟然连不上网。于是掀起一个被角,“大象”的巡检结果哒哒哒的弹出来了。然后我感慨:自己当年何苦买那么贵一个“围裙”。


   日志作为逻辑跟踪、线上问题排查、监控报警的有效基础利器被开发人员所熟知。问题发现、定位到解决,都离不开它,真是如彩虹般绚烂。而从它的演进过程也能看到现代互联网发展的一个缩影。

 

一 最原始的日志:print、alert


12132328-5fa70a2f21dbd4c7.png


   啥?这也算日志。


是的。记得大概十年前,不管是C/S模式(客户端+服务端模式)还是B/S(浏览器+服务端模式)。因为只有前端和后端交互这一层,整个项目都做在一个工程里,大家验证基本上用的前端就是alert,后台就是System.out.print。需求决定设计。链路短,这个基本就够用。

 

二 JUL


java有自己的日志框架,细心的朋友可能注意到过:java.util.logging。


由于其API并不完善,对开发者不是很友好,对于日志的级别分类也不是很清晰。所以大家用的很少。

 

三 Log4j


有人注意到JUL的一些缺陷,做出了Log for Java。就是曾经风靡一时的Log4j。


Log4j是Apache的一个开源项目,通过使用Log4j,可控制日志信息输送的目的地是控制台、文件、数据库等。也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,能够更加细致的控制日志的生成过程。


Log4j有7中不同的log级别,按照等级从低到高依次为trace


Log4j支持两种格式的配置文件:properties和xml。包含三个主要的组件:Logger、appender、Layout。



12132328-4bfaf17632f2845a.png


四 JCL


Jakarta对于java开发人员来说,第一反应不是印度尼西亚的首都,而是Jakarta Commons。而JCL就是Jakarta Commons-Logging的缩写。


JakartaCommons是Jakarta的一个子项目,目的是创建和维护独立与其他框架和产品的程序包。


JCL的初衷是:java自身的一些包都用自己的JUL,而Log4j又那么好用。怎么让他们愉快的相处呢?


它就提供了一套API门面来掩盖真正的Logger实现。这就是设计模式里常用的门面模式,可以进行不同Logger实现的切换。它的缺点是算法复杂,出了异常很难修复。

 

五 SLF4J


    SLF4J=Simple Logging Facade for Java,中文叫:简单日志门面。他的作者就是Log4j的作者。


SLF4J为了解决JCL的缺点而生,简单易用。


12132328-16edbe8ca6937185.png


六 Logback


   Log4j的作者是对技术有着执着的追求的技术学者。他为了实现一个可靠、通用、快速而又灵活的Java日志框架这一目标,又发明了Logback。


   Logback有三个模块


1.logback-core:日志处理核心组件


2.logback-classic:完整的实现了SLF4j API,用于切换日志实现。


3.logback-access:与Servlet容器集成提供通过http来访问日志的功能。


   因为logback比log4j大约快10倍、消耗更少的内存,迁移成本也很低,自动压缩日志、支持多样化配置、不需要重启就可以恢复I/O异常等优势,又名噪一时。反正静儿是用了很多年。


12132328-f66abe245a9a50ff.png


七 Log4j2


   Log4j2与Logback非常类似,但是它有自己的亮点:如插件式结构、配置文件优化、异步日志。


12132328-d8dd70d058a0570d.jpg


八 日志系统


   上面所说的日志都是代码层面。但是实际使用时由于线上都是多个节点并行在跑。为了看日志,不得不登录多个服务器。所以聪明的技术人员就想到了使用RSA授权来集中多个服务的操作于一个终端,这样的工具代表是:polysh。


但是这样,工具使用之前的操作还是挺麻烦的,不如使用界面做一个系统。


Scribe是Facebook开源的日志收集系统。它从各种日志源收集日志,存储在中央存储系统,进行集中的分析处理。


   业界比较流行的做法是使用Scribe+ES。Scribe收集上来的日志放入搜索引擎,用户使用搜索引擎来灵活的查看自己感兴趣的日志,如同访问一个网站。



12132328-a501863814adf7ec.png


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
257 1
|
7月前
|
Java
Java切面日志LogsAspect
Java切面日志LogsAspect
353 2
|
7月前
|
监控 安全 Java
Java基础知识第七讲:Java异常处理与日志打印
Java基础知识第七讲:Java异常处理与日志打印
266 0
|
7月前
|
存储 Java 程序员
【Java】Spring Boot 日志文件
【Java】Spring Boot 日志文件
|
5天前
|
Java
java使用AOP切面获取请求日志并记录
java使用AOP切面获取请求日志并记录
|
5天前
|
运维 监控 安全
Java一分钟之-Log4j与日志记录的重要性
【5月更文挑战第16天】Log4j是Java常用的日志框架,用于灵活地记录程序状态和调试问题。通过设置日志级别和过滤器,可避免日志输出混乱。为防止日志文件过大,可配置滚动策略。关注日志安全性,如Log4j 2.x的CVE-2021-44228漏洞,及时更新至安全版本。合理使用日志能提升故障排查和系统监控效率。
28 0
|
6天前
|
Java
Java Exception打印及输出到日志
有时候如果打印出异常的错误,并记录下来,这里记录一下
52 5
|
6天前
|
存储 消息中间件 Java
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
|
6天前
|
缓存 Java 测试技术
Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能
Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能
|
6天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
177 3