Java Log4J动态创建日志文件

Java Log4J动态创建日志文件,java,logging,log4j,Java,Logging,Log4j,我已在每个进程运行时成功创建了日志。我现在遇到的问题是,任何被调用的包如果不是当前运行进程的子进程,就不会将其日志写入我的文件。例如,我创建了一个名为running-.log的新日志文件。正在运行的进程是com.me.foo在这个类中有一个对com.you中的方法的调用和对com.zee中的另一个方法的调用。我想让com.you和com.zee日志写入正在运行的-.log,而不是控制台日志。这并不像将getLogger()方法更改为com.me.foo的子方法那么简单。一些日志是从第三方JAR中

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

谢谢

动态创建日志文件的代码

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日志

private static Logger logger = LoggerFactory.getLogger(Zee.class);
你登录了吗

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

我错过了根记录器。换了这条线

Logger logger = Logger.getLogger(packaging);

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

Logger logger = Logger.getRootLogger();