log4j的优点和正确配置
2013-06-27 14:45
225 查看
1 背景介绍
在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹 ,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。
如果程序中大量使用了system.out,如果哪一天我不想打印出这些调试信息,那么我就让在整个程序中一句句的注释掉,而过几天我又想打印出来,那又要再一条条去掉,工作量可想而知。
2 log4j简介
在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。
Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
此外,通过Log4j其他语言接口,您可以在 C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。
因此,使用log4j的优点:可以轻松的控制log信息是否显示、log信息的输出端类型、输出方式、输出格式,更加细致地控制日志的生成过程,而其通过配置文件可以灵活的进行配置而不需要大量的更改代码。
3 log4j的使用和配置
log4j有三个主要的组件,分别是:
*Logger(记录器):负责按照设定的优先级过滤日志信息,然后转发到存放器
*Appender(存放器):负责接收并处理记录器转发来的日志信息,通常的处理是输出到屏幕或者存储到磁盘文件
*Layout(布局器):负责格式化日志信息
上述三者之间的关系:
一个Logger可以挂接多个Appender(日志信息同时转发到多个设备)
一个Appender指定一个Layout进行格式化操作
一、定义配置文件log4j.properties
1.
log4j.记录器名称=[ 级别 ] , 存放器名称1, 存放器名称2, …
级别优先级由高到低依次是:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
log4j建议只使用四个级别,优先级从高到低分别是:ERROR、WARN、INFO、DEBUG
只有优先级高于或等于设定级别的日志信息被转发,例如,如果定义为INFO,那么在程序中级别为DEBUG的日志信息都不会输出。
log4j.rootLogger是所有记录器的父对象(原名rootCategory已废弃),可用于设定所有记录器的缺省优先级
记录器可以继承,如:log4j.myLogger.childLogger=,file
记录器按名字获得,第一次访问时自动创建(总是存在)
如果约定每个类都只向其同名记录器输出日志,则在配置文件中可以针对每一个特定类进行日志配置
2.
log4j.appender.存放器名称=存放器类名
目前,log4j实现的存放器类有以下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
3.
log4j.appender.存放器名称.layout=布局器类名
目前,log4j实现的布局器类有以下几种:
org.apache.log4j.PatternLayout(log4j的标准布局器,可以灵活地指定布局模式)
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.SimpleLayout(包含级别和日志信息的简单字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
4.
设定布局器选项(主要是设定转换格式)
log4j.appender.存放器名称.layout.选项名=值
通常采用log4j的标准布局器:
log4j.appender.存放器名称.layout=org.apache.log4j.PatternLayout
log4j.appender.存放器名称.layout.ConversionPattern=格式化参数
log4j采用类似C语言中printf函数的格式化参数格式化日志信息,参数如下:
%m 输出代码中指定的信息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自布局器构造到该时间点所经过的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出该时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式。如:%d{yyy MMM dd HH:mm:ss,SSS},输出类
似:08 十二月 03 12:04:52,531
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如:Testlog4.main(TestLog4.java:10)
%F 输出文件名
%L 输出行号
二、在代码中调用log4j
1.将log4j的jar包(log4j-1.2.15.jar)导入到工程中。
2.写配置文件log4j.properties,放在src目录下,系统运行时自动拷贝到bin目录下。
Java代码
1.<span style="font-family: courier new,courier;" >
2. import org.apache.log4j.Logger;
3. ...
4.private static final Logger log = Logger.getLogger(类名.class );
5. ...
6. log.debug( Object message );
7. log.info( Object message );
8. log.warn( Object message );
9. log.error( Object message );
10.
11.</span>
import org.apache.log4j.Logger;
...
private static final Logger log = Logger.getLogger(类名.class);
...
log.debug( Object message );
log.info( Object message );
log.warn( Object message );
log.error( Object message );
三、log4j.properties的例子
Xml代码
1.< span style ="font-family: courier new,courier;" >
2.# Set root logger priority to INFO and its only appender to CONSOLE.
3.log4j.rootLogger =INFO , CONSOLE
4.log4j.rootLogger =INFO , CONSOLE, LOGFILE
5.
6.# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
7.log4j.logger.org.apache.axis.enterprise =FATAL , CONSOLE
8.
9.# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
10.log4j.appender.CONSOLE =org .apache.log4j.ConsoleAppender
11.log4j.appender.CONSOLE.Threshold =INFO
12.log4j.appender.CONSOLE.layout =org .apache.log4j.PatternLayout
13.
14.# Pattern to output the caller's file name and line number.
15.log4j.appender.CONSOLE.layout.ConversionPattern =%5p [%t] (%F:%L) - %m%n
16.
17.# LOGFILE is set to be a File appender using a PatternLayout.
18.log4j.appender.LOGFILE =org .apache.log4j.FileAppender
19. log4j.appender.LOGFILE.File =axis .log
20.log4j.appender.LOGFILE.Append =true
21.log4j.appender.LOGFILE.Threshold =INFO
22.log4j.appender.LOGFILE.layout =org .apache.log4j.PatternLayout
23.log4j.appender.LOGFILE.layout.ConversionPattern =%-4r [%t] %-5p %c %x - %m%n
24.</ span >
# Set root logger priority to INFO and its only appender to CONSOLE.
log4j.rootLogger=INFO, CONSOLE
log4j.rootLogger=INFO, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
四、常见故障
log4j:WARN Please initialize the log4j system properly.
解决办法:
【eclipse环境】将文件log4j.properties拷贝到src目录下,运行时会自动拷贝到bin目录下。之前可能需要Refresh。
下面是ibatis原创log4j文件:
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO,CONSOLE,LOGFILE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE
# Set the enterprise logger priority to FATAL
log4j.logger.org.apache.axis2.enterprise=FATAL
log4j.logger.de.hunsicker.jalopy.io=FATAL
log4j.logger.httpclient.wire.header=FATAL
log4j.logger.org.apache.commons.httpclient=FATAL
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{yyyy/MM/dd HH:mm:ss:SSS}] %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/logs/javaWeb.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
#ibatis sql
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
#log4j.logger.java.sql.ResultSet=DEBUG
#replace system.out use in debug mode
#log4j.logger.sysout=info,log4jprint
#log4j.logger.sysout=info,log4jprint
#log4j.appender.log4jprint=org.apache.log4j.ConsoleAppender
#log4j.appender.log4jprint.Target=System.err
#log4j.appender.log4jprint.layout=org.apache.log4j.PatternLayout
#log4j.appender.log4jprint.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss:SSS}] - %m %n
在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹 ,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。
如果程序中大量使用了system.out,如果哪一天我不想打印出这些调试信息,那么我就让在整个程序中一句句的注释掉,而过几天我又想打印出来,那又要再一条条去掉,工作量可想而知。
2 log4j简介
在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。
Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
此外,通过Log4j其他语言接口,您可以在 C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。
因此,使用log4j的优点:可以轻松的控制log信息是否显示、log信息的输出端类型、输出方式、输出格式,更加细致地控制日志的生成过程,而其通过配置文件可以灵活的进行配置而不需要大量的更改代码。
3 log4j的使用和配置
log4j有三个主要的组件,分别是:
*Logger(记录器):负责按照设定的优先级过滤日志信息,然后转发到存放器
*Appender(存放器):负责接收并处理记录器转发来的日志信息,通常的处理是输出到屏幕或者存储到磁盘文件
*Layout(布局器):负责格式化日志信息
上述三者之间的关系:
一个Logger可以挂接多个Appender(日志信息同时转发到多个设备)
一个Appender指定一个Layout进行格式化操作
一、定义配置文件log4j.properties
1.
log4j.记录器名称=[ 级别 ] , 存放器名称1, 存放器名称2, …
级别优先级由高到低依次是:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
log4j建议只使用四个级别,优先级从高到低分别是:ERROR、WARN、INFO、DEBUG
只有优先级高于或等于设定级别的日志信息被转发,例如,如果定义为INFO,那么在程序中级别为DEBUG的日志信息都不会输出。
log4j.rootLogger是所有记录器的父对象(原名rootCategory已废弃),可用于设定所有记录器的缺省优先级
记录器可以继承,如:log4j.myLogger.childLogger=,file
记录器按名字获得,第一次访问时自动创建(总是存在)
如果约定每个类都只向其同名记录器输出日志,则在配置文件中可以针对每一个特定类进行日志配置
2.
log4j.appender.存放器名称=存放器类名
目前,log4j实现的存放器类有以下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
3.
log4j.appender.存放器名称.layout=布局器类名
目前,log4j实现的布局器类有以下几种:
org.apache.log4j.PatternLayout(log4j的标准布局器,可以灵活地指定布局模式)
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.SimpleLayout(包含级别和日志信息的简单字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
4.
设定布局器选项(主要是设定转换格式)
log4j.appender.存放器名称.layout.选项名=值
通常采用log4j的标准布局器:
log4j.appender.存放器名称.layout=org.apache.log4j.PatternLayout
log4j.appender.存放器名称.layout.ConversionPattern=格式化参数
log4j采用类似C语言中printf函数的格式化参数格式化日志信息,参数如下:
%m 输出代码中指定的信息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自布局器构造到该时间点所经过的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出该时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式。如:%d{yyy MMM dd HH:mm:ss,SSS},输出类
似:08 十二月 03 12:04:52,531
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如:Testlog4.main(TestLog4.java:10)
%F 输出文件名
%L 输出行号
二、在代码中调用log4j
1.将log4j的jar包(log4j-1.2.15.jar)导入到工程中。
2.写配置文件log4j.properties,放在src目录下,系统运行时自动拷贝到bin目录下。
Java代码
1.<span style="font-family: courier new,courier;" >
2. import org.apache.log4j.Logger;
3. ...
4.private static final Logger log = Logger.getLogger(类名.class );
5. ...
6. log.debug( Object message );
7. log.info( Object message );
8. log.warn( Object message );
9. log.error( Object message );
10.
11.</span>
import org.apache.log4j.Logger;
...
private static final Logger log = Logger.getLogger(类名.class);
...
log.debug( Object message );
log.info( Object message );
log.warn( Object message );
log.error( Object message );
三、log4j.properties的例子
Xml代码
1.< span style ="font-family: courier new,courier;" >
2.# Set root logger priority to INFO and its only appender to CONSOLE.
3.log4j.rootLogger =INFO , CONSOLE
4.log4j.rootLogger =INFO , CONSOLE, LOGFILE
5.
6.# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
7.log4j.logger.org.apache.axis.enterprise =FATAL , CONSOLE
8.
9.# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
10.log4j.appender.CONSOLE =org .apache.log4j.ConsoleAppender
11.log4j.appender.CONSOLE.Threshold =INFO
12.log4j.appender.CONSOLE.layout =org .apache.log4j.PatternLayout
13.
14.# Pattern to output the caller's file name and line number.
15.log4j.appender.CONSOLE.layout.ConversionPattern =%5p [%t] (%F:%L) - %m%n
16.
17.# LOGFILE is set to be a File appender using a PatternLayout.
18.log4j.appender.LOGFILE =org .apache.log4j.FileAppender
19. log4j.appender.LOGFILE.File =axis .log
20.log4j.appender.LOGFILE.Append =true
21.log4j.appender.LOGFILE.Threshold =INFO
22.log4j.appender.LOGFILE.layout =org .apache.log4j.PatternLayout
23.log4j.appender.LOGFILE.layout.ConversionPattern =%-4r [%t] %-5p %c %x - %m%n
24.</ span >
# Set root logger priority to INFO and its only appender to CONSOLE.
log4j.rootLogger=INFO, CONSOLE
log4j.rootLogger=INFO, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
四、常见故障
log4j:WARN Please initialize the log4j system properly.
解决办法:
【eclipse环境】将文件log4j.properties拷贝到src目录下,运行时会自动拷贝到bin目录下。之前可能需要Refresh。
下面是ibatis原创log4j文件:
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO,CONSOLE,LOGFILE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE
# Set the enterprise logger priority to FATAL
log4j.logger.org.apache.axis2.enterprise=FATAL
log4j.logger.de.hunsicker.jalopy.io=FATAL
log4j.logger.httpclient.wire.header=FATAL
log4j.logger.org.apache.commons.httpclient=FATAL
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{yyyy/MM/dd HH:mm:ss:SSS}] %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/logs/javaWeb.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
#ibatis sql
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
#log4j.logger.java.sql.ResultSet=DEBUG
#replace system.out use in debug mode
#log4j.logger.sysout=info,log4jprint
#log4j.logger.sysout=info,log4jprint
#log4j.appender.log4jprint=org.apache.log4j.ConsoleAppender
#log4j.appender.log4jprint.Target=System.err
#log4j.appender.log4jprint.layout=org.apache.log4j.PatternLayout
#log4j.appender.log4jprint.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss:SSS}] - %m %n
相关文章推荐
- log4j的优点和正确配置
- log4j的优点和正确配置
- log4j各项配置都正确,却不能在控制台打印日志
- Log4j优点(配置)
- Log4j没有正确配置导致项目没有发布成功
- log4j详情 以及正确配置
- log4j异常,配置文件顺序不正确
- 正确 配置和使用 的 log4j.properties的 方法
- log4j 配置文件 详解 + 实例 分析
- log4j.properties配置详解
- log4j配置
- 应用程序无法启动,因为应用程序的并行配置不正确
- Log4j配置文件位置+Spring中数据源配置文件位置
- 正确配置spring aop,在controller中使用AOP
- log4j的配置及使用,输出到文件和控制台,不同包输出到不同文件
- VC2005程序的运行错误"由于应用程序的配置不正确..."
- 使用log4j配置不同文件输出不同内容
- 一个比较全的的log4j配置文件(log4j.properties)转载
- 使用XML文件配置Log4j的方法
- Linux重启inotify配置max_user_watches无效被恢复默认值8192的正确修改方法