FROM: http://unmi.cc/log4j-common-config
◆单独指定某个包或类的输出文件方式:
log4j.logger.com.xxx.action= INFO,JobLog //com.xxx.action 可以为具体的类也可以是包
log4j.appender.JobLog=org.apache.log4j.RollingFileAppender
#log4j.appender.JobLog.Threshold=INFO
log4j.appender.JobLog.Append=true
log4j.appender.JobLog.File=D:/logs/xxx.log
log4j.appender.JobLog.Encoding=UTF-8
log4j.appender.JobLog.MaxFileSize=2048KB
log4j.appender.JobLog.MaxBackupIndex=30
log4j.appender.JobLog.DatePattern='.'yyyy-MM-dd HH
log4j.appender.JobLog.layout=org.apache.log4j.PatternLayout
log4j.appender.JobLog.layout.ConversionPattern=[%p] %c{1}:%L [%t %d{yyyy-MM-dd HH:mm:ss}] %m%n
言归正传:
常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子:
最简单的配置是只要取下面的log4j.properties文件中带下划线的四行就行,它完成日志输出到控制台。
一、log4j.properties
### 设置com.unmi域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1,A2 ##
log4j.category.com.unmi = ERROR,A1
log4j.category.com.unmi = INFO,A2
### 一般把上面两行写如下方式,统一控制日志输出,再用log4j.logger设置包独立的输出级别 ##
log4j.rootLogger = DEBUG,A1
#com.unmi.special为包名,配置为ERROR代表只把当前包中的ERROR级别日志输出
log4j.logger.com.unmi.special = ERROR
### 设置输出地A1,为ConsoleAppender(控制台) ##
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
### 设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
### 配置日志输出的格式##
log4j.appender.A1.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### 设置输出地A2到文件(文件大小到达指定尺寸的时候产生一个新的文件)##
log4j.appender.A2 = org.apache.log4j.RollingFileAppender
### 文件位置##
log4j.appender.A2.File = E:/study/log4j/log.html
### 文件大小##
log4j.appender.A2.MaxFileSize = 500KB
log4j.appender.A2.MaxBackupIndex = 1
##指定采用html方式输出
log4j.appender.A2.layout = org.apache.log4j.HTMLLayout
二、log4j.xml
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j = "http://jakarta.apache.org/log4j/" >
<appender name = "com.unmi.all" class = "org.apache.log4j.RollingFileAppender" >
<!-- 设置 appender Name:com.unmi.all和输出方式:org.apache.log4j.RollingFileAppender -->
<param name = "File" value = "E:/study/log4j/all.output.log" / ><!-- 设置File参数:日志输出文件名 -->
<param name = "Append" value = "false" / ><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name = "MaxBackupIndex" value = "10" / >
<layout class = "org.apache.log4j.PatternLayout" >
<param name = "ConversionPattern" value = "%p (%c:%L)- %m%n" / ><!-- 设置输出文件项目和格式 -->
</layout >
</appender >
<appender name = "com.unmi.xyz" class = "org.apache.log4j.RollingFileAppender" >
<param name = "File" value = "E:/study/log4j/xyz.output.log" / >
<param name = "Append" value = "true" / >
<param name = "MaxFileSize" value = "10240" / > <!-- 设置文件大小 -->
<param name = "MaxBackupIndex" value = "10" / >
<layout class = "org.apache.log4j.PatternLayout" >
<param name = "ConversionPattern" value = "%p (%c:%L)- %m%n" / >
</layout >
</appender >
<logger name = "unmi.log" > <!-- 设置包名限制,即unmi.log域及以下的日志均输出到下面对应的 appender 中 -->
<level value = "debug" / ><!-- 设置级别 -->
<appender-ref ref = "com.unmi.xyz" / ><!-- 与前面的配置的 appender name 相对应 -->
</logger >
<root > <!-- 设置接收所有输出的 appender -->
<appender-ref ref = "com.unmi.all" / ><!-- 与前面的 appender name 相对应 -->
</root >
</log4j:configuration>
三、配置文件加载方法:
对于properties文件,一般都不用手工去加载,由Log4j第一次初始化时自动就加载了
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
public class Log4jApp {
public static void main(String[] args) {
DOMConfigurator.configure("E:/study/log4j/log4j.xml"); //加载.xml文件
//PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件
Logger log = Logger.getLogger("com.unmi.test");
log.info("测试");
}
}
四、项目使用log4j
在web应用中,可以将配置文件的加载放在一个单独的servlet中,并在web.xml中配置该servlet在应用启动时候加载。对于在多人项目中,可以给每一个人设置一个输出通道,这样在每个人在构建Logger时,用自己的域名称,让调试信息输出到自己的log文件中。
五、常用输出格式
%c 列出logger名字空间的全称,如加上{<层数>}表示出从最内层算起的指定层数的名字空间
%X 按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。
%p 日志信息级别
%d %d{<日期格式>}:日志信息产生时间,使用ISO8601定义的日期格式
%C 日志信息所在地(全限类名)
%m 产生的日志具体信息
%n 输出日志信息换行
%F 显示调用logger的源文件名
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
%L 显示调用logger的代码行
%M 显示调用logger的方法名
%r 显示从程序启动时到记录该条日志时已经经过的毫秒数
%t 输出产生该日志事件的线程名
%% 显示一个百分号
--------------------------------------------------------------------------------
补充:在配置文件中可以用变量用于引用系统属性,如
log4j.appender.A2.File = ${user.home}/${app.name}.log
如果你在启动程序时加了 -Dapp.name=UnmiLog4jTest JVM 参数,或者在初始化 Log4j 之前,往 System.getProperties() 中 put 了 "app.name" 属性为 UnmiLog4jTest,那么就会输出日志文件到用户主目录/UnmiLog4jTest.log。user.home 属性一般都存在于系统属性中,你也可以在程序中改变它。
如果在 web.xml 中初始化 log4j,你可以在 log4j 的配置文件中更轻松的取到 web 应用的绝对路径。
web.xml中可以使用spring的Log4jConfigListener自动加载
<!-- log4j config start! -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webName.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
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 = fully.qualified.name.of.appender.class //
"fully.qualified.name.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指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
log全方位配置及Logger.getLogger()和LogF ... | |||||
在Web应用中利用Spring配置log4j | |||||
Tomcat自定义日志配置流程 |