在实际工作中,一些需求比如根据不同的日志级别存储不同的日志文件,例如一个文件存储普通的日志记录,比如info级别以上的日志记录,一个文件存储重要操作的日志记录以便于以后追踪和监控,尤其是自动化的一些工具,在运行过程中可能有一些非常重要的操作都是自动完成的,因此这些非常重要的操作有必要用单独的文件来记录使其便于追踪和报警查看问题所在。
一般的日志记录我们都可以直接使用rootLogger来达到目的。
首先,在log4j.properties文件中指定日志的输出地以及输出格式,如下:
log4j.rootLogger=INFO,console,fileAppender
#console---print log information to console
log4j.Appender.console = org.apache.log4j.consoleAppender
log4j.Appender.console.layout = org.apache.log4j.PatternLayout
log4j.Appender.console.layout.ConversionPattern = %-d{yyyyMMdd HH:mm:ss, SSS} %c %p %m%n
#fileAppender---print log information to file
log4j.Appender.fileAppender = org.apache.log4j.DailyRollingFileAppender
log4j.Appender.fileAppender.File = ./log/filelog.log
log4j.Appender.fileAppender.DatePattern = '.'yyyyMMdd
log4j.appender.fileAppender.Layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.Layout.ConversionPattern = %-d{yyyyMMdd HH:mm:ss, SSS} %c %p %m%n
然后,在源代码文件中加入如下语句即可,以获取到对应于rootLogger的记录器
Logger logger = Logger.getLogger(thisClass.class);
(另外,此处使用的是默认的log4j.properties文件来指定日志文件的信息,当然也可以改变这个配置文件使用用户自定义的配置文件来做,只需简单地在上面的语句前面加上如下语句即可
String curDir = System.getProperty(“user.dir”);
PropertyConfigurator.configure(curDir + “/log/agent.properties”);
)
下面我们给出我们实际需要的多记录器的实现方法:
(1)在日志配置文件agent.properties中指定日志的输出地和输出格式等信息,如下所示:
log4j.rootLogger = INFO,console,file
log4j.appender.console = org.apache.log4j.consoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %-d{yyyyMMdd HH:mm:ss SSS} %c %p %m%n
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.file = ./log/filelog.log
log4j.appender.file.DateFormat = '.'yyyyMMdd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyyMMdd HH:mm:ss, SSS} %c %p %m%n
#指定另外一个记录器,而不是刚才的rootLogger
log4j.logger.warnLogger = WARN,warnFileAppender
log4j.appender.warnFileAppender = org.apache.log4j.DailyRollingFileAppender
log4j.appender.warnFileAppender.file = ./log/warnLog.log
log4j.appender.warnFileAppender.DatePattern = '.'yyyyMMdd
log4j.appender.warnFileAppender.Layout = org.apache.log4j.PatternLayout
log4j.appender.warnFileAppender.Layout.ConversionPattern = %-d{yyyyMMdd HH:mm:ss, SSS} %c %p %m%n
在Java源代码文件中,可以使用如下语句获取到两个不同的记录器:
String curDir = System.getProperty(“user.dir”);
PropertyConfigurator.configure(curDir + “/agent.properties”);
public static Logger rootLogger = Logger.getLogger(thisClass.class);
private static Logger warnLogger = Logger.getLogger(“warnLogger”);
rootLogger.info(“Hello, this is root Logger”);
warnLogger.warn(“This is another Logger -warnFileLogger”);
也就是说,相对于rootLogger来说,定义另外一个Logger需要以下一些代码来完成:
(1)在配置文件中使用log4j.logger.loggerName指定一个新的记录器并指定Logger将日志记录到哪里以及记录格式等信息
(2)在源代码文件中,用如下代码来获取到相应的记录器,参数使用在配置文件中定义的记录器名字来引用,而不是像前面那样,可以使用类名.class来引用到rootLogger
Logger logger = Logger.getLogger(loggerName)
(3)和rootLogger一样,可以使用debug、info、warn、error等来想日志输出信息。