我已在每个进程运行时成功创建了日志。我现在遇到的问题是,任何被调用的不是当前正在运行的进程的子进程的包都不会将其日志写入我的文件。例如,我创建一个名为 running-.log 的新日志文件。正在运行的进程是 com.me.foo ,该类内部调用了 com.you 中的一个方法,以及 com.zee 中的另一个方法。我想让 com.you 和 com.zee 日志写入 running-.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);
com.you 登录
private static Logger logger = LoggerFactory.getLogger(You.class);
最佳答案
我缺少 rootLogger。更改了这一行
Logger logger = Logger.getLogger(packaging);
到
Logger logger = Logger.getRootLogger();
如果有人有更好的方法请告诉我。
关于java - Log4J动态创建日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645052/