APACHE LOG4J? 2

最近服务端开发需要用Log系统,于是研究了下APACHE下的Log框架。

目前日志系统,支持的语言有C++,PHP,.NET,JAVA。当然我是用Java服务端,选择用log4j吧。但突然发现log4j 2比较有趣,官网也提到性能上有比1.X有更大的提升,关于log4j的文章网上有很多了。

那么我们就来学习下log4j 2吧。

至于个人的选择,我有时候不太喜欢使用调试器。原因之一是因为它复杂数据结构和控制流程的细节需要让我去思考;特别是单步跟踪更麻烦,点击语句和思考花费的时间耗费更多。

如果用输出的话,则需要较少的时间来决定在哪里把打印语句,而不是去思考单步代码的关键部分和使用快捷键去单步调试。更重要的是,调试语句留在程序中;调试会话是短暂的。

Logging确实有它的缺点。它可以使应用程序变得更慢。如果太详细,可能会导致滚动越界,而看不到全部的。为了减轻这些影响,log4j被设计为是可靠的,快速的和可扩展的

LOG4J™ 2
log4j的1.x中已被广泛采用并在许多应用中使用。然而,经过多年的发展上有所放缓。由于其需要严格遵守非常老版本的Java,它变得更难以维持。其办法,SLF4J/ Logback向框架许多需要改进。那么,为什么有Log4j 2呢?这里有几个原因。

1.Log4j 2被设计作为审计日志框架。Log4j1.x和Logback在失去events 时而重新配置。 Log4j 2不会。在Logback的Appenders中异常应用程序中是绝对看不到的。在Log4j 2中Appenders可以被配置为允许异常渗到应用

2.Log4j 2包含LMAX Disruptor库基础上的下一代无锁异步Loggers 。在多线程情况下异步Loggers 具有10倍的吞吐量和比Log4j1.x和Logback幅度更低的延迟。

3.Log4j 2采用了插件系统,添加新的Appenders, Filters, Layouts, Lookups, 和Pattern Converters更加容易。

4.由于插件的系统配置简单。Entries 配置中不需要指的类名。

5.支持Message对象。Message允许的有趣和复杂的结构支持,通过日志系统传递有效地操作。用户可以自由创建自己的消息类型和编写自定义的 Layouts, Filters ,Lookups并操作他们。

6.Log4j的1.x的支持上的Appender的过滤器。 Logback加入TurboFilters允许由一个Logger处理的事件之前进行过滤。Log4j 2支持可配置为由一个Logger处理之前处理事件,因为它们是由一个Logger或Appenders处理。

7.许多Logback的Appender不接受Layouts,并且只发送数据的固定格式。大多数的Log4j 2Appenders接受Layouts,允许数据在所需的任何格式来传送。

8.在Log4j的1.x和Logback布局返回一个String。这导致了在Logback编码器讨论的问题。 Log4j 2采用了更简单的方法,布局总是返回一个字节数组。这具有它意味着他们可以在几乎任何追加程序被使用,而不是仅写入到OutputStream的优点。

9.系统日志的Appender同时支持TCP和UDP以及支持BSD的系统日志和RFC5424格式。

10.Log4j的2利用了Java 5的并发支持的优势,进行以尽可能低的水平锁定。 Log4j的1.x中已经知道死锁问题。其中许多是固定的Logback但许多Logback类仍然需要在相当高的水平同步。

架构

Logger

Loggers 通过调用LogManager.getLogger创建。该Logger本身不执行任何直接的动作。它只是一个名字,并和LoggerConfig有关。它扩展AbstractLogger并实现所需的方法。通过配置修改Logger可以和不同LoggerConfig关联的,从而导致需要修改其行为。

调用LogManager.getLogger方法具有相同的名字总是会返回一个引用完全相同的Logger对象。

例如,在

Logger X = LogManager.getLogger(“jy02432443”);
Logger Y = LogManager.getLogger(“jy02432443”); 

x和y是指完全相同的Logger对象,可以用==。

log4j的环境配置通常是在应用程序初始化的时候。首选的方法是通过读取配置文件。这个在配置章节已经讨论过了。

