假设我有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& A的所有日志B只写入1个日志文件,取决于最后启动的webapp。
请问在webapp环境中使用单独的日志文件的正确方法是什么?
答案 0 :(得分:0)
如果您使用的是默认的LogManager类,则调用readConfiguration将重置日志记录配置。
一种解决方案是使用或构建对Web类加载器敏感的新LogManager,如org.apache.juli.ClassLoaderLogManager,并使用该日志管理器启动服务器。