log4j输出多个自定义日志文件
如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?
先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志:
log4j.rootLogger=DEBUG, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:
private static Log logger1 = LogFactory.getLog("mylogger1");
private static Log logger2 = LogFactory.getLog("mylogger2");
log4j.properties中配置如下:
log4j.logger.mylogger1=DEBUG,test1
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
不同日志要使用不同的logger(如输出到test1.log的要用logger1.info("abc"))。
还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:
log4j.additivity. mylogger1 = false
它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方了。
但是这种方式有个小缺陷,那就是打印的日志中类名只能是mylogger或者mylogger2。
2 动态配置路径
若程序需要的日志路径需要不断的变化,而又不可能每次都去改配置文件,此时可以利用环境变量来解决。
log4j的配置如下:
log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG
#info log
log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
log4j.appender.INFOLOG.Threshold=INFO
log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#debug log
log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
log4j.appender.DEBUGLOG.Threshold=DEBUG
log4j.appender.DEBUGLOG.MaxFileSize=128MB
log4j.appender.DEBUGLOG.MaxBackupIndex=3
log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
此时,在使用log打印日志之前,需要利用System定义日志的输出路径和文件名的环境变量:
System.setProperty(“log.dir”, logDir);
System.setProperty(“log.info.file”, infoLogFileName);
System.setProperty(“log.debug.file”, debugLogFileName);
附:Pattern参数的格式含义
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2013-8-19- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
http://m.jb51.net/show/45525
相关推荐
要实现输出多个自定义路径的日志文件,我们需要在Log4j的配置文件(通常是`log4j.properties`或`log4j.xml`)中定义多个Appender。Appender是Log4j中负责将日志信息输出到指定目的地的组件,例如文件、控制台、网络...
- 要实现不同线程的日志分别输出,我们需要创建一个自定义的Log4j2配置文件(通常为`.xml`或`.json`格式)。配置文件中,我们可以定义多个Appenders(输出目的地),每个Appender可以关联不同的日志级别和线程上...
本话题将深入探讨如何使用Log4j实现多文件输出打印,以及自定义日志的配置。 首先,我们要理解Log4j的基本工作原理。Log4j的核心组件包括Logger、Appender和Layout。Logger负责生成日志事件,Appender则负责接收...
Log4j提供了多个日志级别,从低到高依次为:DEBUG、INFO、WARN、ERROR和FATAL。不同的日志级别用于记录不同程度的信息,例如DEBUG用于调试,INFO用于常规信息,WARN用于警告,ERROR和FATAL则用于严重错误。动态设置...
Log4j提供了一个名为`org.apache.log4j.ConsoleAppender`的类,用于将日志输出到控制台,我们可以通过自定义Filter或者继承现有Appender来实现这个功能。 下面是一个简单的示例,展示如何在Log4j配置文件中设置...
Log4j允许我们自定义日志信息的显示格式。例如,`PatternLayout`允许我们使用特定模式字符串来控制输出。如`%d{ABSOLUTE} %5p %c{1}:%L - %m%n`表示时间戳、优先级、类名、行号和消息内容。 **五、Appender的扩展**...
Log4Cpp是一个流行的C++日志库,它模仿了Java的Log4j框架,提供了灵活的日志输出功能。本篇文章将深入探讨如何利用Log4Cpp有效地将日志输出到文件,实现最佳实践。 首先,理解Log4Cpp的基本结构至关重要。Log4Cpp...
3. **自定义日志输出目的地**:Log4j支持将日志输出到控制台、文件、数据库甚至网络。通过配置`Appender`,我们可以选择将日志发送到自定义的位置,如自定义的FTP服务器或者HTTP接口。 4. **自定义日志过滤器**:...
`log4j配置输出日志案例.doc`文档中应该包含了更详细的配置和实际运行案例,包括如何调整日志级别、设置过滤器、自定义日志格式等。这些案例可以帮助读者更好地理解和应用log4j,解决实际开发中的日志管理问题。 ##...
Log4j允许开发者自定义日志输出的方式,包括输出到控制台、文件、数据库等。它使用了`QuietWriter`类来写入日志,`QuietWriter`继承自`FilterWriter`,而`FilterWriter`又继承自`Writer`。`Writer`类处理的是字符流...
在IT行业中,日志记录是调试和监控应用程序的关键部分,特别是对于Java开发者而言,Log4j是一个非常常用的日志框架。当我们遇到“无法打出log4j日志的问题”,这通常是由于配置、环境或代码实现中的某些错误导致的。...
这个压缩包“java-日志-log4j.7z”显然是关于Log4j的资源集合,可能包含了示例代码、配置文件或教程文档,帮助用户理解和使用Log4j。 首先,Log4j的核心概念包括Logger、Appender、Layout和Level。Logger是记录日志...
在Log4j中,我们可以自定义日志格式来包含时间戳。例如,在`log4j.properties`配置文件中添加以下内容: ``` log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n ``` ...
1. **Logger**:类似于Java内置的日志系统,Log4j的Logger也是用于记录日志的类,但它的优点在于可以动态地改变日志级别,且支持多个命名的Logger。 2. **Appender**:Appender负责将日志信息输出到指定的地方,如...
Log4j的优势在于其灵活性,通过配置文件(如`log4j.properties`)即可调整设置,无需修改代码,且支持跨语言平台,如C、C++、.Net、PL/SQL等,便于构建多语言分布式系统的日志一致性。 配置Log4j主要分为三个步骤:...
此外,Log4j还支持过滤器(Filter)和自定义日志处理器,可以进一步精细化日志管理。例如,我们可以通过自定义Filter来控制特定类或方法的日志输出,或者编写自定义Layout来实现特殊的日志格式。 总结起来,`Log4j`...
除了基础的多文件输出,Log4j还支持更复杂的配置,如异步日志、自定义日志等级、归档策略(如按大小或时间滚动)、以及与其他系统的集成(如发送日志到ELK栈、Sentry等)。 六、总结 理解并熟练运用Log4j的多文件...
Log4j是一个广泛使用的Java日志框架,它提供了强大的日志处理功能,包括日志级别控制、自定义日志格式、多路复用等。然而,由于Android系统对第三方库的限制,直接在Android工程中使用Log4j需要一些额外的步骤。本文...
- **日志级别**:Log4j支持多个日志级别,从低到高分别是TRACE, DEBUG, INFO, WARN, ERROR, FATAL。在配置文件中,可以设置每个logger或root logger的级别,控制输出的日志级别。 4. **日志输出格式** - **...