Java记录到多个文件

时间:2016-01-26 14:35:35

标签: java logging

我有一个跟踪多个学生的应用程序。在处理该学生的信息时,我希望他们的日志消息进入该日志文件。

logs/system.log
logs/abby.log
logs/brett.log
logs/catherine.log

系统可以动态添加更多学生,因此我无法在日志配置文件中指定每个学生。我怎样才能在运行时指定记录器应该将信息写入catherine.log?

2 个答案:

答案 0 :(得分:0)

您使用的是哪种日志框架?如果您使用Log4j,这是一个示例:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;

public class MyTestClass {
   /* Logger Instance should always be kept static final */
   private static final Logger LOGGER = Logger.getLogger(MyTestClass.class);

   public static void main(String args[]) {

      /* Create Dynamic FileAppender */
      SimpleLayout myLayout = new SimpleLayout();    
      FileAppender nwAppender = new FileAppender(myLayout,"file_nm",false);    

      LOGGER.addAppender(nwAppender);

      LOGGER.setLevel((Level) Level.INFO);

      /* Write Level : Debug */
      LOGGER.debug("*** DEBUG ***");
      /* Write Level : Info */
      LOGGER.info("*** INFO ***");
      /* Write Level : Error */
      LOGGER.info("*** ERROR ***");
   }
}

答案 1 :(得分:0)

  

我怎样才能在运行时指定记录器应该将信息写入catherine.log?

没有logging.properties选项可启用此行为。您必须编写代码来创建记录器(强烈引用)并在该记录器上安装FileHandler。

  

abby.log的消息同时写入系统日志和abby.log。

您应该创建一个记录器名称空间,以便在根记录器上安装系统文件处理程序,并且每个学生都是setUseParentHandlers设置为false的子记录器。

  

如果多个线程正在处理abby,它将打开abby-1,abby-2

这是因为您创建了多个具有相同文件名的FileHandler。创建一个地图并记住你打开的内容。

相关问题