全面介绍log4J
log4j 标准

log4j 标准
Log4j是一个Java日志框架,它提供了一种灵活的方式来记录应用程序的
日志信息。
以下是Log4j的标准:
1. 配置文件:Log4j使用一个配置文件来定义日志记录的行为。
这个配置文件可以是XML、properties或YAML格式。
在配置文件中,可以指定日志级别、输出目的地(例如控制台、文件、数据库等)以及其他相关设置。
2. Logger对象:Log4j使用Logger对象来记录日志。
每个Logger对象
都有一个名称,可以通过继承关系组织成层次结构。
Logger对象可以记录
不同级别的日志信息,包括DEBUG、INFO、WARN、ERROR和FATAL。
3. Appender对象:Appender对象定义了日志信息的输出目的地。
例如,可以将日志信息输出到控制台、文件、数据库或电子邮件等。
每个Logger
对象可以关联多个Appender对象,以便将日志信息发送到不同的目的地。
4. 布局和格式化程序:Log4j使用布局或格式化程序来控制日志信息的输出格式。
布局或格式化程序可以将Logger对象记录的日志信息转换成所需的格式,并将其输出到指定的目的地。
5. 日志级别:Log4j使用不同的日志级别来控制日志信息的输出。
这些级别从低到高分别是DEBUG、INFO、WARN、ERROR和FATAL。
通过设置适当的级别,可以过滤掉不需要的日志信息,以便更好地控制应用程序的性能和输出。
总之,Log4j提供了一种灵活、可配置和可扩展的日志记录机制,适用于各种规模的应用程序开发。
log4j 原理

log4j 原理log4j 是一个优秀的日志框架,它能够帮助开发人员在应用程序中方便地记录日志信息。
在实际的软件开发中,日志记录是非常重要的,它可以帮助开发人员在出现问题时快速定位并解决 bug,同时也可以帮助运维人员监控系统运行状态。
而log4j 作为一个成熟且广泛应用的日志框架,其原理和实现机制就显得尤为重要。
首先,我们来看一下 log4j 的工作原理。
log4j 的核心概念是日志级别、日志输出目的地和日志格式。
日志级别包括 DEBUG、INFO、WARN、ERROR、FATAL 等,开发人员可以根据不同的情况选择合适的日志级别进行记录。
日志输出目的地可以是控制台、文件、数据库等,开发人员可以根据实际需求配置不同的输出目的地。
而日志格式则决定了日志信息的展示形式,开发人员可以自定义日志格式,包括时间、日志级别、类名、方法名等信息。
log4j 的工作原理主要分为三个步骤,选择日志器、设置日志级别、指定日志信息输出目的地。
首先,开发人员需要选择合适的日志器,通常情况下我们会选择org.apache.log4j.Logger 作为日志器。
然后,需要设置日志级别,开发人员可以通过调用日志器的 setLevel 方法来设置日志级别。
最后,需要指定日志信息的输出目的地,开发人员可以通过配置 log4j.properties 文件来指定输出目的地。
log4j 的实现机制主要依靠两个核心组件,日志器和日志Appender。
日志器负责收集和管理日志信息,开发人员可以通过获取日志器实例来记录日志。
而日志Appender则负责将日志信息输出到指定的目的地,log4j 提供了多种不同的Appender,包括 ConsoleAppender、FileAppender、JDBCAppender 等,开发人员可以根据实际需求选择合适的 Appender。
除了核心组件外,log4j 还提供了过滤器和布局器两个重要的功能组件。
log4j的几种用法

