我正在使用log4j来记录我的应用程序中的活动。我想从数据库中获取日志路径。 现在我需要动态配置我的log4j属性。
我们是否可以动态更改log4h日志记录路径。
请建议。
由于
答案 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进行操作。请参阅Javadoc和RepositorySelecter示例。
注意: 您可以使用XML实现相同的目标。