- 浏览: 26728 次
- 性别:
- 来自: 杭州
最新评论
Log4j除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句。使用log4j可以很好的处理类似情况。
log4j使用方法
1.定义配置文件
Log4j的初始化,通常使用配置文件灵活配置log日志的输出方式(输出优先级、输出目的地、输出格式)。Log4j支持两种配置文件格式,一种是XML 格式的文件log4j.xml,一种是Java特性文件log4j.properties(键=值)。
需把log4j.jar和Log4j.properties(或者log4j.xml)放入classpath,log4j默认会在classpath中寻找log4j的配置文件。
可指定配置文件位置如:
或在程序中指定
2.组成部分
Log4j中有三个主要的组件,它们分别是Logger、Appender和Layout.
(1)logger指定log的名字,打印级别和采用哪种或者哪几种Appender。
(2)Appender用来指明log信息打印到什么地方(如控制台,文件等).
(3)Layout的作用是控制Log信息的输出格式.
2.1 配置Logger层级
Logger的名称是区分大小写的,依据名称可以确定其层次结构(即父子关系),规则如下:
(1)如果Logger A的名称后跟一个点(.)是Logger B的名称的前缀就认为Logger A是Logger B的祖先。
(2)如果在Logger A和Logger B之间,Logger B没有任何其它的祖先就认为Logger A是Logger B的父亲。
在Logger的层次结构的最顶层是rootLogger,它会永远存在,而且不能通过名字取到。 即所有的logger都是继承于rootLogger,如果某个logger没有被分配level,那么它将从一个被分配了级别的最接近它的父logger那里继承level。因此在定义日志的时候通常会给rootLogger赋予一个level.
2.2 配置LoggerAppender
appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。
2.3 配置level
level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
Logger选择日志记录请求(log request)的规则:
假设Logger M具有q级的Level,这个Level可能是设置的也可能是继承到的。
如果向Logger M发出一个Level为p的日志记录请求,那么只有满足p>=q时这个日志记录请求才会被处理。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
另一种说法:
当某个logger的logging request(即printing method(error(),info()..))的级别高于或者等于该logger的级别(即在log4j.properties或者 log4j.xml中定义)的时候,该logging request就为enable. 一旦该logger的logging request为enable,那么该logging request将总会打印到该logger所有的appender中包括它的所有父logger的appender。(而不会管父logger的级别如何)。除非该logger的父logger的additivity设置为false,默认的情况下为true。
某个logger的additivity设置为false,表示log只打印到本log的appender中,而不再打印到其父logger的appender。
例如:
Loger x.y是Logger x.y.z的祖先,因为x.y.是x.y.z的前缀,这符合规则的前一条。另外在Logger x.y和Logger x.y.z之间,Logger x.y.z没有其它的祖先,因此Logger x.y是Logger x.y.z的父亲,这符合规则的后一条。
我们还可以看到每一个Logger都有一个Level,根据该Level的值Logger决定是否处理对应的日志请求。
如果Logger C没有被设置Level,那么它将沿着它的层次结构向上查找,如果找到就继承并结束,否则会一直查找到root logger结束。因为log4j在设计时保证root logger会被设置一个默认的Level,所以任何logger都可以继承到Level。
补充:Log4J的使用步骤:
1. 得到记录器:
Java代码
2. 读取配置文件:
Java代码
3. 插入记录信息(格式化日志信息):
Java代码
log4j使用方法
1.定义配置文件
Log4j的初始化,通常使用配置文件灵活配置log日志的输出方式(输出优先级、输出目的地、输出格式)。Log4j支持两种配置文件格式,一种是XML 格式的文件log4j.xml,一种是Java特性文件log4j.properties(键=值)。
需把log4j.jar和Log4j.properties(或者log4j.xml)放入classpath,log4j默认会在classpath中寻找log4j的配置文件。
可指定配置文件位置如:
set JAVA_OPTS=%JAVA_OPTS% -Dlog4j.configuration=
或在程序中指定
log4j.xml --PropertyConfigurator.configure((DOMConfigurator.configure()). Log4j.properties --PropertyConfigurator.configure("String path");
2.组成部分
Log4j中有三个主要的组件,它们分别是Logger、Appender和Layout.
(1)logger指定log的名字,打印级别和采用哪种或者哪几种Appender。
(2)Appender用来指明log信息打印到什么地方(如控制台,文件等).
(3)Layout的作用是控制Log信息的输出格式.
2.1 配置Logger层级
log4j.rootLogger = [ level ] , appenderName, appenderName, …
Logger的名称是区分大小写的,依据名称可以确定其层次结构(即父子关系),规则如下:
(1)如果Logger A的名称后跟一个点(.)是Logger B的名称的前缀就认为Logger A是Logger B的祖先。
(2)如果在Logger A和Logger B之间,Logger B没有任何其它的祖先就认为Logger A是Logger B的父亲。
在Logger的层次结构的最顶层是rootLogger,它会永远存在,而且不能通过名字取到。 即所有的logger都是继承于rootLogger,如果某个logger没有被分配level,那么它将从一个被分配了级别的最接近它的父logger那里继承level。因此在定义日志的时候通常会给rootLogger赋予一个level.
2.2 配置LoggerAppender
appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。
2.3 配置level
level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
Logger选择日志记录请求(log request)的规则:
假设Logger M具有q级的Level,这个Level可能是设置的也可能是继承到的。
如果向Logger M发出一个Level为p的日志记录请求,那么只有满足p>=q时这个日志记录请求才会被处理。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
另一种说法:
当某个logger的logging request(即printing method(error(),info()..))的级别高于或者等于该logger的级别(即在log4j.properties或者 log4j.xml中定义)的时候,该logging request就为enable. 一旦该logger的logging request为enable,那么该logging request将总会打印到该logger所有的appender中包括它的所有父logger的appender。(而不会管父logger的级别如何)。除非该logger的父logger的additivity设置为false,默认的情况下为true。
某个logger的additivity设置为false,表示log只打印到本log的appender中,而不再打印到其父logger的appender。
例如:
Loger x.y是Logger x.y.z的祖先,因为x.y.是x.y.z的前缀,这符合规则的前一条。另外在Logger x.y和Logger x.y.z之间,Logger x.y.z没有其它的祖先,因此Logger x.y是Logger x.y.z的父亲,这符合规则的后一条。
我们还可以看到每一个Logger都有一个Level,根据该Level的值Logger决定是否处理对应的日志请求。
如果Logger C没有被设置Level,那么它将沿着它的层次结构向上查找,如果找到就继承并结束,否则会一直查找到root logger结束。因为log4j在设计时保证root logger会被设置一个默认的Level,所以任何logger都可以继承到Level。
补充:Log4J的使用步骤:
1. 得到记录器:
Java代码
public staitc Logger getLogger(String name); public static Logger getLogger(Class clazz);
2. 读取配置文件:
Java代码
BasicConfigurator.configure();//快速使用Log4J缺省的环境 PropertyConfigurator.configure(String configFileName);//读取Java属性文件编写的配置文件 DOMConfigurator.configure(String fileName);//读取XML格式的配置文件
3. 插入记录信息(格式化日志信息):
Java代码
Logger.debug(Object message); Logger.info(Object message); Logger.warn(Object message); Logger.error(Object message);
发表评论
-
spring bean初始化
2015-05-20 17:51 4841.配置文件中每一个<bean>解析成一个Bean ... -
java 基本类型存储解析
2012-07-11 12:53 995byte b=-128; byte b=127; 都是可以编 ... -
nio
2012-01-31 16:57 809原来的I/O包和NIO处理数据最大的不同之处在于数据打 ... -
null
2012-01-30 17:34 559null可以转换成任何类的对象 -
java 线程的几个方法
2012-01-17 15:39 997Thread的方法 sleep() 1. sleep ()函 ... -
java 线程
2012-01-17 14:37 737现在的系统的都是分时系统,达到多进程的效果。cpu只是将时间 ... -
java 访问修饰符
2012-01-12 10:34 728对于类成员(字段和方法)的访问权限来说, public:所有类 ... -
设计模式初学
2012-01-10 17:39 687代理模式只是原来对象的一个替身(原来对象约束了代理的行为) ... -
jndi学习
2012-05-26 19:10 721jndi--命名和目录服务api 用于查找远程的资源,例如 ... -
java 泛型学习--类型擦除
2011-12-26 17:58 1727类型擦除(type erasure)。 Java中的泛型基本上 ... -
java 泛型学习--泛型方法
2011-12-26 17:30 946通过在类的定义中添加 ... -
java 泛型学习--类型通配符
2011-12-26 17:17 890假设您具有该方法: void printList(Lis ... -
java 泛型学习
2011-12-26 16:42 770除了异常类型、枚举或匿名内部类以外,任何类都可以具有类型参数。 ... -
servlet path学习
2011-12-22 15:40 946servlet path就是取从context path后开始 ... -
java 可变长参数
2011-12-15 15:15 336[size=x-large] java 的可变长参数 例如: ... -
java垃圾回收
2011-12-12 19:16 639Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现 ... -
velocity性能优化
2011-12-09 11:16 9461.char to byte 字符转变字节,流用字节去输出 ... -
velocity 宏
2011-12-12 19:16 11231.方法当作参数化 当使用引用作为参数传递给Velocity ... -
ThreadLocal
2011-11-10 14:48 684每个线程有一个ThreadLocalMap对象,这是一个Map ... -
struts2 Codebehind Plugin
2011-11-08 15:32 3281.为未定义的action指定mapping When no ...
相关推荐
标题“log4j学习”指出我们将探讨的是日志处理框架Log4j,这是一个广泛使用的Java日志工具,主要用于记录应用程序运行过程中的各种事件和异常信息。描述部分虽然为空,但通常在学习Log4j时,我们会涉及它的基本概念...
**log4j学习源码教程** 在Java编程中,日志记录是不可或缺的一部分,它能够帮助开发者追踪程序运行状态,定位错误和异常,为调试和性能优化提供关键信息。Log4j是Apache组织开发的一个开源日志框架,因其强大的功能...
**Log4j学习笔记** Log4j是一款广泛应用于Java编程中的日志记录工具,由Apache软件基金会开发。它提供了一种灵活且强大的机制来记录应用的运行情况,这对于调试、性能分析、问题追踪以及系统监控至关重要。这篇学习...
**Log4j学习笔记** Log4j是一款广泛应用于Java编程中的日志记录框架,由Apache软件基金会开发。它提供了一套灵活的日志记录系统,帮助开发者在开发过程中追踪应用程序的行为,便于调试、性能分析和问题排查。Log4j...
《Log4j学习指南》 Log4j是Java平台上的一个开源日志框架,它为开发者提供了灵活且强大的日志记录功能。这个压缩包包含了关于Log4j的全面学习资料,包括文档、API手册和配置指南,对于深入理解和使用Log4j来说,是...
### log4J学习笔记 #### 一、Apache Commons Logging与log4j及JDK Logger的关系 **Apache Commons Logging** 的设计初衷是为了提供一个简洁统一的日志接口,它并不直接实现日志功能,而是通过桥接的方式支持多种...
### Log4j 学习笔记知识点详解 #### 一、Log4j 概述与架构 **Log4j** 是 **Apache** 组织提供的一个开源日志框架,旨在简化应用开发中的日志记录工作。它能够灵活地记录程序运行时的信息,并允许用户自定义日志的...
"log4j 学习笔记" log4j 是一个流行的 Java 日志记录工具, logger 是记录日志信息的基本单元。在 log4j 中, logger 的级别越低,记录的日志信息越详细。 Logger 的级别从低到高依次是:ALL 。 log4j 的日志记录...
### Log4J学习笔记 #### 一、Log4J配置文件的学习 在深入理解Log4J之前,我们先从配置文件入手。Log4J支持多种配置文件格式,其中包括XML和Java特性文件(键=值)。这里我们将重点介绍如何使用Java特性文件作为...
### Log4j学习笔记知识点详解 #### 一、Log4j概述 - **定义与功能**:Log4j是Apache组织推出的一个开源日志框架,主要用于控制和管理应用程序中的日志记录过程。它允许开发者非常灵活地配置日志输出的目的地(如...
【Log4j学习文档】 Log4j是一款广泛应用于Java开发中的开源日志记录工具,源自IBM Zurich实验室,现已成为Jakarta项目的一部分。它的主要优点在于灵活性、模块化和易用性,开发者可以根据需要以不同粒度输出日志...
### log4j学习入门知识点详解 #### 一、Log4j简介 Log4j是一款开源的日志框架,由Apache组织提供。它可以帮助开发者轻松地在应用程序中添加日志功能,从而便于追踪应用程序的状态和行为。Log4j的主要优势在于其...
分别有disruptor-3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF...
### Log4j学习笔记 #### 一、Log4j简介 Log4j是Apache的一个开源项目,用于实现日志功能的Java库。它允许开发者控制日志信息的生成、格式和输出目标。Log4j的强大之处在于它的灵活性和扩展性,能够适应不同层次的...
在"Log4j 学习资料 API+ 源文件+例子"这个资源包中,包含了 Log4j 的 API 文档、源代码和实例,非常适合学习和深入理解 Log4j。 1. **API 文档**:Log4j 的 API 文档是了解其功能和用法的关键。它详细列出了各种类...
在学习Log4j的过程中,阅读“log4j学习笔记及写入数据库配置”这份资料将有助于深入理解Log4j的使用,包括具体的配置步骤、常见问题以及最佳实践。通过实践,你可以更好地掌握如何利用Log4j来提升你的应用程序的可...
Log4j2 配置模板学习笔记 Log4j2 是 Java 语言中一种流行的日志记录工具,它提供了灵活的日志记录管理功能。下面我们将学习 Log4j2 配置模板的使用和配置。 引入 Log4j2 依赖 在使用 Log4j2 之前,需要在 Maven ...