文档库 最新最全的文档下载
当前位置:文档库 › log4j

log4j

log4j
log4j

1 介绍

2 配置

2.1 第一步

2.2 第二步

2.3 第三步

2.4 第四步

3 说明

4 详解

4.1 定义配置文件

4.2 格式化日志信息

4.3 运用在代码中

5 结合

1、介绍

log4j--log for java (java的日志)

在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。

此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。

说明:下面分为三部分,

第一部分讲解如何配置log4j;

第二部分为对log4j.properties配置文件中的各个属性的讲解;

第三部分为对log4j的详细讲解。

如果只想配置上log4j,那么只需要看前两个部分就可以,如果想对log4j深入了解,则还需看第三部分。

使用的license:Apache License V2.0

2、配置

第一步

加入log4j-1.2.8.jar到lib下。

第二步

在CLASSPATH下建立log4j.properties。内容如下(数字为行号):

1 log4j.rootCategory=INFO, stdout , R

2

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

4 https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout

5 https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

6

7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

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

9 https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout

10 https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%d-[TS] %p %t %c - %m%n

11

12 https://www.wendangku.net/doc/dd1084223.html,.neusoft=DEBUG

13 https://www.wendangku.net/doc/dd1084223.html,.opensymphony.oscache=ERROR

14 https://www.wendangku.net/doc/dd1084223.html,.sf.navigator=ERROR

15 https://www.wendangku.net/doc/dd1084223.html,mons=ERROR

16 https://www.wendangku.net/doc/dd1084223.html,.apache.struts=WARN

17 https://www.wendangku.net/doc/dd1084223.html,.displaytag=ERROR

18 https://www.wendangku.net/doc/dd1084223.html,.springframework=DEBUG

19 https://www.wendangku.net/doc/dd1084223.html,.ibatis.db=WARN

20 https://www.wendangku.net/doc/dd1084223.html,.apache.velocity=FATAL

21

22 https://www.wendangku.net/doc/dd1084223.html,.canoo.webtest=WARN

23

24 https://www.wendangku.net/doc/dd1084223.html,.hibernate.ps.PreparedStatementCache=WARN

25 https://www.wendangku.net/doc/dd1084223.html,.hibernate=DEBUG

26 https://www.wendangku.net/doc/dd1084223.html,.logicalcobwebs=WARN

第三步

相应的修改其中属性,修改之前就必须知道这些都是干什么的,在第二部分讲解。

第四步

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

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

在相应的方法中:

if (logger.isDebugEnabled()){

logger.debug(“System …..”);

}

3、说明

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。

3 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。

4 https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout

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

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

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

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

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)具体讲解可参照第三部分定义配置文件中的Layout。

5 https://www.wendangku.net/doc/dd1084223.html,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”

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

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

7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

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

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

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

9 https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout

与第4行相同。

https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%d-[TS] %p %t %c - %m%n

与第5行相同。

12 https://www.wendangku.net/doc/dd1084223.html,. neusoft =DEBUG

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

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

13 https://www.wendangku.net/doc/dd1084223.html,.opensymphony.oscache=ERROR

14 https://www.wendangku.net/doc/dd1084223.html,.sf.navigator=ERROR

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

15 https://www.wendangku.net/doc/dd1084223.html,mons=ERROR

16 https://www.wendangku.net/doc/dd1084223.html,.apache.struts=WARN

这两句是struts的包。

17 https://www.wendangku.net/doc/dd1084223.html,.displaytag=ERROR

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

18 https://www.wendangku.net/doc/dd1084223.html,.springframework=DEBUG

此句为Spring的包。

24 https://www.wendangku.net/doc/dd1084223.html,.hibernate.ps.PreparedStatementCache=WARN

25 https://www.wendangku.net/doc/dd1084223.html,.hibernate=DEBUG

此两句是hibernate的包。

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

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 = https://www.wendangku.net/doc/dd1084223.html,.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的输出。

其语法为:

https://www.wendangku.net/doc/dd1084223.html,yout = https://www.wendangku.net/doc/dd1084223.html,yout.class

https://www.wendangku.net/doc/dd1084223.html,yout.option1 = value1

https://www.wendangku.net/doc/dd1084223.html,yout.optionN = valueN

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

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

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

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

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

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

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

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

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

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

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

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

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

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

运用在代码中

我们在需要输出日志信息的类中做如下的三个工作:

1、导入所有需的commons-logging类:

import https://www.wendangku.net/doc/dd1084223.html,mons.logging.Log;

import https://www.wendangku.net/doc/dd1084223.html,mons.logging.LogFactory;

