【问题标题】:setting log path in default cstr在默认 cstr 中设置日志路径
【发布时间】:2013-02-27 15:41:37
【问题描述】:

在我的默认 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 layer ] 写入另一个位置。控制器在调用 biz 层之前记录,然后一旦 biz 层返回它就会记录该记录,因此会记录 2 个不同的日志文件。客户需要这种奇怪的日志记录,所以它就是这样

【问题讨论】:

  • 您可能需要将路径作为 vm 参数传递,例如 -DlogPath=<path>
  • 部署时这是如何工作的?
  • 部署流程是什么
  • 用eclipse构建war文件,停止tomcat,放入webapps,启动tomcat并部署应用程序。停止tomcat,删除war文件并重启tomcat
  • 在这种情况下这是不可能的,如果您使用的是安装程序,我们可以设置参数。是日志位置的来源吗?它是从属性文件加载的吗?

标签: spring-mvc log4j


【解决方案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 也应该解决您的问题。

【讨论】:

  • 我最初尝试使用@PostConstruct,但是当应用程序在服务器模式下以调试模式启动时,它似乎被调用了两次。您提供的文章很有帮助,并得到了与建议类似的解决方案
【解决方案2】:

您可以尝试手动加载属性文件并获取属性

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

【讨论】:

    猜你喜欢
    • 2021-07-30
    • 2021-02-02
    • 2022-11-25
    • 1970-01-01
    • 2011-01-24
    • 2011-07-23
    • 2014-09-19
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多