java - Log4J - J2EE - 动态变量

标签 java variables dynamic jvm log4j

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

System.setProperty("log_dir", logDirPath);

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

如果我在调试运行时重新加载 Web 服务器,它就会起作用...

** 更新

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 之前初始化属性... 感谢大家!

最佳答案

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

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

关于java - Log4J - J2EE - 动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23625976/

相关文章:

java - 具有通用类型的 WebFlux WebClient

java - 为什么对象的类型是child时,使用parent变量的值而不是child变量的值?

javascript - 标识符和变量之间的区别(在 JavaScript 中)

python - 如何使用 Tkinter 创建自动更新的 GUI?

c - fgets + 动态 malloc/realloc,使用 .txt 作为标准输入

java - 如何在 Linux 上为 Firefox 添加 java 插件?

java - Maven:如何使用 maven-compiler-plugin 指定 Javac 插件参数?

java - 可见时更新 JPopupMenu 高度

java - 从数据库向其赋值后变量为空

php - 使用php mysql动态显示图像