【发布时间】:2011-11-26 20:08:31
【问题描述】:
我正在使用 log4j 在我的应用程序中记录活动。我想从数据库中获取日志路径。 现在我需要动态配置我的 log4j 属性。
我们是否可以即时更改 log4h 日志记录路径..
请提出建议。
谢谢
【问题讨论】:
-
查看stackoverflow.com/questions/4598702/… 了解动态更改日志配置的一些方法。
我正在使用 log4j 在我的应用程序中记录活动。我想从数据库中获取日志路径。 现在我需要动态配置我的 log4j 属性。
我们是否可以即时更改 log4h 日志记录路径..
请提出建议。
谢谢
【问题讨论】:
创建单独的属性文件来保存特定环境相关设置示例:
**uatLog4j.properties**
#######################
UAT Settings
#######################
{Add your Settings here}
另一个用于sy生产环境。
**productionLog4j.properties**
########################
PRODUCTION settings
########################
{Add your Settings here}
然后使用 IP 地址或服务器名称 来确定部署的平台,根据需要将路径从数据库传递到所需的环境属性文件。
您也可以使用LogManager 检索 Logger 实例或对当前 LoggerRepository 进行操作。请参阅 Javadoc 和 RepositorySelecter 示例。
注意: 您可以使用 XML 实现相同的目的。
【讨论】:
您应该创建一个在启动时加载的类并配置 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) {
}
}
【讨论】:
如果您使用的是MentaLog,您所要做的就是:
yourLogger.setFilename("newfilenamehere.log");
您的日志将自动以新名称重新打开。在我个人看来,programmatic configuration 是检查 XML 和/或注释的方法。它提供了无与伦比的灵活性和易用性。
【讨论】: