Java 同一servlet容器中不同webapp的单独日志文件

Java 同一servlet容器中不同webapp的单独日志文件,java,servlets,logging,web-applications,Java,Servlets,Logging,Web Applications,假设我有两个web应用程序(A和B)托管在同一个weblogic服务器中。我在每个WEB应用程序的/WEB-INF下定义了一个logging.properties文件。属性文件为不同的类定义了一组日志级别,并定义了一个文件处理程序,webapp a将日志写入a.log,webapp B将日志写入B.log。标准java.util.logging包用于日志记录 servlet上下文侦听器的定义使得在初始化上下文时读取logging.properties文件。代码片段如下所示: In

假设我有两个web应用程序(A和B)托管在同一个weblogic服务器中。我在每个WEB应用程序的/WEB-INF下定义了一个logging.properties文件。属性文件为不同的类定义了一组日志级别,并定义了一个文件处理程序,webapp a将日志写入a.log,webapp B将日志写入B.log。标准java.util.logging包用于日志记录

servlet上下文侦听器的定义使得在初始化上下文时读取logging.properties文件。代码片段如下所示:

        InputStream is = sCtx.getResourceAsStream("/WEB-INF/logging.properties");
        LogManager logManager = LogManager.getLogManager();
        logManager.readConfiguration(is);

        Logger rootLogger = Logger.getLogger("");

        SysLogFileHandler fileHandler;
        try
        {
            String location = SysLogFileHandler.getSysLogFilePath();
            String fileName = SysLogFileHandler.LOG_FILE_PREFIX + "%d.log";

            fileHandler = new SysLogFileHandler(location + File.separator + fileName, true);
            fileHandler.setEncoding(Constant.DEFAULT_CHARSET);

            fileHandler.setLevel(Level.ALL);
            rootLogger.addHandler(fileHandler);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
我希望webapp A中的日志仅写入A.log,webapp B中的日志仅写入B.log。然而,结果并不像预期的那样。A&B中的所有日志仅写入1个日志文件,具体取决于最后启动的webapp


请问在webapp环境中使用单独日志文件的正确方式是什么?

如果使用默认的LogManager类,则调用将重置日志配置


一种解决方案是使用或构建一个新的日志管理器,该日志管理器对web类加载器非常敏感,并使用该日志管理器启动服务器。

我不是weblogic专家,但一般来说,日志类是由根类加载器中的服务器加载的,因此您只有一个日志管理器,因此它只加载一个配置。但您可以在服务器级别设置configuratoin,并按名称空间创建2个文件。