【问题标题】:Log4J - J2EE - dynamic variableLog4J - J2EE - 动态变量
【发布时间】:2014-06-30 19:34:45
【问题描述】:

在 log4j.xml 配置中使用 JVM 变量不起作用...

System.setProperty("log_dir", logDirPath);

<param name="file" value="${log_dir}\toto.log" />

如果我在调试时重新加载我的网络服务器,它会起作用...

** 更新

package com.webapp.startup;

import java.io.PrintStream;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.webapp.objects.impl.LoggingOutputStream;

public class Log4jStartup implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }

    @Override
    public void contextInitialized(ServletContextEvent event) {
        try {
            ServletContext context = event.getServletContext();

            System.setProperty("log_dir", "C:/path");

            System.setErr(new PrintStream(new LoggingOutputStream(Logger.getRootLogger(), Level.ERROR), true));
            System.setOut(new PrintStream(new LoggingOutputStream(Logger.getRootLogger(), Level.INFO), true));

            String path = context.getRealPath("/WEB-INF/classes/log4j.xml");
        PropertyConfigurator.configure(path);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在 setErr 和 setOut 之前初始化属性... 谢谢大家!

【问题讨论】:

    标签: java variables dynamic jvm log4j


    【解决方案1】:

    您可能在 log4j 系统初始化后填充该属性。

    为了在之前完成它,您可以在启动服务器时从命令行提供它,或者使用像this example 中的初始化 servlet。滚动到 Tomcat 下的默认初始化,记住您只需要指定属性而不是 log4j 配置文件。

    【讨论】:

    • 确实,我在监听器中设置属性太晚了...我会在答案中发布解决方案!
    【解决方案2】:

    您应该在设置此属性时告诉我们,但为时已晚。 Log4j 通常在设置此属性之前很早就初始化。我建议您在 Web 服务器启动脚本的初始化块中设置此参数。使用-Dlog_dir=path 语法。

    PS 它是什么服务器?雄猫?

    【讨论】:

    • 是的,使用 Tomcat,我在第一个监听器中设置了这个属性: com.webapp.startup.Log4jStartup 我做了一个 PropertyConfigurator.configure(myConfig)
    • 尝试在 Catalina.bat 中添加属性。
    • 但是属性是动态的,当我启动我的 webbapp 时我得到它
    • 我明白了。你能更深入地描述一下这个用例吗?
    • 我想动态定义存储日志的路径。此路径在 webapp 的 xml 文件中定义。所以我想在 JVM 变量中设置路径并将其发送到 log4j 配置。
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多