【问题标题】:Changing the log path on fly即时更改日志路径
【发布时间】:2011-11-26 20:08:31
【问题描述】:

我正在使用 log4j 在我的应用程序中记录活动。我想从数据库中获取日志路径。 现在我需要动态配置我的 log4j 属性。

我们是否可以即时更改 log4h 日志记录路径..

请提出建议。

谢谢

【问题讨论】:

标签: java log4j


【解决方案1】:

创建单独的属性文件来保存特定环境相关设置示例:

**uatLog4j.properties**
#######################
UAT Settings
#######################

{Add your Settings here}

另一个用于sy生产环境。

**productionLog4j.properties**
########################
PRODUCTION settings
########################

{Add your Settings here}

然后使用 IP 地址或服务器名称 来确定部署的平台,根据需要将路径从数据库传递到所需的环境属性文件。

您也可以使用LogManager 检索 Logger 实例或对当前 LoggerRepository 进行操作。请参阅 JavadocRepositorySelecter 示例。

注意: 您可以使用 XML 实现相同的目的。

【讨论】:

    【解决方案2】:

    您应该创建一个在启动时加载的类并配置 log4j。 这是我在 JavaEE 项目中使用的代码,它从外部目录加载配置文件:

    public class InitListener implements ServletContextListener {
    
    public InitListener() {
    }
    
    public void contextInitialized(ServletContextEvent sce) {
        try {
            File    file  = null;
            file = new File(System.getProperty("catalina.base") + "/conf/query-log4j.xml");
            DOMConfigurator.configure(file.toURL());
            System.out.println("Log4J successfully configured!");
        } catch(Exception e) {
            System.out.println("There was an error when initialize the Log4J config!");
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    
    public void contextDestroyed(ServletContextEvent sce) {
    }
    

    }

    【讨论】:

    • 嗨,谢谢您的回复,我的实际问题是如何动态更改日志路径。我不能硬编码环境中的路径。
    【解决方案3】:

    如果您使用的是MentaLog,您所要做的就是:

    yourLogger.setFilename("newfilenamehere.log");
    

    您的日志将自动以新名称重新打开。在我个人看来,programmatic configuration 是检查 XML 和/或注释的方法。它提供了无与伦比的灵活性和易用性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2019-12-19
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多