`
houfeng0923
  • 浏览: 142669 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

日志框架(一)----- log4j使用

阅读更多

1.将log4j配置打包在jar之外并调用的方法

 

默认情况下,log4j会自动加载classloader下的log4j.properties或 log4j.xml文件。所以一般没有特殊要求,只需要将默认文件名的配置文件置于src目录下(web程序还可以放在WEB-INF下面)。

对于单机程序,打包后配置文件会同class一起打到jar中,不利于通过修改配置来改变日志记录方式。

 

我们可以在项目中建立文件夹conf来放置配置文件,然后程序启动时采用以下方式来告诉log4j配置文件的路径

 

//------程序初始化阶段----
//读取配置
String currentDir = System.getProperty("user.dir");
PropertyConfigurator.configure(currentDir+"/conf/log4j.properties");
//如果是xml配置
//DOMConfigurator.configure(currentDir+"/conf/log4j.xml");
//此外还可以调用configureAndWatch监听配置的变动并重新加载。


//-----log调用-------
Log dbLog = LogFactory.getLog("dbLog");
if(dbLog.isErrorEnabled()){  // 先判断log级别再调用,减少不必要的代码执行。
dbLog.error("test db log");			
}

//-----程序结束阶段------
//关闭log    稍后文章中会介绍在某些场合关闭log的必要性。
LogManager.shutdown();    

 

注意这里涉及到如何判断程序和结束,对于桌面程序可以自己判断;对于web项目,可以建立一个ServletContextListener来添加初始化和结束代码。

另外,如果在web工程中使用spring,初始化配置可以使用spring提供的org.springframework.web.util.Log4jConfigListener。

web.xml中的相关配置内容如下:

 

<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>WEB-INF/log4j-1.properties</param-value>
</context-param>
	<!-- 如果需要设置监听
	<context-param> 
		<param-name>log4jRefreshInterval</param-name>
		<param-value>20000</param-value>
	</context-param>
	-->
 <context-param> <!-- 配置项目根 环境变量 . 下节会提到  -->
		<param-name>webAppRootKey</param-name>
		<param-value>log4jWebTemplate.root</param-value>
</context-param>

<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
  

 

2.log4j配置文件常用输出器及参数配置示例

 

## ------------------rootLogger ------------------  ##
# 定义根记录器 日志级别 、两个日志输出源
#日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
#Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
log4j.rootLogger=DEBUG,console,file


## ------------------Console------------------------ ## 
# 控制台输出源 参数设置 
log4j.appender.console=org.apache.log4j.ConsoleAppender
#默认为System.out
log4j.appender.console.target=System.err
# 控制台输出源 布局设置
log4j.appender.console.layout=org.apache.log4j.SimpleLayout


## ------------------File------------------ ##
# 文件输出源 参数设置   
log4j.appender.file=org.apache.log4j.RollingFileAppender
#设置输入文件:${webapp.root}/WEB-INF/logs/log.log
#注:  环境变量webapp.root由tomcat启动项目时设置
#为了避免多项目同时部署的名称冲突问题,可以在web.xml中配置context-param :webAppRootKey ,示例值:log4jWebTemplate.root
#那么可以在配置中使用{log4jWebTemplate.root}来获取项目实际路径。
#对于桌面程序,可以使用${user.dir} 或'.'
log4j.appender.file.File=./logs/log.log
log4j.appender.file.MaxFileSize=1000KB
log4j.appender.file.MaxBackupIndex=20 
#定义输入级别,默认采用rootLogger输入级别
#log4j.appender.file.Threshold = DEBUG 
# 文件输出源 布局设置
# 使用灵活布局方式,参数意义参考:http://www.blogjava.net/xzclog/archive/2006/09/04/67481.html
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p][%t][%C][%d{yyyy-MM-dd HH:mm:ss}] %m%n 


# 其他的输出源:	
# FileAppender   指定一个日志文件
# DailyRollingFileAppender 表示每天产生一个日志文件
# WriterAppender 将日志信息以流格式发送到任意指定的地方 参考:http://wanwok.iteye.com/blog/616829
# JDBCAppender   把重要的业务日志异步批量写入数据库  参考:http://www.blogjava.net/xzclog/archive/2006/09/04/67481.html#128134
# SMTPAppender   发送日志到email	 


## --------------------自定义logger----------------------##
#适用于为不同的业务或系统事件建立独立的日志 .使用自定义日志尽量不设置根日志rootLogger。

#logger名:customLog   logger输出器 customLogAppender
log4j.logger.customLog=DEBUG,customLogAppender
## ***additivity***是否继承父logger输出源  
log4j.additivity.customLog=false
log4j.appender.customLogAppender=org.apache.log4j.ConsoleAppender
#log4j.appender.customLogAppender.target=System.out
## 输出DEBUG级别以上的日志 ##定义独立的日志级别  类似于下面提到的filter
log4j.appender.customLogAppender.Threshold = DEBUG 

log4j.appender.customLogAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.customLogAppender.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %m%n

## -------------------自定义 logger  dbLog (JDBCAppender)----------------------##
log4j.logger.dbLog=ERROR,dbLogAppender
log4j.appender.dbLogAppender=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.dbLogAppender.URL=jdbc:mysql://localhost:3306/test
log4j.appender.dbLogAppender.driver=com.mysql.jdbc.Driver
log4j.appender.dbLogAppender.user=root
log4j.appender.dbLogAppender.password=xiaodi
log4j.appender.dbLogAppender.sql=insert into t_log4j_info(priority,message,catalog,time) values('%p','%m','%c','%d{yyyy-MM-dd HH:mm:ss}')
#注意:bufferSize可以缓存日志,设置为>1后,缓存满后再插入数据库。但如果程序终结有可能缓存未输出。需要在程序结束前调用LogManager.shutdown()。
log4j.appender.dbLogAppender.bufferSize=10
log4j.appender.dbLogAppender.layout=org.apache.log4j.PatternLayout

##定义日志的过滤器。可以设定单个日志输出器的日志输出级别范围
log4j.appender.dbLogAppender.filter.filter1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.dbLogAppender.filter.filter1.LevelMin=INFO
log4j.appender.dbLogAppender.filter.filter1.LevelMax=ERROR
#此外还有 LevelMatchFilter StringMatchFilter 
 

 

 

日志测试代码:

 

//调用一个不存在的自定义log
Log noLog = LogFactory.getLog(this.getClass());
//标识log不存在,调用rootLogger的输出器产生输出。如果rootLogger未定义将不会产生输出
if(noLog.isErrorEnabled()){
	noLog.error("no exist logger test"); 			
}

//调用自定义的log
Log customLog = LogFactory.getLog("customLog");
//除了当前log的输出外,还有rootLogger的两个输出器也同时产生了输出(除非设置该日志的additivity=false)
if(customLog.isErrorEnabled()){
	customLog.error("test customLog working ");			
}

//调用自定义db logger
Log dbLog = LogFactory.getLog("dbLog");
if(dbLog.isErrorEnabled()){
	dbLog.error("test db log");			
}

 

 

4
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics