我有一个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;
}
项目结构如下:
build.gradle文件如下:
答案 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与资源在同一模块中。