0

在我的默认 cstr 中,我实例化了我的 log4j 记录器,其中我想在运行时发送日志文件目录路径。

我的默认 cstr 有这个:

logger = new LoggerSetup().SetLogger(Logger.getLogger(ServiceController.class), "FileLogger", LogDirPath);

我在我的属性文件中设置了路径,我通过

@Value("#{settings['ApplicationLogDirPath']}")
private String LogDirPath;

但是,由于在连接之前调用@Value了 cstr,因此 cstr 中的 LogDirPath 始终为空。

是否还有其他我应该使用的注释是否有更好的方法?

我想要实现的是从日志文件中动态设置 log4j 日志路径,此外我的控制器需要 2 个记录器,以便将应用程序级日志记录到一个位置,并且长时间运行的数据库调用 [控制器调用 biz 层] 写入到另一个位置。控制器在调用 biz 层之前记录,然后一旦 biz 层返回它就会记录该记录,因此会记录 2 个不同的日志文件。客户需要这种奇怪的日志记录,所以它就是这样

4

2 回答 2

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 );

以下也应该解决您的问题。

于 2013-02-27T15:55:45.630 回答
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为您的班级。

于 2013-02-27T16:29:44.713 回答