log4j的配置和多日志文件生成

时间:2022-12-22 18:34:18
问题1:log4j输出多个自定义日志文件

log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j基础上稍加配置即可轻松实现这一功能。

#debug level and console
log4j.rootLogger=DEBUG, A1

#console output
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=INFO
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %p [%c] - %m%n

#file output
log4j.logger.CTCCSOCEKET_REPORT=INFO, CTCCSOCKET_REPORT
log4j.appender.CTCCSOCKET_REPORT=org.apache.log4j.RollingFileAppender
log4j.appender.CTCCSOCKET_REPORT.Threshold=INFO
log4j.appender.CTCCSOCKET_REPORT.File=./logs/ctccsocket-report-msg.log
log4j.appender.CTCCSOCKET_REPORT.Append=8000KB
log4j.appender.CTCCSOCKET_REPORT.MaxFileSize=8000KB
log4j.appender.CTCCSOCKET_REPORT.MaxBackupIndex=20
log4j.appender.CTCCSOCKET_REPORT.layout=org.apache.log4j.PatternLayout
log4j.appender.CTCCSOCKET_REPORT.layout.ConversionPattern=%d %p [%c] - %m%n


#file output
log4j.logger.CTCCSOCEKET_SYNC=INFO, CTCCSOCKET_SYNC
log4j.appender.CTCCSOCEKET_SYNC=org.apache.log4j.RollingFileAppender
log4j.appender.CTCCSOCEKET_SYNC.Threshold=INFO
log4j.appender.CTCCSOCEKET_SYNC.File=./logs/ctccsocket-sync-msg.log
log4j.appender.CTCCSOCEKET_SYNC.Append=8000KB
log4j.appender.CTCCSOCEKET_SYNC.MaxFileSize=8000KB
log4j.appender.CTCCSOCEKET_SYNC.MaxBackupIndex=20
log4j.appender.CTCCSOCEKET_SYNC.layout=org.apache.log4j.PatternLayout
log4j.appender.CTCCSOCEKET_SYNC.layout.ConversionPattern=%d %p [%c] - %m%n

可以实现同一个类中,定义多个不同的自定义日志文件

public class MsgWriter {

private static Logger CTCCSOCKET_REPORT = Logger.getLogger("CTCCSOCKET_REPORT");
private static Logger CTCCSOCKET_SYNC = Logger.getLogger("CTCCSOCKET_SYNC");

public static void getReportMsg(){
CTCCSOCKET_REPORT.info("CTCCSOCKET_REPORT");
}

public static void getSyncMsg(){
CTCCSOCKET_SYNC.info("CTCCSOCKET_SYNC");
}

public static void main(String[] args) {
MsgWriter.getReportMsg();
MsgWriter.getSyncMsg();
}
}

问题2:对于log4j.properties文件的放置

自动加载配置文件:

在log4j启动的时候(一般是静态Logger对象初始化的时候),这时候会去到资源文件夹目录下(一般是Resource)找log4j.properties文件。如果log4j.properties文件已经放置在资源文件夹下面,就不需要在代码中自动去考虑实现了。但是一般项目开发中都会把属性文件放置在conf的文件夹下,这时候需要进行设置。把conf设置为资源文件,在编译的时候会发现conf文件夹下的所有文件都会出现在编译bin中。设置步骤如下图所示:

log4j的配置和多日志文件生成

如果需要在代码中进行加载实现。
(1) propertyConfigurator.configure(“log4j.properties”) 默认读取的是项目根目录的路径。此时的log4j.properties要放在项目目录下。
log4j.properties和src放置在同级的目录下,都在根目录。如图所示:

log4j的配置和多日志文件生成

(2) 一般一个Java项目会有很多的配置文件,建议把所有的配置文件放到一个文件夹下。例如,放到config文件夹。那么在读取这些配置文件的时候要加上子目录名称。
如图在项目目录下创建config文件夹(注意:不是在src文件下),此时config和src是同级目录
这时,读取路径改为:

PropertyConfigurator.configure(“config/log4j.properties”);
路径设置如下图所示:
log4j的配置和多日志文件生成

(3)如果不用人为写加载属性文件的代码,只接默认读取,可以把属性文件直接放置在src目录下。

对于项目打成jar包的时候,属性文件是不会和代码放在同一个jar中,对于以上两种情况属性文件都可以放置和代码jar同级的目录下。

附加说明: 在常用的工程项目中,比方说Maven项目,生成的工程中都会存在resources文件夹,这个文件夹放置属性文件或者配置文件都是不需要在代码层去实现加载的,可以自动加载的。如果工程中没有这个文件夹存在,可以手动设置某个文件夹为资源文件夹。具体操作如上图所示,右键-build path。

参考博客:
1、http://blog.csdn.net/lifuxiangcaohui/article/details/11042375
2、http://blog.csdn.net/janestone/article/details/1862678