java的日志方案有Commons-logging, Log4j, Slf4j, LogBack...
Commons-logging: apache最早提供的日志的门面接口,类似于jdbc的接口,具体实现由jdbc driver
Log4j:经典的一种日志解决方案,内部把日志系统抽象封装为Logger, appender, pattern等实现,可以通过配置文件轻松的实现日志系统的管理和多样化配置
Slf4j:全称:Simple Logging Facade for JAVA : java简单日志门面,是对不同日志框架提供的一种门面封装,部署的时候不修改任何配置即可接入一种日志实现方案。
Logback: 作为一个通用可靠,快速灵活的日志框架,将作为Log4j的替代和Slf4j组合新的日志系统的完整实现
SLF4J日志方案
通过SLF4J依赖,提供日志API,其是使用Log4J作为实现的,其Maven的配置如下:
org.slf4j
slf4j-log4j12
1.7.7
若是在Maven工程中,必须在main/resource目录下创建一个名为log4j.properties的文件,内容如下:
#日志级别为ERROR 提供两种日志console(控制台),file(文本)
#需要对两种日志分别配置
log4j.rootLogger = ERROR, console, file
#控制台日志
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# %m%n在日记结尾添加换行
log4j.appender.console.layout.ConversionPattern = %m%n
#文件日志
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
#输出日志到指定的文件
log4j.appender.file.File = ${user.home}/logs/book.log
#文件回滚的时间
log4j.appender.file.DatePattern = '_'yyyyMMdd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{HH:mm:ss,SSS} %p %c (%L) - %m%m
#同时指定只有cc.codingape包下的类才输出DEBUG级别的日志
log4j.logger.cc.codingape = DEBUG
日志的一个使用范例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory
public class Slf4jDemo {
private static final Logger LOGGER = LoggerFactory.getLogger(Slf4jDemo.class);
public static void main(String[] args){
LOGGER.error("Slf4jDemo");//在控制台上输出Slf4jDemo
}
}
在Slf4j中增加了占位符{},使得信息的输出便捷很多
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Slf4jDemo {
private static final Logger LOGGER = LoggerFactory.getLogger(Slf4jDemo.class);
public static void main(String[] args){
String message = "slf4j";
LOGGER.debug("use {}",message);
}
}
日志的配置文件
核心对象
- Logger对象 负责获取日志信息,并存储于一个分层的命名空间中
- Layout对象 提供用于各种风格格式的日志信息的对象,在日志发布前,为appender提供支持
- Appender对象 负责将日志信息发布到不同的目的地,比如数据库,文件, 控制台
%m%n`表示在输出信息后换行
日志的级别有:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, ALL 级别不断提高,输出的日志基本高于配置文件中日志的基本才能得以输出,例如配置文件中的日志级别为 ERROR,则代码中INFO级别的日志是无法输出的,FATAL,ALL级别的日志信息才能被输出。若指定具体包下的日志输出级别除外,如上述log4j.logger.cc.codingape = DEBUG
指定了cc.codingape
包下的日志输出级别为DEBUG.
在日志的配置文件中可以使用${}
的运算符来配置文件
Layout类型
Apache Log4j提供多个Layout对象,每个根据布局的不同都可格式化日志数据
- DateLayout
- HTMLLayout
- PatternLayout
- SimpleLayout
- XMLLayout
文件记录日志
FileAppender配置
属性 | 描述 |
---|---|
immediateFlush | 默认为true,每次日志追加操作都刷新到文件 |
encoding | 编码,默认情况下使用平台相关的编码 |
threshold | appender对象的阀值 |
Filename | 日志文件名 |
fileAppend | 默认true,日志追加到文件 |
bufferedIO | 是否打开缓冲,默认为false |
bufferSize | 若是开启缓冲去IO,指定缓冲区大小,默认8kb |
使用org.apache.Log4j.FileAppender
将日志记录到文件,
将文件写入多个文件则使用org.apache.Log4j.RollingFileAppender
,该类继承了FileAppender类
逐日生成日志
逐日生成日志文件,使用org.apache.Log4j.DailyRollingFileAppender
,该类同样继承了FileAppender类
DatePattern:该属性表明什么时候回滚文件,以及文件的命名约定,缺省情况下每日午夜回滚文件
DatePattern | 描述 |
---|---|
'.'yyyy-MM | 在本月末,下月初回滚文件 |
'.'yyyy-MM-dd | 在每日午夜回滚文件,缺省值 |
'.'yyyy-MM-dd-a | 在每日中午和午夜回滚文件 |
'.'yyyy-MM-dd-HH | 在每个整点回滚文件 |
'.'yyyy-MM-dd-HH-mm | 每分钟回滚文件 |
'.'yyyy-ww | 根据地域,在每周的第一天回滚文件 |