我的log4j不记录任何日志文件。我不确定这是log4j.properties
内部设置还是此文件位置的问题。
我构建项目的方式:
git clone https://github.com/spring-guides/gs-maven.git
然后修改:.initialpom.xml
并添加了对log4j
的支持:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.17.2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
</dependencies>
就在之前:
</project>
添加了日志命令.initialsrcmainjavahelloHelloWorld.java
如下:
package hello;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloWorld {
private static Logger logger = LogManager.getLogger(HelloWorld.class);
public static void main(String[] args) {
logger.error("Application status : {} ", "start");
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
logger.error("Application status : {} ", "terminated");
}
}
然后添加log4j.properties
:
appender.stdout.type = Console
# ... other appender properties
appender.file.type = File
# ... other appender properties
logger.app = INFO, stdout, file
# logger.app.name = com.example.app
# is equivalent to:
# appender.stdout.type = Console
# appender.stdout.name = stdout
# ...
appender.file.type = File
appender.file.name = mylog
# ...
# logger.app.name = com.example.app
logger.app.level = INFO
logger.app.appenderRef.$1.ref = stdout
logger.app.appenderRef.$2.ref = file
我一直将此文件的位置更改为
.initiallog4j.properties
.initialtargetlog4j.properties
.initialtargetclasseslog4j.properties
.initialtargetclasseshellolog4j.properties
他们都没有工作过。我没有看到mylog
或任何其他日志文件。
我运行项目的方式如下:
cd initial
mvn compile
mvn package
java -jar target/gs-maven-0.1.0.jar
我应该如何解决这个问题?
您的配置存在一些问题:
- 正如Gopinath所说,配置文件应该在
src/main/resources
。Maven 会将其复制到target/classes
,
Log4j - 1.x 使用名称
log4j.properties
, Log4j 2.x 使用log4j2.properties
, - 属性配置格式是最难掌握的。我建议您使用任何其他格式(例如.XML,不需要额外的依赖项)。
如果您坚持使用属性格式,这里有一些提示:
每个配置都需要一个根记录器,它是每个记录器的祖先,并为其他记录器配置提供默认值。您可以使用速记符号:
rootLogger = INFO, stdout, file
在版本 2.17.2 或长表示法中引入:
rootLogger.level = INFO rootLogger.appenderRef.$1.ref = stdout rootLogger.appenderRef.$2.ref = file
追加器引用的名称必须与追加程序的
name
属性匹配:appender.stdout.name = stdout appender.file.name = file
没有速记。
FileAppender
需要fileName
:appender.file.fileName = mylog