在飞行中更改日志路径

时间:2011-09-28 12:17:23

标签: java log4j

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

我们是否可以动态更改log4h日志记录路径。

请建议。

由于

3 个答案:

答案 0 :(得分: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) {
}

}

答案 1 :(得分:1)

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

yourLogger.setFilename("newfilenamehere.log");

您的日志将使用新名称自动重新打开。在我个人看来,programmatic configuration是浏览XML和/或注释的方法。它具有无与伦比的灵活性和易用性。

答案 2 :(得分:0)

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

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

{Add your Settings here}

另一个用于sy生产环境。

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

{Add your Settings here}

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

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

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