在Java项目中常见的日志工具包:
Log4j:Apache推出的日志工具。与2012年5月发布1.2.17版本后停止更新。
Logback:属于Log4j的继承者。Spring Boot默认日志文件支持类型。
Log4j2:属于Log4j升级版,同时里面还包含了Logback的很多改进。
commons-logging:Apache早期基于门面(Facade)设计模式的日志包,提供了日志解构能力,按照顺序寻找当前项目日志接口实现、Log4j、JDK Log、SimpleLog
Slf4j( Simple Logging Facade for Java ):目前使用非常多的门面日志。统一项目中日志。
JDK Logging:JDK自带的日志API
JDK Logging 是JDK自带的日志工具。存在于java.util.logging包中。
日志级别: // OFF > SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST > ALL
public class Demo {
public static void main(String[] args) throws IOException {
Logger logger = Logger.getLogger("Demo(一般写类名)");
// 默认为INFO级别,同时设置当前和父处理器级别才能修改
// OFF > SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST > ALL
logger.setLevel(Level.INFO);//全局输出级别
Handler[] handlers = logger.getParent().getHandlers();// 获取输出控制台的处理器
handlers[0].setLevel(Level.INFO);//控制台输出级别
// 默认没有输出到文件,只输出到控制台,通过添加Handler增加输出目的地,输出到文件中
FileHandler fh = new FileHandler("my.log");// 如果路径夹会不存在文件夹会报错
fh.setFormatter(new SimpleFormatter());// 设置输出内容为普通格式
logger.addHandler(fh);
logger.severe("severe");// 严重
logger.warning("warning");// 警告
logger.info("info");// 信息
logger.config("config");// 配置
logger.fine("fine");// 详细
logger.finer("finer");// 较详细
logger.finest("finest");// 非常详细
}
}
日志级别: fatal(致命错误) > error(错误) >warn(警告) >info(普通信息) >debug(调试信息)>trace(跟踪信息)
1.导入依赖
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
2.编写配置文件
在resources中新建log4j.properties,名称不要写错了
log4j.properties文件必须放在resources文件夹下
# log4j中定义的级别:fatal(致命错误) > error(错误) >warn(警告) >info(普通信息) >debug(调试信息)>trace(跟踪信息)
log4j.rootLogger = DEBUG , console , D //这里配置的是debug表示只能输出debug及以上级别的日志
### console ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
### log file ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/log4j.log
log4j.appender.D.Append = true
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
3.测试类
// 不要导错包了
import org.apache.log4j.Logger;
public class TestLog4j {
public static void main(String[] args) {
Logger logger = Logger.getLogger(TestLog4j.class);
logger.trace("跟踪级别");
logger.debug("调试信息");
logger.info("普通信息");
logger.warn("警告信息");
logger.error("错误信息");
logger.fatal("重大错误信息");
}
}
1.pom.xml
虽然只导入了log4j-core,但是实际导入log4j-core和log4j-api
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.17.2version>
dependency>
Log4j2不再支持Log4j的.properties格式配置文件。而是支持.xml、.json、jsn.
在resource目录新建log4j2.xml
<Configuration >
<Appenders>
<Console name="Console" target="SYSTEM_OUT">//输出到控制台格式
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
Console>
<File name="log" fileName="log/test.log" append="true">//输出到本地文件格式
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
File>
Appenders>
<Loggers>
<Root level="info">//日志输出级别,输出到哪
<AppenderRef ref="Console"/>//输出到控制台
<AppenderRef ref="log"/>//输出到本地文件
Root>
Loggers>
Configuration>
测试
// 千万别导错包了
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class TestLog4j {
public static void main(String[] args) {
Logger logger = LogManager.getLogger(TestLog4j.class);
logger.trace("跟踪级别");
logger.debug("调试信息");
logger.info("普通信息");
logger.warn("警告信息");
logger.error("错误信息");
logger.fatal("重大错误信息");
}
}
SLF4j是日志的接口声明,不参与日志的具体实现。需要配合其他日志具体实现工具包才能进行使用。每次添加其他日志工具包时,不要忘记SLF4j整合这个日志的依赖。
SLF4J支持多种日志实现,但是在项目中整合依赖最好只有一个,否则会出现警告
导入3个依赖,分别代表slf4j依赖、整合依赖、log4j的依赖。
整合Log4j
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.36version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>1.7.36version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
测试:
public class Test {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Test.class);
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
整合Log4j2
配置pom.xml
与SLF4J整合Log4j的整合包是不一样的。
<dependencies>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.36version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-slf4j-implartifactId>
<version>2.17.2version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.17.2version>
dependency>
dependencies>
测试