【问题标题】:Separate log files for different webapp in the same servlet container同一 servlet 容器中不同 webapp 的单独日志文件
【发布时间】:2016-05-02 18:28:45
【问题描述】:

假设我有 2 个 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 环境中单独的日志文件的正确方法是什么?

【问题讨论】:

  • 我不是 weblogic 专家,但通常记录器类由服务器在根类加载器中加载,因此您将只有一个记录器管理器,因此它只加载一个配置。但是您可以在服务器级别设置配置并按命名空间创建 2 个文件。

标签: java servlets logging web-applications


【解决方案1】:

如果您使用默认的 LogManager 类,则调用 readConfiguration 将重置日志记录配置。

一种解决方案是使用或构建一个对 Web 类加载器(如 org.apache.juli.ClassLoaderLogManager)敏感的新 LogManager,并使用该日志管理器启动服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多