Log4j给不同的logger动态设立不同的配置
Log4j给不同的logger动态设置不同的配置
现在有log4j.properties 配置文件,假如现在需要动态改变 logger 的配置,动态地输出到不同的目录,则可以按如下代码操作:
import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; import org.apache.log4j.Hierarchy; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.RootLogger; public class TestLog4j { public static void main(String[] args) { PropertyConfigurator pc = new PropertyConfigurator(); Properties p = new Properties(); LoggerRepository lr1 = null; LoggerRepository lr2 = null; Logger logger1 = new RootLogger(Level.ALL); Logger logger2 = new RootLogger(Level.ALL); try { //p.load(new FileInputStream("log4j.properties")); p.load(TestLog4j.class.getResourceAsStream("log4j.properties")); lr1 = new Hierarchy(logger1); lr2 = new Hierarchy(logger2); p.setProperty("log4j.appender.D.File", "D:/test1.log"); pc.doConfigure(p, lr1); p.setProperty("log4j.appender.D.File", "D:/test2.log"); pc.doConfigure(p, lr2); logger1.info("hello world logger1"); logger2.info("hello world logger2"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
property 文件如下:
### set log levels ### log4j.rootLogger = debug , stdout , D ### 输出到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n ### 输出到日志文件 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = D:/logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志 log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 保存异常信息到单独文件 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = D:/logs/error.log ## 异常日志文件名 log4j.appender.D.Append = true log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!! log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
执行以后可以动态生成:D:/test1.log 和 D:/test2.log.