log4j的几种用法
Log4j是一个流行的Java日志框架,它提供了多种用法来帮助开发人员记录和管理应用程序的日志信息。
以下是几种常见的
Log4j用法:
1. 配置日志级别,Log4j允许开发人员根据不同的需求配置日志级别,包括DEBUG、INFO、WARN、ERROR等级别。
通过配置,可以控制哪些日志消息会被记录下来,从而方便开发人员调试和排查问题。
2. 输出日志到不同的目的地,Log4j支持将日志消息输出到不同的目的地,比如控制台、文件、数据库等。
开发人员可以根据需求配置日志输出的目的地,以便对日志进行集中管理和分析。
3. 日志格式化,Log4j允许开发人员自定义日志消息的格式,包括时间戳、日志级别、类名、方法名等信息。
通过格式化,可以使日志消息更易读,方便开发人员理解和分析。
4. 日志过滤,Log4j提供了过滤器功能,可以根据特定的条件过滤掉不需要记录的日志消息,从而减少日志的冗余和提高日志记
录的效率。
5. 动态配置,Log4j支持动态配置,开发人员可以在应用程序运行时动态修改日志配置,比如调整日志级别、更改日志输出目的地等,而不需要重启应用程序。
总之,Log4j提供了丰富的功能和灵活的配置选项,可以帮助开发人员高效地记录和管理应用程序的日志信息。
通过合理地使用Log4j,开发人员可以更好地了解应用程序的运行状况,及时发现和解决问题。
log4j讲解

2 、log4j.appender.stdout=org.apache.log4j.ConsoleAppender
此句为定义名为stdout的输出端是哪种类型,可 以是 org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每 天产生一个日志文件), org.apache.log4j.RollingFileAppender(文件大 小到达指定尺寸的时候产生一个新的文件) org.apache.log4j.WriterAppender(将日志信息 以流格式发送到任意指定的地方)
yout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n
如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern, 打印参数如下: %m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目, 通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” %c 输出所属的类目,通常就是所在类的全名 %d输出日志时间点的日期或 时间,默认格式为ISO8601,也可以在其后指定格式 {yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的 行数。 [QC]是log信息的开头,可以为任意字符,一般为项目简称。 输出的信息 : [TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'
log4j的原理

log4j的原理Log4j是一个流行的Java日志框架,用于在Java应用程序中记录有意义的信息,从而提高了代码的可维护性和可扩展性。
它是由Apache软件基金会开发和维护的,目前最新版本是Log4j 2。
在使用Log4j时,我们需要使用Log4j API来记录日志,API中的代码会自动调用Log4j的核心引擎,该引擎负责处理日志请求。
为了提高性能,Log4j采用了异步处理技术,即日志请求不会立即写入日志文件,而是由一个专门的线程异步地将请求写入文件。
Log4j的核心组件包括Logger、Appender和Layout。
Logger是日志的核心组件,使用Logger类来记录日志,此外还能够控制日志的级别、过滤器等。
Appender用于将日志信息输出到不同的目标,如文件、控制台、数据库等。
Layout则用于指定日志的格式和输出目标。
Log4j还提供了一些其他的功能,如配置文件、过滤器和标记。
最常见的配置文件是log4j.properties和log4j.某ml,它们可以用来配置Logger、Appender、Layout等组件的属性和行为。
Filter可以用来过滤掉某些不符合条件的日志信息。
Marker用于标记某些重要的日志信息,可以用于分类和分析日志数据。
总体来说,Log4j的原理可以简单归纳为以下几点:1. Log4j API用于记录日志,同时调用Log4j的核心引擎处理日志请求;2.核心引擎采用异步处理技术,将日志请求异步地写入日志文件;3. 核心组件包括Logger、Appender和Layout,分别用于记录日志、输出日志和格式化日志信息;4.配置文件、过滤器和标记可以用于配置和控制日志的行为和输出。
Log4j能够帮助我们记录日志信息,有效地提高了代码的可维护性和可扩展性。
同时,Log4j还提供了丰富的配置和扩展功能,可以满足不同的应用需求。
Log4j基本概念

Log4j基本概念Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输出地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
那么是不是这样,我们就可以完全使用log4j,而不需要扩展定制了呢?1、基本介绍Log4jLog4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输出地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
log4j的好处在于:1) 通过修改配置文件,就可以决定log信息的目的地——控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等2) 通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。
在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(......)等)。
3) 使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。
那么是不是这样,我们就可以完全使用log4j,而不需要扩展定制了呢?当然不是这样,因为每个项目的需求不一样,而且log4j本身也提供了灵活的扩展机制。
下面我们说说log4j常用的扩展方式。
2、扩展点Log4j2.1 自己的日志系统每一个项目都想有自己的一套日志系统,而不受其他项目、jar包的影响。
所以日志系统需要独立存在,且有相应的自己单独的配置文件而不受影响。
我们先来看看common-logging和log4j的默认工作流程:common-logging当我们用Log log = LogFactory.getLog(“loggerName”);取得log时,让我们看看他是如何工作的?1)、首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类2)、如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量mons.logging.Log,找到则使用其定义的Log实现类3)、查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类4)、使用JDK自身的日志实现类(JDK1.4以后才有日志实现类)5)、使用commons-logging自己提供的一个简单的日志实现类SimpleLogcommons-logging总是能找到一个日志实现类,并且尽可能找到一个"最合适"的日志实现类..可以不需要配置文件.自动判断有没有Log4j包,有则自动使用之.最悲观的情况下也总能保证提供一个日志实现(SimpleLog)log4j当我们用Logger.getLogger(loggerName);取得log时,让我们看看他是如何工作的?1)、查找是否已定义系统环境变量log4j.configuration,找到则使用其定义的Log配置文件;否则搜索log4j.xml,如果存在,则执行4)2)、如果不存在,搜索log4j.properties3)、如果不存在,则使用程序默认的日志仓库4)、如果存在,注册配置日志仓库5)、去日志仓库中查询,如果不存在,则new一个从上面我们可以看到无论是common-logging还是log4j,以及其他的日志开源系统都会提供一套默认的遍历规则,去搜索他的log记录实例。
log4j的作用

