java - 在 log4j 中使用系统属性或变量

标签 java log4j

我想这样做:

<appender name="ErrorLog" class="org.apache.log4j.FileAppender">
        <param name="File" value="${error.log.path}"/>
        <param name="Append" value="true" />
        <param name="Threshold" value="ERROR"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%C{1} %L [%t] %d{dd MMM,yyyy HH:mm:ss.SSS} %-5p - %m%n" />
        </layout>
    </appender>

注意这一行:<param name="File" value="${error.log.path}"/>

我试着像这样设置值:

public static void main(String[] args) {
     System.setProperty("error.log.path", "/test/crm/log/error.log");
     ApplicationContext context = new ClassPathXmlApplicationContext("blah.xml");
     ..........
     .......... 
  }

但我没有看到任何效果。

是否在调用 main 之前配置了 log4j?方法?

还有其他方法吗?

最佳答案

this thread

看起来你做的一切都是对的。我认为使用 System.setProperty() 在主类中设置属性与通过命令行指定它之间没有任何区别,只要它发生在实际 log4j 初始化之前。

我认为您的问题是在您指定属性之前加载了您的日志记录框架。 我可以说当您调用配置器时,日志框架 (log4j) 将被配置。像 BasicConfigurator.configure() 这样的东西(在你的例子中是它的 xml 配置器)。

否则,第一次尝试使用日志记录将导致出现类似“log4j 未正确配置”的消息。

真正的问题是您的带有“main”的代码片段是否过于简单。

考虑到这一点,我不得不问另一个问题 - 您是在某个容器中运行还是在运行真正的普通方法 main 并自行配置所有内容?我问是因为如果您在容器中运行,容器很可能会以某种方式自行配置其日志记录,例如 JBoss 会这样做。在这种情况下,需要进行更多调查。

希望对你有帮助

关于java - 在 log4j 中使用系统属性或变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14332525/

相关文章:

log4j - 通过匹配模式过滤日志-log4j

linux - 在 Linux 中,log4j.appender.R.File 的默认根目录在哪里?

java - BST 包含在 JAVA 中无法正常工作的方法

java - UrlRewrite 不重定向某些文件

java - 如何使用log4j在java中的syslog服务器中写入单独的日志文件

java - Log4j:具有特化的多个类别

tomcat - 如何登录jar库的静态 block

java - 如何在java中使用数据源对象获取数据库配置

java - 尝试使用 libGDX 编码时出现错误

java - Google App Engine 应用程序实例回收和响应时间