import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
public static void main(String[] a) {
Logger logger = LoggerFactory.getLogger(String.class);
// Logger logger = LogManager.getLogger();
logger.error("123");
}
}
// 结果打印如下
log4j:WARN No appenders could be found for logger (java.lang.String).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LogTest {
public static void main(String[] a) {
// Logger logger = LoggerFactory.getLogger(String.class);
Logger logger = LogManager.getLogger();
logger.error("123");
}
}
// 结果打印如下
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
21:46:10.903 [main] ERROR LogTest - 123
依赖配置如下
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.0</version>
</dependency>
<!-- slf4j与log4j之间的桥接包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
以上两次结果是在未配置log4j对应的配置文件的情况下运行得到
第一种是使用slf4j的方式获取logger,获取logger方式有所不同,没有使用log4j2的默认logger
第二种是使用的log4j的API,也警告了相关信息,使用默认配置
下面看一下第三种运行结果:
使用的demo是第二组代码,这里只提供了一个空的配置文件log4j2.xml,但是未提供logger
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
</Configuration>
看一下启动时的log4j输出日志,可以看到以上信息,采取了默认配置,然后我们跟一下源码
public DefaultConfiguration() {
super(null, ConfigurationSource.NULL_SOURCE);
setToDefault();
}
protected void setToDefault() {
// LOG4J2-1176 facilitate memory leak investigation
setName(DefaultConfiguration.DEFAULT_NAME + "@" + Integer.toHexString(hashCode()));
final Layout<? extends Serializable> layout = PatternLayout.newBuilder()
.withPattern(DefaultConfiguration.DEFAULT_PATTERN)
.withConfiguration(this)
.build();
// 默认输出到控制台
final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
appender.start();
addAppender(appender);
// 默认取根logger
final LoggerConfig rootLoggerConfig = getRootLogger();
rootLoggerConfig.addAppender(appender, null, null);
// 默认日志级别为error
final Level defaultLevel = Level.ERROR;
final String levelName = PropertiesUtil.getProperties().getStringProperty(DefaultConfiguration.DEFAULT_LEVEL,
defaultLevel.name());
final Level level = Level.valueOf(levelName);
rootLoggerConfig.setLevel(level != null ? level : defaultLevel);
}
OVER