2、在自己的类中定义一个https://www.wendangku.net/doc/dd1084223.html,mons.logging.Log类的私有静态类成员:

private final Log log = LogFactory.getLog(getClass());

LogFactory.getLog()方法的参数使用的是当前类的class。

3、使用https://www.wendangku.net/doc/dd1084223.html,mons.logging.Log类的成员方法输出日志信息:

if (log.isDebugEnabled()){

log.debug("111");

}

if (log.isInfoEnabled()){

https://www.wendangku.net/doc/dd1084223.html,("222");

}

if (log.isWarnEnabled()){

log.warn("333");

}

if (log.isErrorEnabled()){

log.error("444");

}

if (log.isFatalEnabled()){

log.fatal("555");

}

2.3如何应用记录器的层次

2.3.1如何定义及获取不同层次的记录器

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

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()函数。

理论知道就讲到这里,纸上得来终觉浅,下面,我们来小小演练一下。

例4-a:

package TestLog4j;

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;

import org.apache.log4j.Priority;

import TestLog4j.TestLog4j2.TestLog4j2;

public class TestLog4j

{

static Logger logger = Logger.getLogger(TestLog4j.class.getName());//(2)public TestLog4j(){}

public static void main(String[] args)

{

//同时输出到控制台和一个文件的实例并实现了Logger的继承

PropertyConfigurator.configure("F:\\nepalon\\log4j2.properties");

logger.debug("Start of the main() in TestLog4j");

https://www.wendangku.net/doc/dd1084223.html,("Just testing a log message with priority set to INFO");

logger.warn("Just testing a log message with priority set to WARN");

logger.error("Just testing a log message with priority set to ERROR");

logger.fatal("Just testing a log message with priority set to FATAL");

logger.log(Priority.WARN, "Testing a log message use a alternate form");

logger.debug(TestLog4j.class.getName());

TestLog4j2 testLog4j2 = new TestLog4j2();//(1)

testLog4j2.testLog();

}

}

在类TestLog4j中我们调用了另一个类TestLog4j2,下面看一下类TestLog4j2的代码。

例4-b:

package TestLog4j.TestLog4j2;

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;

import org.apache.log4j.Priority;

public class TestLog4j2

{

static Logger logger = Logger.getLogger(TestLog4j2.class.getName());//(1)public TestLog4j2(){}

public void testLog()

{

//同时输出到控制台和一个文件的实例

PropertyConfigurator.configure("F:\\nepalon\\log4j2.properties");

logger.debug("2Start of the main()");

https://www.wendangku.net/doc/dd1084223.html,("2Just testing a log message with priority set to INFO");

logger.warn("2Just testing a log message with priority set to WARN"); logger.error("2Just testing a log message with priority set to ERROR"); logger.fatal("2Just testing a log message with priority set to FATAL"); logger.log(Priority.DEBUG, "Testing a log message use a alternate form"); logger.debug("2End of the main()");

}

}

最后我们来看一下配置文件。

例4-c:

log4j2.properties文件内容

#1区

#### Use two appenders, one to log to console, another to log to a file

log4j.rootLogger = debug, stdout,R

#2区

#Print only messages of priority WARN or higher for your category

log4j.logger.TestLog4j= , R

log4j.logger.TestLog4j.TestLog4j2=WARN

#3区

#### First appender writes to console

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

https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.

https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%5p [%t] (%F:%L) - %m%n #4区

#### Second appender writes to a file

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=F:\\nepalon\\classes\\TestLog4j\\example.log

# Control the maximum log file size

log4j.appender.R.MaxFileSize=100KB

# Archive log files (one backup file here)

log4j.appender.R.MaxBackupIndex=1

https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout

https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%d{yyyy-MM-dd

hh:mm:ss}:%p %t %c - %m%n

先看一下运行结果。

在控制台中的结果为:

DEBUG [main] (?:?) - Start of the main() in TestLog4j

INFO [main] (?:?) - Just testing a log message with priority set to INFO

WARN [main] (?:?) - Just testing a log message with priority set to WARN ERROR [main] (?:?) - Just testing a log message with priority set to ERROR FATAL [main] (?:?) - Just testing a log message with priority set to FATAL WARN [main] (?:?) - Testing a log message use a alternate form

DEBUG [main] (?:?) - TestLog4j.TestLog4j

WARN [main] (?:?) - 2Just testing a log message with priority set to WARN

ERROR [main] (?:?) - 2Just testing a log message with priority set to ERROR FATAL [main] (?:?) - 2Just testing a log message with priority set to FATAL

