使用java 9找不到log4j2配置文件

时间:2017-09-10 08:49:39

标签: java log4j2 java-9 module-info

我有一个Java 8项目,我的配置文件在资源文件夹中,一切正常。现在我切换到Java 9,添加了log4j.api的要求,并且无法再找到配置文件。

我是否需要在我的module-info文件中添加其他内容以供记录器找到它的配置?

现在,就像这样

module project.main {
    requires jdk.incubator.httpclient;
    requires jackson.databind;
    requires jackson.core;
    requires jackson.annotations;
    requires log4j.api;
}

项目结构如下:

structure

build.gradle文件如下:

enter image description here

1 个答案:

答案 0 :(得分:3)

log4j~faq建议至少使用 class Button extends React.Component { state = { counter : 0 } handleClick = function() { this.setState({ counter: this.state.counter+1 }) } render() { return ( <button onClick={this.handleClick}> {this.state.counter} </button> ) } } ReactDOM.render(<Button/>, mountNode) log4j-api-2.x。最好将这些内容添加到您的log4j-core-2.x文件中:

build.gradle

并确保conflicting dependencies are excluded

compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.9.0' compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.9.0' compile group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.9.0' 进一步更新(这是我在custom maven project中所做的)

module-info.java

它应该适用于你,然后使用相同的目录结构。

提示:这是我开始调试它的地方。 Why do I see a warning about "No appenders found for logger" and "Please configure log4j properly"?

  

当默认配置文件 log4j.properties 和时,会发生这种情况   无法找到log4j.xml,应用程序不执行任何显式操作   组态。 log4j使用requires log4j; // not log4j.api   找到默认配置文件,不直接检查   文件系统......

ClassLoader#getResource方法中放置一个调试点,只关注库所查找的资源。

同样如JDK-8142968

中的发行说明所述,对Thread.getContextClassLoader().getResource()等资源提出要点。
  
      
  • 标准和JDK模块中的JDK内部资源(类文件除外)无法再与其一起定位   resources/foo/bar/log4j.properties的API。这可能会影响依赖的代码   使用这些API获取JDK内部属性文件或其他文件   资源。
  •   

并附带ClassLoader#getResource的java-doc:

  
      
  • 命名模块中的资源受封装规则的约束   由ClassLoader.getResourceXXX指定。另外,除了   资源的名称以&#34; .class&#34;结尾的特殊情况,   此方法只会在命名模块的包中找到资源   无条件打开包(即使是这个打电话的人   method与资源在同一模块中。
  •