在我的默认cstr中我实例化我的log4j记录器,其中我想在运行时发送日志文件目录路径。
我的默认cstr有:
logger = new LoggerSetup().SetLogger(Logger.getLogger(ServiceController.class), "FileLogger", LogDirPath);
我在我的属性文件中设置了路径,并通过
读取@Value("#{settings['ApplicationLogDirPath']}")
private String LogDirPath;
但是,在@Value
连接之前调用cstr时,cstr中的LogDirPath始终为null。
是否有其他注释我应该使用其他有更好的方法吗?
我想要实现的是设置从日志文件动态设置log4j日志路径,此外我的控制器需要2个记录器,以便将应用程序级日志记录到一个位置并且长时间运行的数据库调用[控制器调用biz layer]写入另一个位置。控制器在调用biz层之前记录,然后一旦biz层返回它就记录下来,因此记录2个不同的日志文件。客户需要这种奇怪的日志记录,因此它就是
答案 0 :(得分:1)
您可以使用$ {log.dir}属性替换技术。方法如下:
String dynamicLog = // log directory somehow chosen...
Properties p = new Properties( Config.ETC + "/log4j.properties" );
p.put( "log.dir", dynamicLog ); // overwrite "log.dir"
PropertyConfigurator.configure( p );
Following也应该解决您的问题。
答案 1 :(得分:0)
您可以尝试手动加载属性文件并获取属性
File resource = new File(SO15116168.class.getClassLoader().getResource(".").getFile());
File file = new File(resource.getParent()+"/spring","customprops.properties");
System.out.println(file);
Properties p = new Properties();
p.load(new FileInputStream(file));
String property = p.getProperty("ApplicationLogDirPath");
将SO15116168
替换为您的班级。