Log4j中可以很容易地为Logger软件组件命名。这可以通过在每类中实例化一个Logger,与Logger名称相同的类的完全限定名来完成(如tl.lan或org.lan)。这是定义Logger的有效和直接的方法。

作为日志输出带有产生日志Logger的名字,这个命名策略可以很容易地识别出日志信息的来源。 Log4j的不限制尽可能多的Logger。开发人员可以自由根据需要来命名Logger。

一般用类的名字命名Logger比较常见,方便的方法LogManager.getLogger(Object.class)设置为自动使用调用类的完全限定类名作为Logger的名字。

该类它们所在的位置来命名Logger似乎是目前已知的最好的策略。

时间: 2024-08-28 02:10:53

APACHE LOG4J? 2的相关文章

Java_异常_02_java.lang.NoClassDefFoundError: org/apache/log4j/Level

总结:解析Json时,除了要导入json-lib-2.2-jdk15.jar外,还要导入: commons-beanutils.jar, commons-httpclient.jar, commons-lang.jar, ezmorph.jar, morph-1.0.1.jar 1.异常1信息: Failed to instantiate SLF4J LoggerFactory Reported exception: java.lang.NoClassDefFoundError: org/apa

org.apache.log4j.Logger详解

1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息. 最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类 来封装此类操作,而不是让一系列的打印语句充斥了代码的主体. http://logging.apache.org/log4j

Log4j – Configuring Log4j 2 - Apache Log4j 2

Apache Log4j 2 ? Logging Wiki Apache Logging Services Sonar   Configuration Inserting log requests into the application code requires a fair amount of planning and effort. Observation shows that approximately 4 percent of code is dedicated to logging

apache log4j日志工具使用入门[maven 项目配置]

简单的介绍下Maven项目中有关org.apache.log4j.Logger的使用.[1]首先我们需要找到 org.apache.log4j.Logger的坐标,并配置到POM.xml <dependency>     <groupId>log4j</groupId>     <artifactId>log4j</artifactId>     <version>1.2.14</version>     <scop

Java:Apache log4j简明教程(一)

Apache log4j的官方介绍是“log4j is a reliable, fast and flexible logging framework (APIs) written in Java, which is distributed under the Apache Software License. log4j is highly configurable through external configuration files at runtime. It views the log

log4j的性能瓶颈定位与性能优化(org.apache.log4j.spi.RootLogger) (转)

最近执行一个项目调优,发现使用第三方的Json库导致性能差.原以为问题就这么定位到了,结果去掉Json操作后,性能也不见好转. 现象非常诡异:CPU.内存.网络.磁盘使用率均有剩余,而且压力也是足够的.即使施加更大压力,吞吐量也不见好转. 于是监控了一下Java进程状态,发现几乎所有进程都处在 状态:BLOCKED 在 [email protected] 上,拥有者: http-0.0.0.0-8080-2010 阻塞总数:188,661 等待总数: 2,699 堆栈追踪: org.apache

org.apache.log4j.Logger 详解

org.apache.log4j.Logger 详解 1. 概述 1.1. 背景    在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息.   最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类 来封装此类操作,而不是让一系列的打印语句充斥了代码的主体.

Apache Log4j配置说明

本文详细介绍Log4j的所有配置属性. 1.Log4j简介 Log4j是Apache的一个开源项目,它允许开发者以任意间隔输出日志信息.Log4j主要由三大类组件构成: 1)Logger-负责输出日志信息,并能够对日志信息进行分类筛选,即决定哪些日志信息应该被输出,哪些该被忽略.Loggers组件输出日志信息时分为5个级别:DEBUG.INFO.WARN.ERROR.FATAL.这五个级别的顺序是:DEBUG<INFO<WARN<ERROR<FATAL.如果设置某个Logger组件

Maven项目java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错

本文转载自:http://www.javaweb1024.com/info/894.jspx maven管理的项目,里面已经引入了log4j的包 maven引入如下: <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> <scope>compile</scope>

org.apache.log4j.Logger用法

在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息.最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类 来封装此类操作,而不是让一系列的打印语句充斥了代码的主体.  (一)Log4j简介 Log4j 是 Apache 的一个开放源代码项目,通过使用 Log