Log4J动态地创建日志文件[英] Log4J dynamically create log file

本文是小编为大家收集整理的关于Log4J动态地创建日志文件的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

我已经在每个过程运行时间成功创建了一个日志.我现在遇到的问题是当前运行过程中不是孩子的任何软件包不会将其日志写入我的文件.例如,我创建一个名为Running-.log的新日志文件.正在运行的过程是com.me.foo此类内部的foo,在com.you中有一个呼叫的方法,在com.zee中有一个方法.我想让com.you and com.zee logs写入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);

推荐答案

我缺少rootlogger.更改了这条线

Logger logger = Logger.getLogger(packaging);

to

Logger logger = Logger.getRootLogger();

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

本文地址:https://www.itbaoku.cn/post/1574942.html

问题描述

I have successfully created a log at each process run time. The issue I am having now is any packages that are called that are not children of the current running process does not write its log to my file. For example I create a new log file called running-.log. The process that is running is com.me.foo inside of this class there is a call to a method in com.you and another one in com.zee . I would like to have com.you and com.zee logs write to the running-.log and not to the console log. It isn't as simple as just changing the getLogger() method to be a child of com.me.foo. Some of the logs are written out from third party jars. I am at a loss. If you need to see more code or some additional info, please let me know. There has to be another way to handle this.

Thanks

Code to create the log file dynamically

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);

推荐答案

I was missing the rootLogger. Changed this line

Logger logger = Logger.getLogger(packaging);

to

Logger logger = Logger.getRootLogger();

If someone has a better way please let me know.