我查了这个问题: SLF4J and Log4j 2 binding Maven dependency
似乎我有一个类似的问题。但他们使用: log4j-slf4j-impl 我使用 slf4j-log4j (见pom.xml)
符合: documentation SLF4J - binding LOG4J
[NETBEANS]
这是“ TestLogger ”类并使用SLF4J:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestLogger {
private static Logger logger = LoggerFactory.getLogger(TestLogger.class);
public static String name = "World";
public static void main(String[] args) {
logger.info("Hello {}", name);
System.out.println("Test");
}
}
我从LOG4J中得到这些错误(所以绑定似乎没问题):
log4j:WARN No appenders could be found for logger (TestLogger).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
在“ TestLogger ”类中的这个项目中,SLF4J和LOG4J之间存在绑定,因为错误是由LOG4J引起的,我们导入SLF4J 。
pom.xml [仅依赖部分]:
<!--
slf4j-api - local
slf4j-log4 - local
log4j
-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
这是 log4j.properties 文件,这个文件在没有MAVEN的情况下运行良好(在具有相同类的其他项目中)
log4j.properties 位于默认包中。
# Root logger option
log4j.rootLogger=INFO, stdout, file
# Direct log messages to stdout
# Redirect log messages to console
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=[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %c{10}, line %L - [%10.10t]%n >> %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log4j-homeauto.log
log4j.appender.file.MaxFileSize=5MB
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] %30.30c %L - %m%n
老实说问题不对我很清楚,但在阅读了在线反馈后,我又添加了一个 log4j.xml 默认包。 希望这能解决我的问题。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<appender name="LOG" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="example.log"/>
<param name="MaxFileSize" value="100KB"/>
<!-- Keep one backup file -->
<param name="MaxBackupIndex" value="1"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<param name="ConversionPattern" value="%5p [%t] (%F:%L) - %m%n"/>
</layout>
</appender>
</log4j:configuration>
<root>
<priority value ="debug" />
<appender-ref ref="console" />
<appender-ref ref="LOG" />
</root>
</log4j:configuration>
就像我已经说过的那样,我在没有MAVEN的其他项目中也使用过这个课程,并且工作正常。 作为另一项测试,我在两个项目中创建了一个类 TestLoggerLOG4J LOG4J似乎在MAVEN中有所不同......它找不到既不属性,也不 xml文件 (如果没有MAVEN,我不知道需要哪一个,属性文件很好)
import org.apache.log4j.Logger;
public class TestLoggerLOG4J {
static Logger log = Logger.getLogger("file");
public static String name = "World";
public static void main(String[] args) {
log.info("This is a test {}");
System.out.println("Test");
}
}
** s o l u t i o ** **
感谢** @Tunaki **
您需要将此文件放在src / main / resources
中我是通过命令行(linux终端)完成的,最后我在项目中找到了它。
还有其他方法吗?您是否有解决方案可以避免此类问题? 为什么MAVEN不这样做?