log4j的作用log4j的作用一、什么是log4jLog4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
二、日志简介日志指在程序中插入语句以提供调试信息。
使用日志能够监视程序的执行。
例如,用户利用日志可以获得关于应用程序故障的完整信息。
用户可以将调试语句(如System.out.println)插入到程序中以获得详细的调试信息。
三、项目中为什么要用log4j大家在编程时经常不可避免地要使用到一些日志操作,比如开发阶段的调试信息、运行时的日志记录及审计。
调查显示,日志代码占代码总量的4%。
通常大家可以简单地使用System.out.println()语句输出日志信息,但是往往会有一些判断,比如:if (someCondition){System.out.println("some information.");}这些判断造成正常的程序逻辑中混杂了大量的输出语句。
而在开发阶段写下的这些判断仅为了调试的语句,在开发完成时需要查找并移除。
部署运行后,尤其是在一些企业应用系统中,还经常需要进一步调试,这时就遇到了更大的麻烦。
所以,我们需要一套完备的、灵活的、可配置的日志工具log4J就是优秀的选择。
四、log4j组件Log4j 由logger、appender 和layout 三个组件组成。
可以通过同名的Java 类访问Log4j 的这三个组件。
Logger - 在执行应用程序时,接收日志语句生成的日志请求。
它是一种重要的日志处理组件,可以通过log4j API 的logger 类对其进行访问。
log4j底层原理

