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");
}
分享到:
相关推荐
总之,logging-log4j2-log4j-2.15.0-rc2版本不仅在安全性上达到了新的高度,还通过一系列改进和优化,确保了日志处理的高效性和灵活性。对于开发者来说,深入理解和掌握这一版本的Log4j,将有助于构建更加健壮、安全...
在给定的标题和描述中,我们看到了两个关键的日志框架——`log4j`和`SLF4J(Simple Logging Facade for Java)`,以及它们之间的桥接器`slf4j-log4j12`。这些组件是Java日志处理的常用工具,让我们详细了解一下它们...
**log4j-api-2.12.4.jar** 是Log4j 2框架的API模块,它包含了日志记录的基本接口和类,如`Logger`, `Level`, `Appender`, `Layout`等。这些接口和类为应用程序提供了一种与具体实现解耦的方式来进行日志记录。开发者...
总的来说,SLF4J-log4j12-1.7.7.jar在Java日志处理中扮演着关键角色,它提供了方便的日志框架切换能力和与Log4j1.2的集成,使得开发者可以灵活地管理和控制应用程序的日志输出。然而,随着技术的发展,考虑升级到更...
Log4j作为Java平台广泛使用的日志框架,因其高效、灵活的特性而备受青睐。然而,任何软件都可能存在安全隐患,Log4j也不例外。这次我们关注的是"logging-log4j2-log4j-2.16.0-rc1.zip"这个压缩包,它包含了Log4j ...
Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...
总的来说,log4j-api-2.17.1.jar和log4j-core-2.17.1.jar是Log4j2的核心组件,它们共同构建了一个强大且可扩展的日志框架。开发者应熟悉这两个库的职责和交互方式,以便充分利用Log4j2的功能,同时确保系统的安全性...
标题提及的是"log4j-API-最新稳定版本log4j-1.2.17",这表明我们关注的是日志框架Log4j的一个特定版本,即1.2.17。Log4j是Apache软件基金会开发的一个用于Java应用程序的日志记录工具,它提供了灵活的日志记录功能,...
在描述中提到"dbunit新版本所需要的的依赖包",意味着SLF4J-log4j12.jar可能是DBUnit测试框架的一部分,用于记录测试过程中的日志信息,帮助开发者追踪和调试问题。 4. **依赖管理**:在Java项目中,依赖管理是非常...
SLF4J (Simple Logging Facade for Java) 是一个用于各种日志框架的简单抽象,例如java.util.logging、Logback 和 Log4j。它的主要目的是为应用程序提供一个可插入的日志接口,允许最终用户在部署时插入所需的日志库...
总的来说,Apache Log4j是一个强大且灵活的日志框架,对于开发人员来说,理解和熟练使用它可以提高应用程序的可维护性和安全性。定期更新到最新版本,尤其是当有安全更新时,是保持系统安全的关键。
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
标题中的"slf4j-log4j12-1.7.12.jar"是SLF4J的一个绑定包,它的作用是将SLF4J API与log4j日志框架连接起来。具体来说,这个版本(1.7.12)的绑定包实现了SLF4J的API,并将其桥接到log4j的实现上,使得开发者可以通过...
Log4j,作为Apache开源组织的一个杰出项目,长期以来一直是Java应用程序首选的日志框架之一。然而,随着技术的发展,安全问题也日益凸显,Log4j 2.15.1-RC1的发布,正是针对此类问题进行的一次关键更新,旨在修复...
其次,`log4j-1.2.17.jar`是Apache Log4j的一个较旧版本,Log4j是Java世界中广泛使用的日志框架。它提供了丰富的配置选项,允许开发者控制日志输出的格式、级别、目的地等。Log4j 1.2.17包含了各种appender(日志...
总之,`slf4j-log4j12-1.7.2.jar`是一个方便的工具,它使得Java应用程序可以利用SLF4J的灵活性,同时使用Log4j 1.2进行日志记录。了解如何正确地集成和使用这个绑定包,对于提升Java项目的日志管理和维护能力至关...
2. **log4j-couchdb**:CouchDB是一个开源的文档数据库,此组件使得Log4j可以将日志数据存储到CouchDB中,便于数据分析和检索。新版本可能增强了数据存储的性能和安全性,以及与CouchDB的兼容性。 3. **log4j-...
Apache Log4j2是一款广泛使用的Java日志框架,它允许应用程序记录各种运行时信息,以帮助开发者调试问题、监控系统性能以及追踪安全事件。然而,2021年底,一个严重漏洞被发现,被称为“Log4Shell”或CVE-2021-44228...
Log4j2的设计目标是提供灵活的日志记录方式,包括异步日志记录、动态配置、插件架构等特性,使得它在性能和可扩展性方面优于其他日志框架。 二、Spring Boot与Log4j2的结合 Spring Boot通过starter机制简化了第三...
Log4j是Apache组织开发的一款广泛使用的开源日志框架,而Log4j 2.15.0-rc2是其一个重要的版本,修复了一些安全漏洞并引入了新的功能。本文将详细解析这个版本中的核心组件及其作用。 1. **Log4j-api-2.15.0.jar**:...