log4j java配置_基于java配置log4j日志详解

news/2025/2/26 7:12:29

1.Log4j

1.1了解Log4j

Log4j是Apache的一个开源项目,通过使用log4j,我们可以控制日志信息输送的目的地可以是控制台、文件、GUI组件,我们也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,我们能够更加细致的控制日志的生成过程。

1.2配置Log4j步骤(java项目)

在java程序中配置Log4j日志共分为4步:

1.第一步

加入log4j-1.2.8.jar(可以选择log4j的更高版本)到lib下。

如果使用maven项目,也可以选择在pom.xml中新增依赖:

log4j

log4j

1.2.17

2.第二步

在CLASSPATH下建立log4j.prope相应的修改其中属性,修改之前就必须知道这些都是干log4j.rootLogger=INFO,stdout,R

#setting

#Logger

log4j.rootLogger=debug,stdout

#appender

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Append = true

#过滤(不记录)INFO级别以下的消息

log4j.appender.stdout.Threshold = INFO

#layout

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

#conversion

log4j.appender.stdout.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n

消息级别:ALL

4.第四步

在要输出日志的类中加入相关语句:

定义属性:static Logger logger = Logger.getLogger(LogDemo.class); //LogDemo为相关的类

在相应的方法中:

if (logger.isDebugEnabled()){

logger.debug("System …..");

}

1.3配置说明

以下是配置文件log4j.properties的配置说明。

1、log4j.rootCategory=INFO, stdout , R

此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名。等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO、WARN、ERROR的log信息,而DEBUG信息不会被显示,具体讲解可参照第三部分定义配置文件中的logger。

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(将日志信息以流格式发送到任意指定的地方)

具体讲解可参照第三部分定义配置文件中的Appender。

3、log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

此句为定义名为stdout的输出端的layout是哪种类型,可以是

org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

具体讲解可参照第三部分定义配置文件中的Layout。

4、log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n

如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:

%m 输出代码中指定的消息;

%M 输出打印该条日志的方法名;

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;

%r 输出自应用启动到输出该log信息耗费的毫秒数;

%c 输出所属的类目,通常就是所在类的全名;

%t 输出产生该日志事件的线程名;

%n 输出一个回车换行符,Windows平台为"rn",Unix平台为"n";

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-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'

具体讲解可参照第三部分定义配置文件中的格式化日志信息。

5、log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

此句与第3行一样。定义名为R的输出端的类型为每天产生一个日志文件。

6、log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log

此句为定义名为R的输出端的文件名为D:\\Tomcat 5.5\\logs\\qc.log可以自行修改。

7、log4j.appender.R.layout=org.apache.log4j.PatternLayout

与第4行相同。

8、log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

与第5行相同。

9、log4j.logger.com. neusoft =DEBUG

指定com.neusoft包下的所有类的等级为DEBUG。

可以把com.neusoft改为自己项目所用的包名。

10、log4j.logger.com.opensymphony.oscache=ERROR

11、log4j.logger.net.sf.navigator=ERROR

这两句是把这两个包下出现的错误的等级设为ERROR,如果项目中没有配置EHCache,则不需要这两句。

12、log4j.logger.org.apache.commons=ERROR

13、log4j.logger.org.apache.struts=WARN

这两句是struts的包。

14、log4j.logger.org.displaytag=ERROR

这句是displaytag的包。(QC问题列表页面所用)

15、log4j.logger.org.springframework=DEBUG

此句为Spring的包。

16、log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN

17、log4j.logger.org.hibernate=DEBUG

此两句是hibernate的包。

以上这些包的设置可根据项目的实际情况而自行定制。

1.4配置文件详解

Log4j支持两种配置文件格式,一种是XML(标准通用标记语言下的一个应用)格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:

①、配置根Logger

Logger 负责处理日志记录的大部分操作。

其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志,OFF:关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。

②、配置日志信息输出目的地 Appender

Appender 负责控制日志记录操作的输出。

其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.optionN = valueN

这里的appenderName为在①里定义的,可任意起名。

其中,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),

org.apache.log4j.FileAppender(文件),

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender

定义一个名为stdout的输出目的地,ConsoleAppender为控制台。

③、配置日志信息的格式(布局)Layout

Layout 负责格式化Appender的输出。

其语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.optionN = valueN

其中,Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

1.5格式化日志

当log4j.applender.appendlerName=org.apache.log4j.PatternLayout时,那么表示想要自定义输出格式,因此需要设置log4j.appender.stdout.layout.ConversionPattern。

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m 输出代码中指定的消息;

%M 输出打印该条日志的方法名;

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;

%r 输出自应用启动到输出该log信息耗费的毫秒数;

%c 输出所属的类目,通常就是所在类的全名;

%t 输出产生该日志事件的线程名;

%n 输出一个回车换行符,Windows平台为"rn",Unix平台为"n";

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;

%l 输出日志事件的发生位置,及在代码中的行数。

1.6定义及获取不同层次的记录器

任何一个记录器的使用都有两个步骤:

1) 在配置文件中定义相应的记录器。

在配置文件中定义记录器的格式有两种

# 定义根记录器的格式为

log4j.rootLogger = [ level ], appendName1, appendName2, …appendNameN

# 定义一个非根记录器的格式为

log4j.logger.loggerName1 = [ level ], appendName1,…appendNameN

……

log4j.logger.loggerNameM = [ level ], appendName1, …appendNameN

我们可以定义任意个非根记录器。

2) 在代码中调用Logger类的取得记录器方法取得相应的记录器对象。

要取得根记录器对象可通过Logger.getRootLogger()函数,要取得非根记录器可通过Logger.getLogger()函数。

1.7基于java web项目配置log4j

到目前为止,这篇文章讲的都是如何在application中应用log4j,而Java现在的应用主流是J2EE和J2ME。现在,我们来看一下要如何在 J2EE开发中应用log4j。其实在Web application中应用log4j也很简单,与在application中应用log4j不同之处就是要在所有应用log4j的代码之前对log4j进行初始化。所以,我们在web application中就要把log4j的初始化工作独立出来,把它放在Servlet中。下面,我们看一个例子。

例5-a:

进行初始化的Servlet:importorg.apache.log4j.PropertyConfigurator;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/*** log4j.jar的初始化类,参考web.xml*/

public class Log4jInit extendsHttpServlet

{public voidinit()

{//通过web.xml来动态取得配置文件

String prefix= getServletContext().getRealPath("/");

String file= getInitParameter("log4j-init-file");//如果没有给出相应的配置文件,则不进行初始化

if(file != null)

{

PropertyConfigurator.configure(prefix+file); //(1)

}

}public voiddoGet(HttpServletRequest req, HttpServletResponse res)

{}

}

下面来看一下这个Servlet在web.xml中的定义。

例5-b:

log4j-init

TestLog4j.Log4jInit

log4j-init-file

sort.properties

1

因为log4j的初始化要在所有的log4j调用之前完成,所以在web.xml文件中,我们一定要把对应的Servlet定义的load-on-startup应设为1,以便在Web容器启动时即装入该Servlet。

完成了这两个步骤这后,我们就可以象在application开发中一样在web application任何地方应用log4j了。


http://www.niftyadmin.cn/n/711796.html

相关文章

SpringBoot——多环境配置文件、自定义配置文件的创建

文章目录: 1.多环境配置文件的创建 1.1 dev 1.2 product 1.3 ready 1.4 test 1.5 核心配置文件 1.6 控制器类 1.7 入口类 2.自定义配置文件的创建 2.1 Value 2.2 ConfigurationProperties 2.2.1 自定义配置文件 2.2.2 自定义一个类,获取自…

table的构成

tr 元素定义表格行,th 元素定义表头,td 元素定义表格单元格。 cellpadding规定单元格边沿与其内容之间的空白。 cellspacing规定单元格之间的空白。 caption定义表格的标题 tbody定义表格的主体 thead定义表格的的页眉 tfoot定义表格的的页脚 colspan是表…

自定义View-仿虎扑直播比赛界面的打赏按钮

作为一个资深篮球爱好者,我经常会用虎扑app看比赛直播,后来注意到文字直播界面右下角加了两个按钮,可以在直播过程中送虎扑币,为自己支持的球队加油,具体的效果如下图所示: 我个人觉得挺好玩的,…

java 组合框输入_java组合框赋值怎么实现?有哪些方式?

一个程序员最基本的要求和工作就是能够为各种数据库增删改查,这中间自然少不了赋值的过程,小伙伴们知道有哪些方式能为组合框赋值吗?下面这篇文章就一起看看吧。例:一个组合框ComboBox1,从工作表1中的A列中提取不重复数值赋以这个…

《算法设计与分析》一一1.1 RAM模型的引入

1.1 RAM模型的引入 1.1.1 计算的基本概念计算技术已经渗透到我们日常生活的方方面面,显著地改变了我们的生活。计算技术的广泛应用与巨大成功让我们不禁思考:“为什么计算机似乎无所不能。”例如,我们平时的工作、娱乐、交流都得益于计算机…

man命令 详解

1. man命令 1:用户命令(/bin, /usr/bin, /usr/local/bin) 2:系统调用 3:库用户 4:特殊文件(设备文件) 5:文…

java class 获得函数_java的Class类及getClass()函数

Java反射学习所谓反射,可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码。严格地说&#xff0…

第七章 高质量子程序

一、何为子程序?子程序是为实现某一特定目的而编写的方法或过程。二、为何写子程序?1、可以降低复杂度。如果面临一个复杂逻辑,通过子程序可以有效分解逻辑,比如将一些列操作封装起来,通过函数名来传递某种逻辑。2、提…