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");
}
分享到:
相关推荐
Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...
log4j日志框架 log4j日志框架 log4j日志框架log4j日志框架
开源日志框架Apache Log4j2远程代码执行漏洞升级包
若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载
slf4j-nop-1.5.8.jar、slf4j-log4j12-1.5.8.jar、slf4j-api-1.5.8.jar、hibernate-annotations.jar、hibernate3.jar、junit-4.8.2.jar、log4j-1.2.12.jar等 hibernate框架jar包:8个 搭建注解环境jar包:3个 log...
SSM框架log4j.properties日志打印必备包SSM框架log4j.properties日志打印必备包SSM框架log4j.properties日志打印必备包SSM框架log4j.properties日志打印必备包
日志开发框架 总结归纳 log4j log4j2
web项目常用的日志框架依赖,内含log4j-1.2.17.jar、log4j-api-2.0-rc1.jar和log4j-core-2.0-rc1.jar
ssm框架的log4j日志打印文件
[SSH+Maven+Bootstrap视频教程]_18. 测试 log4j 日志框架.zip
android日志框架所用的两个jar包。比较难找,两个都在。亲测能用android日志框架所用的两个jar包。比较难找,两个都在。亲测能用
本包适用于tomcat8及以下版本 附带log4j.properties 和 配置说明
--03-日志框架介绍.mp4 --04-JUL日志快速入门.mp4 --05-JUL日志级别介绍.mp4 --06-JUL硬编码配置.mp4 --07-Logger对象父子关系.mp4 --08-JUL配置文件入门.mp4 --09-JUL配置文件详解.mp4 --10-JUL执行原理和流程.mp4 ...
log4j.properties ,commons-logging-1.2.jar,log4j-1.2.16.jar,三个文件一起组成一个完整的日志输出,Apache的Common Logging只是一个高层的日志框架,本身并没有实现真正的写日志能力,而是依赖其它的日志系统如...
日志介绍 日志的作用和...log4j2 "log4j2的日志框架 log4j2的配置 异步日志的使用" spring整合log "依赖的选择 日志的配置文件" SpringBoot日志 "SpringBoot日志 中间转换包统一日志框架 SpringBoot修改日志的默认配置
android里的日志框架,很好用,slf4j,附有用例。
log4j是一个用Java编写的可靠,快速和灵活的日志框架(API),它在Apache软件许可下发布
由Log4j之父做的另一个开源项目,业界中称作logj后浪,一个可靠、同样且灵活的java日志框架。 Logback组件 Logback配置 Logback输出格式 使用 Log4j2 特征 使用 日志门面技术 JCL 使用 SLF4j 使用
log4net库是一个工具,可帮助程序员将日志语句输出到各种输出目标。log4net是优秀的Apache log4j™框架到Microsoft®.NET运行时的移植。我们利用.NET运行时中的新功能,使该框架在本质上与原始log4j相似。 log4net是...
日志框架log4j和slf4j入门教程(私塾在线)视频配套学习资料