输出文件的结果为:

2003-12-19 04:19:44:DEBUG main TestLog4j.TestLog4j - Start of the main() in TestLog4j

2003-12-19 04:19:44:INFO main TestLog4j.TestLog4j - Just testing a log message with priority set to INFO

2003-12-19 04:19:44:WARN main TestLog4j.TestLog4j - Just testing a log message with priority set to WARN

2003-12-19 04:19:44:ERROR main TestLog4j.TestLog4j - Just testing a log message with priority set to ERROR

2003-12-19 04:19:44:FATAL main TestLog4j.TestLog4j - Just testing a log message with priority set to FATAL

2003-12-19 04:19:44:WARN main TestLog4j.TestLog4j - Testing a log message use a alternate form

2003-12-19 04:19:44:DEBUG main TestLog4j.TestLog4j - TestLog4j.TestLog4j 2003-12-19 04:19:44:WARN main TestLog4j.TestLog4j2.TestLog4j2 - 2Just testing a log message with priority set to WARN

2003-12-19 04:19:44:ERROR main TestLog4j.TestLog4j2.TestLog4j2 - 2Just testing a log message with priority set to ERROR

2003-12-19 04:19:44:FATAL main TestLog4j.TestLog4j2.TestLog4j2 - 2Just testing a log message with priority set to FATAL

首先,先来看一下配置文件都有些什么东西。

1) 在1区中定义了一个根记录器。这个根记录器具有DEBUG级别并有一个名称为stdout的输出端appender。

2) 2区中的内容是这一节的重点,也是应用到记录器层次的地方,但其实也只有两句,充分体现了log4j的简单性。在这里,我们定义了两个名称分别为TestLog4j和TestLog4j.TestLog4j2设计器。

? 在定义TestLog4j记录器时没有指定级别,所以它的级别继承自它的父记

录器,即根记录器,所以它的级别也为DEBUG。在定义TestLog4j记录器时又定义了一个名称为R的输出端,所以它的输出端有两个,一个从根记录器继承而来的名为stdout的输出端,另一个为在此定义的名为R的输出端。在此需要注意的是,在定义记录器时必须先定义记录器的级别,然后才是记录器的输出端。如果只想定义输出端而不定义级别,则虽然级别可以为空,但逗号分隔符不能省略。如定义TestLog4j记录器的做法。

? 在定义TestLog4j.TestLog4j2记录器时又指定了它的级别,由于一个记录器的级别只能有一个,所以新指定的级别将覆写掉它的父记录器的级别(这就象Java中的多态)。我们没有定义TestLog4j.TestLog4j2记录器的输出端,所以它的输出端将从它的父记录器中继承而来。它的父记录器为estLog4j记录器,所以它和estLog4j记录器一样具有两个名称分别为stdout和R的输出端。

3) 剩下的3区和4区分别设置了两个输出端的参数值。

接下来,回到我们的代码,看一下是如何取得记录器,在取记录器时又发生了什么。

1) 例4-a中的代码(2)中,语句Logger.getLogger()中的参数TestLog4j.class.getName()的值为TestLog4j. TestLog4j,所以此语句的结果是取得一个名为TestLog4j. TestLog4j的记录器的对象。但在配置文件中并没有定义这样的记录器,所以最终将返回与所需的名称TestLog4j. TestLog4j最接近的记录器对象,即名为TestLog4j的记录器的对象。

2) 例4-b中的代码(1)的原理与例4-a中的代码(2)相似,期望取得的是名为TestLog4j.TestLog4j2. TestLog4j2的记录器对象,但最终返回的是TestLog4j.TestLog4j2记录器的对象。

结合

到目前为止,这篇文章讲的都是如何在application中应用log4j,而Java现在的应用主流是J2EE和J2ME。现在,我们来看一下要如何在J2EE开发中应用log4j。其实在Web application中应用log4j也很简单,与在application中应用log4j

不同之处就是要在所有应用log4j的代码之前对log4j进行初始化。所以,我们在web application中就要把log4j的初始化工作独立出来,把它放在Servlet中。下面,我们看一个例子。

例5-a:

进行初始化的Servlet:

import org.apache.log4j.PropertyConfigurator;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* log4j.jar的初始化类,参考web.xml

*/

public class Log4jInit extends HttpServlet

{

public void init()

{

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

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

String file = getInitParameter("log4j-init-file");

// 如果没有给出相应的配置文件,则不进行初始化

if(file != null)

{

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

}

}

public void doGet(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了。下面是在javabean中的应用的一个例子。

例5-c:

import org.apache.log4j.Logger;

public class InfoForm

{

static Logger logger = Logger.getLogger(InfoForm.class);

protected String title;

protected String content;

public InfoForm() {}

public void setTitle(Object value)

{

logger.debug("nepalon:title = " + title);

title = value;

}

public String getTitle()

{

logger.debug("nepalon:title = " + title);

return title;

}

public void setContent(String value)

{

content = value;

logger.debug("nepalon: content() = " + content); }

public String getContent()

{

logger.debug("nepalon: content = \n" + content); return content;

}

}

log4j学习

log4j 如同Hadoop一样,把需要的jar包(hadoop.jar )和配置文件,放到CLASSPATH中, 配置Log4j也要如此,把log4j-1.2.8.jar,log4j.properties放到classpath中。配置 文件配置的是Log输出到哪里,如何输出,何时输出,哪些类的log要输出(等级)(Where, How,When,Who) 代码中用到的 private final Log log = LogFactory.getLog(getClass()); 得到类的全名,Log4j框架就会去找相应的package是否有设置输出log,以及它的等级。 如果等级为DEBUG那么log.isDebugEnabled()为true。如下所示,如果等级为INFO, 那么log.isInfoEnabled()、log.isWarnEnabled()、log.isErrorEnabled()这三个为true, 其他的为false?(有待确认) 等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则 不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而 DEBUG信息不会被显示,具体讲解可参照第三部分定义配置文件中的logger。 if (log.isDebugEnabled()){ log.debug("111"); } if (log.isInfoEnabled()){ https://www.wendangku.net/doc/dd1084223.html,("222"); } 完整的文章如下: 在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人 感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。 说明:下面分为三部分, 第一部分讲解如何配置log4j; 第二部分为对log4j.properties配置文件中的各个属性的讲解; 第三部分为对log4j的详细讲解。 如果只想配置上log4j,那么只需要看前两个部分就可以,如果想对log4j深入了解,则还需看第三部分。 一、Log4j配置

Eclipse从入门到精通(第二版)_ch37

第37章 在Eclipse中使用Hibernate 本章将把Hibernate应用到myweb项目中,对数据库层的代码进行改造,同时还会介绍一些Hibernate工具的使用。 37.1 概述 37.1.1 持久化框架产生的背景和现状 什么叫持久化?数据在内存中,关机后就会丢失。而如果把数据保存到后台的数据库中,就能达到“持久”保存数据的目的。而持久化框架的目的就是为了帮助用户更好地使用数据库。 在Java数据库项目中,由于数据库是关系型而非面向对象的。很多时候,用面向对象方法完成了前期的设计和分析,到了数据库层编程时就会变得很别扭,其中最痛苦的就是写面向过程的SQL语句。 J2EE开发主要由JSP、Servlet、JavaBean和EJB 4部分组成。其中EJB是J2EE中一个比较重要的部分,它提供了企业级开发所需的分布式支持。但现实中的大部分项目都是单服务器的轻量级项目,一般都不会涉及分布式的开发环境,这时用EJB就像大炮打蚊子,蚊子没打到,房子却被打破个洞。EJB的笨重和复杂一直让开发者很不满,其中EJB中Entity Bean受到的批评最多,现实项目中鲜有使用Entity Bean的成功范例。 开发者急切地需要一种符合Java编程习惯的、适合轻量级开发的、易于使用的数据库持久化解决方案。在这个背景下就产生了轻量级的数据库持久化技术,其中最主要的就是Hibernate、JDO。 Hibernate是一个民间开源项目,有点像一个草莽英雄,但Hibernate从实用出发的设计思路,使得它脱颖而出成为最流行的持久化技术。Hibernate的作者Gavin King也一举成名,现已成为EJB 3.0专家组的成员,并且在EJB 3.0的Entity Bean部分,将采用和Hibernate 类似的设计方案。因此,Hibernate是开发者学习和使用持久化技术的一个比较好的选择,即使以后EJB 3.0一统天下,所学的Hibernate知识也不会浪费。 JDO 2.0是经JCP(Java规范管理委员会,由SUN、IBM、Oracle等共同参与)承认的一个正式规范,所以也受到了开发者很大的关注。估计未来3年内,持久化技术将以EJB 3.0、Hibernate和JDO 2.0为主,成三足鼎立之势。

ElasticSearch5.1 基本概念和配置详解

二、几个基本概念 接近实时(NRT) Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是1 秒)。 集群(cluster) 代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。 索引(index)

ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。文档(document) 文档(document)是ElasticSearch中的主要实体。对所有使用ElasticSearch 的案例来说,他们最终都可以归结为对文档的搜索。文档由字段构成。 映射(mapping) 所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。类型(type) 每个文档都有与之对应的类型(type)定义。这允许用户在一个索引中存储多种文档类型,并为不同文档提供类型提供不同的映射。 分片(shards) 代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 副本(replicas) 代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。 数据恢复(recovery)

log4j和slf4j日志框架入门

Java私塾《日志框架入门》 ——深入浅出系列精品教程

Log4j是什么、有什么 n介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 n是什么 一个开源的、轻量级的、用于日志管理的框架 n有什么 Log4j由三个重要的组件构成:日志信息的输出格式,日志信息的优先级,日志信息的输出目的地。日志信息的优先级用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。 真正高质量培训签订就业协议网址:https://www.wendangku.net/doc/dd1084223.html,

Log4j能干什么 n能干什么 主要用来进行日志记录的管理,包括对日志输出的目的地,输出的信息级别和输出的格式等。 n日志类别的层次结构(Loggers) Log4j首要的相对于简单的使用System.out.println()方法的优点是基于它的在禁止一些特定的信息输出的同时不妨碍其它信息的输出的能力。这个能力源自于日志命名空间,也就是说,所有日志声明的空间,它根据一些开发员选择的公式而分类。 Logger被指定为实体,Logger的名字是大小写敏感的,它们遵循以下的命名语法规则:用“.”来划分层次级别,如:cn.javass.test 真正高质量培训签订就业协议网址:https://www.wendangku.net/doc/dd1084223.html,

kettle日志配置文档

log4j2中文手册

Log4j2使用手册 一.Log4j2介绍 Log4j1.x被广泛应用于应用程序,但是近年发展明显放缓,因为要维持较老java版本的使用,使得log4j1.x的发展更困难。而作为其代替品,slf4j/logback做出了许多必要改进,为什么还需要log4j2? 主要有以下几个原因: (1)Log4j2被设计用作审计日志框架, log4j和logback在重载配置时,都会丢失日志时间,而log4j2不会。Logback 中appenders中的异常对于应用来说是不可见的,log4j2可以配置异常向应用渗透。 (2)Log4j2 包含基于LMAX Disruptor library的下一代无锁Asynchronous Loggers,在多线程环境下, Asynchronous Loggers相比slf4j/ logback提高了10倍以上的吞吐量,并且有着更低的延时。 (3)Log4j2的插件机制,使得在不需要修改框架的情况下,通过添加 Appenders, Filters, Layouts, Lookups轻松 扩展框架。 (4)简单的插件配置,无需指定具体类名即可在configuration中配置插件。 (5)支持自定义日志级别,可以在代码或者configuration中自定义日志级别。 (6)支持lambda表达式,java8的应用可以在请求日志级别启用时使用lambda表达式懒构建一个日志消息,不 需要显示的日志级别检查,使得代码更简洁。 (7)支持消息对象,消息允许支持有趣和复杂的结构,传递到日志记录系统,并且可以高效的操作。用户可以自由 创建消息类型和编写Layouts, Filters and Lookups来操作这些消息。 (8)Log4j1在Appenders 上支持Filters 。logback增加了TurboFilters ,允许在日志事件在处理前进行过滤。Log4j2 可以配置Filters在Logger后者Appender前运行。 (9)许多Logback的Appenders不接受Layout,并且只能按照固定格式发送日志数据。大部分log4j2接收Layout 配置,允许日志数据按照任何所需格式传输。 (10)Log4j1与logback的Layouts是返回一个String类型,这可能导致一些编码问题。Log4j2使用了简单的方式:

log4j.properties配置文件配置项的说明

在程序中,可以以以下方式来使用 Log log = https://www.wendangku.net/doc/dd1084223.html,mons.logging.LogFactory.LogFactory.getLog(yourClassName.class); log.debug("debug message -------------------"); https://www.wendangku.net/doc/dd1084223.html,("inf o message ******************"); log.warn("w arn message +++++++++++++++"); log.error("error msg================="); 本文主要讲的是如何配置log4j,先让我们先看看一个典型的log4j配置: ==========log4j.properties================== log4j.appender.stdout=org.apache.log4j.ConsoleAppender https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n log4j.appender.f ileout=org.apache.log4j.RollingFileAppender log4j.appender.f ileout.File=D:/w orkspace/log4jtest/log/application.log log4j.appender.f ileout.MaxFileSize=10000KB log4j.appender.f ileout.MaxBackupI ndex=10 log4j.appender.f https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout log4j.appender.f https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n log4j.rootCategory=INF O, stdout, fileout https://www.wendangku.net/doc/dd1084223.html,.wolf square.log2=DEB UG,stdout =================================== 这个文件可以划为三小块 ===========第一块定义了一个名为 stdout 的appender和layout (appender,layout的概念后面再解释,目前先记着有这样两个名词):log4j.appender.stdout=org.apache.log4j.ConsoleAppender 定义stdout的实际输出实现类,从这个appender实现类名可以猜到,这个类是负责控制台输出的。 https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout 定义stdout的输出装饰器 https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n 装饰器参数配置 ============第二块定义了一个名为 fileout 的appender和layout: log4j.appender.f ileout=org.apache.log4j.RollingFileAppender 同理可猜这个实现类是输出到文件的 log4j.appender.f ileout.File=D:/w orkspace/log4jtest/log/application.log log4j.appender.f ileout.MaxFileSize=10000KB log4j.appender.f ileout.MaxBackupI ndex=10 log4j.appender.f https://www.wendangku.net/doc/dd1084223.html,yout=org.apache.log4j.PatternLayout log4j.appender.f https://www.wendangku.net/doc/dd1084223.html,yout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n ============第三块定义了名字分别为rootCategory,https://www.wendangku.net/doc/dd1084223.html,.wolf square.log2的两个logger log4j.rootCategory=INF O, stdout, fileout https://www.wendangku.net/doc/dd1084223.html,.wolf square.log2=DEB UG,stdout rootCategory logger是缺省的logger,记录所有的包的信息输出。 第二个logger是只输出指定包com.w olf square.log2下的日志信息。

log4j logback slf4j项目配置中的简单总结

如果对于commons-loging 、log4j 、slf4j 、LogBack 等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮助,当然如果对这块有更深刻理解的同学,也贡献出自己的知识和见解。 一、概念 Commons-logging : apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于JDBC 的api 接口,具体的的JDBC driver 实现由各数据库提供商实现。通过统一接口解耦,不过其内部也实现了一些简单日志方案。 Log4j : 经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。 Slf4j : 全称为Simple Logging Facade for JAVA:java简单日志门面。是对不同日志框架提供的一个门面封装。可以在部署的时候不修改任何配置即可接入一种日志实现方案。和commons-loging 应该有一样的初衷。个人感觉设从计上更好一些,没有commons 那么多潜规则。同时有两个额外特点: 1. 能支持多个参数,并通过{} 占位符进行替换,避免老写logger.isXXXEnabled 这种无奈的判断,带来性能提升见:https://www.wendangku.net/doc/dd1084223.html,/faq.html#logging_performance 。 2.OSGI 机制更好兼容支持 一图胜千言,官网上的一个图:

从上图可以发现,选择还是很多的。 Logback : LOGBack 作为一个通用可靠、快速灵活的日志框架,将作为Log4j 的替代和SLF4J 组成新的日志系统的完整实现。官网上称具有极佳的性能,在关键路径上执行速度是log4j 的10 倍,且内存消耗更少。具体优势见:

SSH三大框架整合(详细版)

1:构建WEB项目 2:构建数据库 3:加入依赖包 尽量不要依赖IDE,通过自己手动加包完成 访问数据库需要的包:mysql的驱动包 Hibernate的包:hibernate3.jar 核心包 依赖的必须包:antlr-2.7.6.jar 用于解析成HQL语句的包 commons-collections-3.1.jar apache提供的包,提供对集合框架的增强 dom4j-1.6.1.jar 解析XML文件的包 javassist-3.9.0.GA.jar 动态修改字节码需要用到的包 jta-1.1.jar 用于JTA事务的包 slf4j-api-1.5.8.jar 日志接口包---》依赖一定的实现包 slf4j-log4j12-1.5.0.jar log4j.jar 另外一种实现包:slf4j-simple-1.5.10.jar 可选的包:c3p0-0.9.1.jar 用于创建C3P0连接池的包 ehcache-1.2.3.jar :用于缓存实现的包 cglib-2.2.jar 动态修改字节码的包 Spring的包:spring.jar 核心包 aopalliance.jar 使用Aop功能可以用到的包 aspectjrt.jar aspectjweaver.jar 使用ASPECTJ表达式需要用到的包 如果是使用DBCP连接池的话,需要两个jar包 commons-dbcp.jar commons-pool.jar 如果需要用到commons增加包的话,可以加入以下包 commons-beanutils.jar commons-lang.jar commons-logging.jar Struts2的包:commons-fileupload-1.2.1.jar commons-io-1.3.2.jar freemarker-2.3.13.jar :在Struts2 中默认使用的是FreeMarker模板引擎 ognl-2.6.11.jar :Struts2中使用OGNL表达式 struts2-core-2.1.6.jar 核心包 xwork-2.1.2.jar 核心包 struts2-spring-plugin-2.1.6.jar Struts2跟Spring整合需要的插件包 4:构建项目分包结构 5:放置配置文件 6:创建POJO和相对应的hbm.xml 7:修改空白的Hibernate.cfg..xml并创建表结构 8:创建DAO,SERVICE,ACTION 9:修改配置文件

一份比较完整的log4j的xml配置

须og4项 须og4项..xm须 须og4项 须ogger Logger.getRootLogger() 须ogger Logger.getLogger(String name) 须ogger Logger.getLogger(C须ass c须azz) Logger.getLogger(c须azz.getName()) (.setLeve须(int,Exception)) Leve须.ALL Leve须.DEB此G Leve须.INFO Leve须.WARN Leve须.ERROR Leve须.FA正AL Leve须.OFF Appender(.addAppender(Appender).setAdditivity(boo须ean additive) ) org.apache.须og4项.Conso须eAppender targer: Conso须eAppender.SYS正EM_O此正(Defau须t) Conso须eAppender.SYS正EM_ERR pub须ic Conso须eAppender(Layout) pub须ic Conso须eAppender(Layout,String targer) org.apache.须og4项.Fi须eAppender pub须ic Fi须eAppender(Layout,String fi须eName) pub须ic Fi须eAppender(Layout,String fi须eName,boo须ean append) org.apache.须og4项.Dai须yRo须须ingFi须eAppender , org.apache.须og4项.Ro须须ingFi须eAppender , pub须ic Ro须须ingFi须eAppender(Layout,String fi须eName) void setMaxBac顺upIndex(int index) void setMaximumFi须eSize(须ong size) org.apache.须og4项.WriterAppender org.apache.须og4项.JDBCAppender (Layout) %c %d %f %须

log4j教程

以前都是把所有日志都输出到一个文件下面,今天有个同事问想把某个包下的日志输出到 指定的地方,于是就在网上查了一些资料,总结一下,以免以后用到。 一、log4j是什么? Log4j是一个开源的日志记录组件,其产品已经相当的成熟,且使用非常的广泛。在工程 中以易用,方便等代替了 System.out 等打印语句。 Log4j的目标是:它允许开发人员以任意的精细程度控制哪些日志说明被输出。通过使用 外部的配置文件,可以在运行时配置它。 Log4j的具体在 https://www.wendangku.net/doc/dd1084223.html,/log4j/找到它(有使用的文档说明)。另外,log4j已经被转换成 C, C++, C#, Perl, Python, Ruby, 和 Eiffel 语言。 二、通常我们建立一个log4j.properties文件放在src下,编译之后就生成在../web- inf/class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可,中定位这 个文件,并读入这个文件完成的配置。这个配置文件告诉Log4J以什么样的格式、把什 么样的信息、输出到什么地方。 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明: 1、 Loggers Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。 假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息 就不显示了。 其语法表示为: org.apache.log4j.ConsoleAppender(控制台) org.apache.log4j.FileAppender(文件) org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

Log4j 日志内容详解

Log4j详细解 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。 最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。 1.2. Log4j简介 在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 此外,通过Log4j其他语言接口,您可以在C、C+ +、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI 甚至是SNMP应用中。 Log4j有三个主要的组件: Loggers(记录器),Appenders (输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:1、Loggers Loggers组件在此系统中被分为五个级别:DEBUG、INFO、W ARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < W ARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,这里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(https://www.wendangku.net/doc/dd1084223.html,); Logger barlogger = Logger.getLogger("com.foo.Bar"); ***下面这个请求可用,因为W ARN >= INFO*** logger.warn("Low fuel level."); ***下面这个请求不可用,因为DEBUG < INFO*** logger.debug("Starting search for nearest gas station.");

Log4j.properties配置详解

Log4j.properties配置详解 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。 1、Loggers Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。 2、Appenders 禁用和使用日志请求只是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 = className log4j.appender.appenderName.Option1 = value1 … log4j.appender.appenderName.OptionN = 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(包含日志产生的时间、线程、类别等信息) 配置模式: https://www.wendangku.net/doc/dd1084223.html,yout =className https://www.wendangku.net/doc/dd1084223.html,yout.Option1 = value1 https://www.wendangku.net/doc/dd1084223.html,yout.OptionN = valueN 二、配置详解 在实际应用中,要使Log4j在系统中运行须事先设定配置文件。配置文件事实上也就是对Logger、Appender及Layout进行相应设定。Log4j支持两种配置文件格式,一种是

log4j.properties详解与例子

首先,在项目中的classes 中新建立一个log4j.properties文件即可; 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用。Log4j支持两种配置文件格式,一种是XML格 (这里只说明properties 【Java特性文件(键=值)】。 式的文件,一种是java properties(key=value) 文件) 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,C3 2、配置日志信息输出目的地 其语法为: log4j.appender.appenderName = https://www.wendangku.net/doc/dd1084223.html,.of.appender.class // "https://www.wendangku.net/doc/dd1084223.html,.of.appender.class" 可以指定下面五个目的地中的一个: https://www.wendangku.net/doc/dd1084223.html,.apache.log4j.ConsoleAppender(控制台) https://www.wendangku.net/doc/dd1084223.html,.apache.log4j.FileAppender(文件) https://www.wendangku.net/doc/dd1084223.html,.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件) https://www.wendangku.net/doc/dd1084223.html,.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) https://www.wendangku.net/doc/dd1084223.html,.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文件。

log4j日志输出规范

Log4j 使用参考规范

目录 简介 (3) 1. 概述 (3) 2. 库主件 (3) 3. 主要组件 (3) 配置 (4) 1. 相关配置文件 (4) 2. 详细配置说明 (5) 3. 输出方式 (5) 4. 输出格式 (6) 调用 (7) 注意问题 (7) 参考文档 (8)

1. 概述 程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。例如,跟踪语句(trace),结构转储和常见的System.out.println或printf调试语句。log4j 提供分级方法在程序中嵌入日志记录语句。日志信息具有多种输出格式和多个输出级别。 使用一个专门的日志记录包,可以减轻对成千上万的System.out.println 语句的维护成 本,因为日志记录可以通过配置脚本在运行时得以控制。log4j 维护嵌入在程序代码中的日志记录语句。通过规范日志记录的处理过程,一些人认为应该鼓励更多的使用日志记录并且获得更高程度的效率。 五级输出,依次为DEBUG、INFO、WARN、ERROR、FATAL。使用者可根据不同的 需求,设定不同的输出级别,则得到不同级别的输出结果。 (在正式生产环境中,一般设定为 warn) 2. 库主件 目前log4j 2.0 版本需要JAVA5(logging services designed for Java 5 and later);1.3 版不被推荐使用,我们使用的最多的是1.2版。目前可download 的是1.2.17 版。下载地址:https://www.wendangku.net/doc/dd1084223.html,/dyn/closer.cgi/logging/log4j/ 库文件一般为名为log4j.jar, 使用时加入lib路径下。 3. 主要组件 Log4j有三个主要组件:loggers、appenders和layouts。这三个组件协同工作,使开发人员能够根据消息类型和级别来记录消息,并且在程序运行期控制消息的输出格式位置。Logger:记录器;Logger 负责处理日志记录的大部分操作。 Appender:挂载点;Appender 负责控制日志记录操作的输出。 Layout:布局;Layout 负责格式化Appender 的输出。

SSH(整合)简单登录过程详解

MyEclipse开发SSH(Struts+Spring+Hibernate)范例1. 准备 工具:MyEclipse 5.1.0 GA、Tomcat 5.5 环境:Struts1.1、Spring1.2、Hibernate3.1、sqlserver2000 1.1. 新建工程 本范例使用最简单的登录模块来实践SSH的开发,旨在体会和入门SSH技术的整合操作:[Menu] File/New/Web Project 工程名:login 2. Struts 部分 2.1. 添加Struts 功能支持 操作:[Menu] MyEclipse/Project Capabilities/Add Struts Capabilities

修改web.xml 分别创建index.jsp、login.jsp、success.jsp先不对jsp页面做任何修改2.2. 创建ActionForm 类 操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.1 Form 类名:LoginForm

在"Form Properties" 选项卡为loginForm 新增两个属性:username、password; 2.3. 创建Action 类 类名:LoginAction

在"Form" 选项卡的"Name" 项选择"loginForm","Input Source" 项输入"/login.jsp"。 在Forwards中创建两个forward对象 success登录成功,跳转到success.jsp fail登录失败,跳转到login.jsp重新登录 此时struts-config.xml代码如下 2.4. 修改jsp 文件 index.jsp代码

相关文档