Java日志记录到多个文件

Java日志记录到多个文件,java,logging,Java,Logging,我有一个记录多个学生的应用程序。在处理该学生的信息时,我希望他们的日志消息进入该日志文件 logs/system.log logs/abby.log logs/brett.log logs/catherine.log 系统可以动态添加更多学生,因此我无法在日志配置文件中指定每个学生。如何在运行时指定记录器应将信息写入catherine.log?您使用的是哪个日志框架?下面是一个使用Log4j的示例: import org.apache.log4j.Level; import org.apach

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

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

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

您使用的是哪个日志框架?下面是一个使用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 ***");
   }
}
我如何在运行时指定记录器应将信息写入catherine.log

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

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

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

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


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

谢谢您的回复。我正在使用java.util.logging。如果我需要使用一个不同的框架来实现这一点,我会的。否则,我不愿意在整个程序中更改日志记录。没有必要更改任何内容。您可以开始在Log4J中使用SLF4J,只需将JUL桥接到SLF4J。更多信息:在您的示例代码中,我是否需要为希望写入的每个文件创建一个新的记录器?如果我只是将多个FileAppender添加到一个记录器,日志消息将转到所有文件,否?是的,如果将多个FileAppender添加到一个记录器,则消息将转到所有文件。我的目的是写入多个文件。创建文件处理程序的映射?这应该是静态的并以某种方式传递到我的线程中吗?对。否则,如果每个学生都有一个唯一的记录器,则通过调用logger.getHandlers检查记录器上是否安装了文件处理程序。