Log4j详解

来源:互联网 发布:主机互联系统源码 编辑:程序博客网 时间:2024/06/03 18:56

一、介绍

Log4j是Apache基金会下的一个开源的日志组件。其强大的日志功能使得其在Java项目中应用十分广泛,其官方网站为:http://logging.apache.org/log4j/1.2/

二、Log4j详解

1、Log4j组成

Log4j主要有三个组件组成:日志等级组件(logger)、日志输出组件(appender)和日志格式组件(layout)。

(1)日志等级组件Logger

该组件是Log4j的核心组件,包含了Log4j组件的核心内容:日志等级以及等级继承关系。日志等级中记载等级优先级:OFF>FALEL>ERROR>WARNING>INFO>DEBUG>ALL。

等级继承关系:使用的是最近的父类的等级。官网通过给出着四个例子讲述了日志等级的继承关系。

(2)日志输出器Appender

该组件定义了输出器将日志输入的目标、使用的输出类等多种信息,通过该类的属性的赋值,将经过该输出器的数据输出到配置信息规定的位置。

(3)日志格式组件Layout

该组件也是输出器的一个属性,不过确实单独的组件存在,该组件实现输出时的信息格式。


三、Log4j配置文件

1、配置文件组成

### set log levels ###log4j.rootLogger = debug ,  stdout ,  log### stdout输出器输出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n### log输出器输出到日志文件###log4j.appender.log = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.log.File = logs/log.loglog4j.appender.log.Append = truelog4j.appender.log.Threshold = DEBUG ## 输出DEBUG级别以上的日志log4j.appender.log.layout = org.apache.log4j.PatternLayoutlog4j.appender.log.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

(1)log4j.rootLogger=[level],appenderName1,appenderName2

该属性有多个参数,第一个[level]参数定义初始化Log4j系统时所允许的最低级别。后面的参数则定义了Log4j系统初始化了几个日志输出器。上例则定义该Log4j系统会获取Debug以上级别(包括debug)的日志信息。后两个参数则表示初始化两个输入器stdout输出器和log输出器。

(2)输出器配置

上述例子中剩余的两段属性分别是对stdout、log输出器的属性配置。分别对输出器使用的类、输出的目标位置、输出的位置和出书格式的定义。


2、配置文件属性介绍

(1)log4j.rootLogger=[level],appenderName1,appenderName2

表示该Log4j系统初始化日志信息接收的级别和生成输出器的名称

(2)log4j.appender.appenderName=appendClass

该属性定义了输出器所使用的输出器类类,一共有五种:

org.apache.log4j.ConsoleAppender(控制台),  org.apache.log4j.FileAppender(文件),  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

这五种类分别代表该输出器将日志信息进行输出的方式。

(3)log4j.appender.appenderName.layout=layoutClass

该属性定义了文件以什么样的格式进行数据输出类,该类一共有4中

org.apache.log4j.HTMLLayout(以HTML表格形式布局),  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

(4)控制台配置属性

log4j.appender.stdout.Target=System.out  //如果属性没有定义,则默认使用System.out

log4j.appender.stdout.Threshold=Debug(过滤器,大于该大于等于该等级的信息才可悲控制台进行输出)

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n(输出内容的格式)

(5)日志文件配置属性

log4j.appender.log.File=filePath(日志文件的位置)

log4j.appender.log.ImmediateFlush=true(输出器的内容是否立刻进行写入,默认为true)

log4j.appender.log.Append=true(继续想日志文件中写)

log4j.appender.log.Threshold=debug(日志文件过滤器,大于等于该等级的被写入到日志文件中)

log4j.appender.log.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n(在日志文件中显示的内容格式)


3、输出格式介绍

%p : 输出日志优先级,即DEBUG、INFO、WARN、ERROR等信息

%d :显示当前时间,默认为IOS80601,可在%d{ yyyy MM dd hh:mm:ss}进行显示的定义

%c :显示该信息所属的类

%t  :显示所在线程的名称

%F :显示日志文件写入的文件内容

%L :显示错误行号

%r :显示从应用启动后,到日志进行显示的毫秒数

%m: 输出代码中指定的消息,产生的日志具体信息

%n : 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行


三、使用实例

1、在Java项目中的使用

(1)下载log4j的jar包:log4j-1.2.17.jar

(2)将该包引入到Java项目中,并加入到classpath中

(3)在项目根目录下创建配置文件log4j.properties文件

 ### \u8BBE\u7F6E###log4j.rootLogger = debug,stdout,Log### \u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n### \u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ###log4j.appender.Log = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.Log.File = E://logs/log.loglog4j.appender.Log.Append = truelog4j.appender.Log.Threshold = DEBUG log4j.appender.Log.layout = org.apache.log4j.PatternLayoutlog4j.appender.Log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

(4)创建试验类Test.java

package log4j;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class Test {private static Logger logger=Logger.getLogger(Test.class);public static void main(String[] args){PropertyConfigurator.configure("log4j.properties");logger.debug("this is a debug");logger.info("this is a info");logger.error("this is a error");}}
(5)执行结果

控制台的输出结果:



日志文件的输出结果



2、在Java web项目中的使用(不适用任何框架,该处使用listener进行Log4j初始化)

(1)将log4j的jar的jar包加载到项目的WEB-INF/lib/文件夹下,并将文件引入到classpath中

(2)在WEB-INF文件下创建log4j的配置文件log4j.properties

#the propertieslog4j.rootLogger = DEBUG,stdout,Log#the stdout propertieslog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n#the log file propertylog4j.appender.Log=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.Log.File=log/GeowayMap.loglog4j.appender.Log.Append=truelog4j.appender.Log.Threshold=DEBUGlog4j.appender.Log.layout=org.apache.log4j.PatternLayoutlog4j.appender.Log.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
(3)修改web.xml文件

 <listener> <description>start the log4j</description>  <listener-class>com.log4j.Log4jInit</listener-class>  </listener>
生成一个监听器,每当网站启动时,该监听器被启动,并初始化该log4j文件

(4)创建该监听器文件

package com.log4j;import java.io.FileInputStream;import java.io.IOException;import java.util.Properties;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import sun.util.logging.resources.logging;public class Log4jInit implements ServletContextListener {private static Logger logger=Logger.getLogger("Log4jInit.class");@Overridepublic void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stublogger.info("log4jinit class destroyed");}@Overridepublic void contextInitialized(ServletContextEvent sce) {// TODO Auto-generated method stub//得到servletContext对象的方法ServletContext sc = sce.getServletContext();//指明文件的相对路径就能够得到文件的绝对路径String path = sc.getRealPath("WEB-INF/log4j.properties");//启动服务器的时候加载日志的配置文件PropertyConfigurator.configure(path);logger.info("log4j Initialized");}}

四、总结

该处的Log4j内容总结的不算很全。下面两个链接是比较也比较详细的介绍了Log4j的情况

http://www.codeceo.com/article/log4j-usage.html

http://blog.csdn.net/azheng270/article/details/2173430/



0 0
原创粉丝点击