【问题标题】:log4j doesn't read its log4j.properties filelog4j 不读取它的 log4j.properties 文件
【发布时间】:2015-11-06 14:11:34
【问题描述】:

在一个 Maven 项目中,我将 log4j.properties 文件放在 src\main\resources 目录中,这似乎是放置它的常用位置。但是它似乎没有读取它,或者我可以'看不到,因为我的记录器没有打印 DEBUG 级别的消息(尽管它确实打印了 INFO 级别的消息),也没有创建 logs.log 文件。 这是我正在使用的 log4j.properties 文件:

# Root logger option
log4j.rootLogger=DEBUG, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/.../src/main/resources/META-INF/logs.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我还尝试在我的运行配置中将路径传递给 log4j.properties 文件,但它也不起作用: -Dlog4j.configuration=file:D:/.../src/main/resources/log4j.properties 这个项目是通过一个不同的绑定项目启动的,所以我使用了整个文件路径,这可能是不正确的,因为我见过的示例都没有提供完整路径。

我们用来运行应用程序的服务器是 Wildfly 8.1.0,它有自己的 log4j 记录器,所以可能会以某种方式干扰?

这是我的拦截器中应该创建日志的部分:

final static Logger logger = Logger.getLogger(RestInterceptor.class);
...    
if(e instanceof ApplicationException) {
        logger.debug(e.getMessage(), e);
        //TODO remove these when done testing
        logger.debug("debug is working");
        logger.info("info is working");
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    }

但是只有“信息正在工作”正在打印。

【问题讨论】:

  • 这就是我在启动客户端时传递它的方式:-Dlog4j.configuration=file:///D:/dev/settings/log4j.agility.properties 你错过了'/ //' 在您的示例中的“文件:”之后。也许就是这样?
  • 另外,请确保在您的 maven 依赖树中加载了正确的日志提供程序。我曾经遇到过冲突,我必须为包含日志提供程序的依赖项包含
  • 我添加了 '///' 但不幸的是它并没有解决问题。

标签: java maven logging log4j wildfly-8


【解决方案1】:

您确定 src\main\resources 在您的构建路径上吗?

右击你的项目 -> Java Build path [Source Tab]

确保资源文件夹位于构建路径上。 还要确保排除模式 = '**'

【讨论】:

  • @Arquan,如果您的文件夹在构建路径中,那么您应该在问题中添加信息。当我试图提供帮助时,我不希望看到我的回答被否决。
  • 我不相信我可以与 1 名声望伙伴一起投票。不管怎样,这不是我。
  • @pmartin8 您被贬低的原因(不是我,也不是)是您的帖子没有提供答案,而是要求原始发帖人进行澄清。应该是评论。
  • 我认为这是一个有效的答案。 “检查您的构建路径”是一个有效的答案。它可能是错误的,但完全有效。
  • 我的帖子是一个可能的答案,而不是批评或请求。修复构建路径很有可能解决问题。谢谢。
【解决方案2】:

好的,所以我设法解决了这个问题。这是由于 Wildfly 的记录器干扰了我的记录器造成的。我在standalone.xml 中添加了<use-deployment-logging-config value="false"/> 行 但这还不够。在挖掘了更多之后,我还发现并添加了以下行<add-logging-api-dependencies value="false"/>,它终于开始工作了。 虽然我对这个解决方案并不完全满意,但我想它总比没有好,也许值得分享。

简而言之,将其添加到您的standalone.xml 中,如果您使用的是 Wildfly 8,它应该可以解决日志记录冲突:

<subsystem xmlns="urn:jboss:domain:logging:2.0"> <add-logging-api-dependencies value="false"/> <use-deployment-logging-config value="false"/> ... </subsystem>

【讨论】:

    【解决方案3】:

    更新春季版本。它对我有用。

    【讨论】:

    • 这应该是一条评论。
    猜你喜欢
    • 2017-10-26
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2018-11-16
    相关资源
    最近更新 更多