Log4J动态创建日志文件

时间:2013-12-17 21:28:22

标签: java logging log4j

我已在每个进程运行时成功创建了一个日志。我现在遇到的问题是任何被调用的包不是当前正在运行的进程的子进程的包不会将其日志写入我的文件。例如,我创建了一个名为running-.log的新日志文件。正在运行的进程是com.me.foo,在这个类中有一个com.you中的方法调用和com.zee中的另一个方法。我想让com.you和com.zee日志写入running-.log而不是控制台日志。它不仅仅是将getLogger()方法更改为com.me.foo的子代。一些日志是从第三方罐子写出来的。我很茫然。如果您需要查看更多代码或其他信息,请告诉我们。必须有另一种方法来处理这个问题。

由于

动态创建日志文件的代码

public void createLogInstance(String packaging,String appenderName, String logFileName){
  Logger logger = Logger.getLogger(packaging);

  Appender fileAppender = logger.getAppender(appenderName);

  if(fileAppender != null){
     logger.removeAppender(fileAppender);
  }

  //Create the root appender
  ConsoleAppender console = new ConsoleAppender();

  String pattern = ....;
  console.setLayout(new PatternLayout(pattern));
  console.setThreshold(Level.FATAL);
  console.activateOptions();

  logger.addAppender(console);

  FileAppender fa = new FileAppender();
  fa.setName(appenderName);
  fa.setFile(logFileName);
  fa.setLayout(new PatternLayout(..));
  fa.setThreshold(Level.DEBUG);
  fa.setAppend(true);
  fa.activateOptions();
  logger.setAdditivity(false);

  logger.addAppender(fa);


}

com.zee log

private static Logger logger = LoggerFactory.getLogger(Zee.class);

com.you log

private static Logger logger = LoggerFactory.getLogger(You.class);

1 个答案:

答案 0 :(得分:0)

我错过了rootLogger。改变了这一行

Logger logger = Logger.getLogger(packaging);

Logger logger = Logger.getRootLogger();

如果有人有更好的方法请告诉我。