log4j底层原理log4j是一个Java日志管理工具,它的底层原理主要包括以下几个方面:1. 日志级别:log4j定义了多个日志级别,从低到高分别是TRACE、DEBUG、INFO、WARN、ERROR和FATAL。
使用者可以根据需要选择合适的日志级别进行日志输出。
2. 日志输出目标:log4j支持将日志输出到不同的目标,例如控制台、文件、数据库等。
这些目标称为appender。
使用者可以根据需要配置不同的appender来决定将日志输出到哪个目标。
3. 日志格式:log4j允许使用者自定义日志的格式。
使用者可以根据需要配置不同的layout来定义日志的格式,例如日期、时间、日志级别、类名、方法名等。
4. 日志过滤器:log4j提供了过滤器功能,可以根据一定的规则来过滤不需要输出的日志。
使用者可以配置不同的过滤器来决定哪些日志需要输出,哪些日志需要过滤掉。
5. 日志记录器:log4j使用Logger作为日志记录器,每个类都可以创建一个Logger对象来输出日志。
Logger可以根据配置文件中的设置,决定是否输出日志、输出到哪个目标、使用什么样的日志格式等。
6. 配置文件:log4j使用一个XML或者properties文件来配置各种参数,包括日志级别、输出目标、日志格式等。
使用者通过修改配置文件来对log4j进行配置。
总结起来,log4j的底层原理可以概括为:根据日志级别和配置文件中的设置,通过Logger对象将日志输出到指定的目标,并通过配置的日志格式对日志进行格式化。
另外,log4j还提供了过滤器功能,可以根据一定的规则来过滤不需要输出的日志。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 . Log4j日志管理系统简单使用说明通常,我们都提供一个名为log4j.properties的文件,在第一次调用到Log4J时,Log4J 会在类路径(../web-inf/class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可)中定位这个文件,并读入这个文件完成的配置。
这个配置文件告诉Log4J以什么样的格式、把什么样的信息、输出到什么地方。
Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。
综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
下面对三个组件分别进行说明:1)、LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。
这五个级别是有顺序的,DEBUG Log4j有一个规则:假设Loggers级别为P,如果在Loggers 中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。
假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。
Java程序举例来说://建立Logger的一个实例,命名为“com.foo”Logger logger = Logger.getLogger("com.foo"); //"com.foo"是实例进行命名,也可以任意//设置logger的级别。
通常不在程序中设置logger的级别。
一般在配置文件中设置。
logger.setLevel();Logger barlogger = Logger.getLogger("com.foo.Bar");//下面这个请求可用,因为WARN >= INFOlogger.warn("Low fuel level.");//下面这个请求不可用,因为DEBUG = INFO("Located nearest gas station.");//下面这个请求不可用,因为DEBUG Log4j其中的一个小小的地方,Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。
其语法表示为:org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)配置时使用方式为:log4j.appender.appenderName = .of.appender.classlog4j.appender.appenderName.option1 = value1…log4j.appender.appenderName.option = valueN这样就为日志的输出提供了相当大的便利。
3)、Layouts有时用户希望根据自己的喜好格式化自己的日志输出。
Log4j可以在Appenders的后面附加Layouts来完成这个功能。
Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。
其语法表示为:org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)配置时使用方式为:yout =yout.classyout.option1 = value1…yout.option = valueN2 . Log4j的配置以上是从原理方面说明Log4j的使用方法,在具体Java编程使用Log4j可以参照以下示例:1)、建立Logger实例:语法表示:public static Logger getLogger( String name)实际使用:static Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ()) ;2)、读取配置文件:获得了Logger的实例之后,接下来将配置Log4j使用环境:语法表示:BasicConfigurator.configure():自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure(String filename):读取XML形式的配置文件。
实际使用:PropertyConfigurator.configure("ServerWithLog4j.properties");3)、插入日志信息完成了以上连个步骤以后,下面就可以按日志的不同级别插入到你要记录日志的任何地方了。
语法表示:Logger.debug(Object message);//调试信息(Object message);//一般信息Logger.warn(Object message);//警告信息Logger.error(Object message);//错误信息Logger.fatal(Object message);//致命错误信息实际使用:("ServerSocket before accept: " + server);3. 配置过程Log4j真正在系统中运行事先还要对配置文件进行定义。
定义步骤就是对Logger、Appender及Layout的分别使用。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是java properties (key=value)【Java特性文件(键=值)】。
下面我们介绍使用Java特性文件做为配置文件的方法具体如下:1)、配置根Logger,其语法为:log4j.rootLogger = [ level ] , appenderName1, appenderName2, …level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName:就是指定日志信息输出到哪个地方。
您可以同时指定多个输出目的地。
例如:log4j.rootLogger=info,A1,B2,C32)、配置日志信息输出目的地,其语法为:log4j.appender.appenderName = .of.appender.class //".of.appender.class" 可以指定下面五个目的地中的一个:(1).org.apache.log4j.ConsoleAppender(控制台)(2).org.apache.log4j.FileAppender(文件)(3).org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)(4).org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)(5).org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)(1).ConsoleAppender选项Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台(2).FileAppender 选项Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
(3).DailyRollingFileAppender 选项Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。
当然也可以指定按月、周、天、时和分。
即对应的格式如下:1)'.'yyyy-MM: 每月2)'.'yyyy-ww: 每周3)'.'yyyy-MM-dd: 每天4)'.'yyyy-MM-dd-a: 每天两次5)'.'yyyy-MM-dd-HH: 每小时6)'.'yyyy-MM-dd-HH-mm: 每分钟(4).RollingFileAppender 选项Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。