3.0运维那些事之日志
M
包括:CRITICAL(紧急)、ERROR(错误)、WARN(警告)、INFO(信息)、DEBUG(调试)五个级别。
源(Source)
O
如设备的名称或设备的IP地址等唯一标识设备的信息。本
级别(Severity) M 包括:CRITICAL(紧急)、ERROR(错误)、WARN(警告)、INFO(信息)、DEBUG(调试)五个级别。 源(Source) O 如设备的名称或设备的IP地址等唯一标识设备的信息。本字段条件可选,如果在日志名称中未包含此信息,则需要在日志中包含此字段。 服务/模(Service/Module) O 创建该日志记录的服务名称或模块名称。 运行信息(Info) M 记录的系统运行中的所发生的相关事件和信息。 附加信息(AdditionInfo) O 附加信息,对上述运行信息的补充,如错误码,如果没有可不填。附加信息需按照key=value格式记录。 日志点:系统中需要打印输出日志的位置;日志点设计中首先需要明确日志点设置的原则,一般对系统、业务逻辑有重要影响的地方都需要考虑日志点打印。包括但不限于: 任务、线程等启动、关闭处; 操作入口处和设置预置条件处; 状态设置、状态迁移处; 消息收发、编解码处; 资源创建、存取、释放、大小改变、并发处理(如临界点)等处; 业务相关资源统计处等; 接口调用、函数调用等所有调用入口或出口处 常用日志通用打印框架 日志是我们了解系统运行状况和故障定界定位的重要手段,各大主流语言都提供了日志打印框架下面以java 为例介绍主要的日志打印框架: j.u.l j.u.l是java.util.logging包的简称,是JDK在1.4版本中引入的Java原生日志框架。Java Logging API提供了七个日志级别用来控制输出。这七个级别分别是:SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST。 Log4j Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式; 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。Log4也有七种日志级别:OFF、FATAL、ERROR、WARN、INFO、DEBUG和TRACE。可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 LogBack LogBack也是一个很成熟的日志框架,其实LogBack和Log4j出自一个人之手,这个人就是Ceki Gülcü。 logback当前分成三个模块:logback-core,logback- classic和logback-access。 logback-core是其它两个模块的基础模块。 logback-classic是Log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如Log4j或j.u.l。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于ch.qos.logback.classic.Level类 logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。 Log4j2 前面介绍过Log4j,这里要单独介绍一下Log4j2应用程序日志,之所以要单独拿出来说,而没有和Log4j放在一起介绍,是因为作者认为,Log4j2已经不仅仅是Log4j的一个升级版本了,而是从头到尾被重写的,这可以认为这其实就是完全不同的两个框架。 关于Log4j2解决了Log4j的哪些问题,Log4j2相比较于Log4j、j.u.l和logback有哪些优势 我会单独写篇文章记录。 常用日志门面打印框架 前面介绍了四种日志框架,也就是说,我们想要在应用中打印日志的时候,可以使用以上四种类库中的任意一种。比如想要使用Log4j,那么只要依赖Log4j的jar包,配置好配置文件并且在代码中使用其API打印日志就可以了。 但看过《阿里巴巴Java开发手册》同学可以发现,其中有一条规范做了『强制』要求: 先了解下什么是 门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。终极目标是实现架构解耦,防止模块内部细节的变化影响其应用者。 就像前面介绍的几种日志框架一样,每种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。我们看看Java生态体系中有哪些好的日志门面的实现可供选择。 Apache Commons Logging (JCL) Jakarta Commons-logging(JCL)是apache最早提供的日志的门面接口。提供简单的日志实现以及日志解耦功能。 JCL能够选择使用Log4j或JDK Logging,但是他不依赖Log4j,JDK Logging的API。如果项目的classpath中包含了log4j的类库,就会使用log4j,否则就使用JDK Logging。使用commons-logging能够灵活的选择使用那些日志方式,而且不需要修改源代码。(类似于JDBC的API接口) SLF4J Java简易日志门面(Simple Logging Facade for Java,缩写SLF4J),是一套包装Logging 框架的界面程式,以外观模式实现。可以在软件部署的时候决定要使用的 Logging 框架,目前主要支援的有Java Logging API、Log4j及logback等框架。以MIT 授权方式发布。SLF4J 的作者就是 Log4j和Logback 的作者 Ceki Gülcü,他宣称 SLF4J 比 Log4j 更有效率,而且比 Apache Commons Logging (JCL) 简单、稳定。其实,SLF4J其实只是一个门面服务而已,他并不是真正的日志框架,真正的日志的输出相关的实现还是要依赖Log4j、logback等日志框架的。 总结:关于日志打印框架 主要两类框架,一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等。 另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。 写在最后:最佳实践就是在应用中使用如Log4j + SLF4J 这样的组合来进行日志输出。这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本。这也是门面模式所带来的好处。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |