簡體   English   中英

Log4J-J2EE-動態變量

[英]Log4J - J2EE - dynamic variable

在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。 滾動到“ Tomcat”下的“默認初始化”,並記住,您只需要指定屬性即可,而不是log4j配置文件。

您應該告訴我們何時設置了此屬性,但為時已晚。 通常在設置此屬性之前很早就初始化Log4j。 我建議您在Web服務器啟動腳本的初始化塊中設置此參數。 使用-Dlog_dir=path語法。

PS是什么服務器? Tomcat的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM