java - Log4J动态创建日志文件

标签 java logging log4j

我已在每个进程运行时成功创建了日志。我现在遇到的问题是,任何被调用的不是当前正在运行的进程的子进程的包都不会将其日志写入我的文件。例如,我创建一个名为 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/

相关文章:

java - 无法显示库的 JFrame

java - 有没有办法在 Log4j 日志消息中显示用户数据?

java - log4j:记录一个包,但不包括它的子包

python - 惯用的 Python 日志记录 : format string + args list vs. 内联字符串格式 - 哪个是首选?

logging - Android Lollipop 内核中的记录器驱动程序

c# - 删除 Serilog 输出中的默认属性

sql - 如何使用 hibernate 记录最终的 SQL 查询

java - 如何制作对象的副本并与原始对象进行比较

java - 在 Spring 4.0.6 中无法将值从 Controller 发送到文件 jsp

java - 扩展类与添加 boolean 参数