slf4j(simple logging facade for java)是Java的简单的日志门面,它不是具体的日志解决方案,它只服务于各种各样 slf4j-logo的日志系统。
实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算用那个具体的日志系统。只需要在项目中加入定的slf4j-logo.jar包就可以。这个和Spring的IOC思想有点像,想用哪个就用哪个,随意切换。
使用slf4j这种记录日志的方式的特点很明显:1、如果我们需要记录的是底层类库或者组件这种东西,就可以不影响或强制要求用户选择哪种日志系统。2、如果我们用特定的日志系统写了代码,但是有一天要求换另一种日志系统,如果之前就用slf4j的api写的,那就很简单,但是如果用具体的一种方式写了以后,那在切换就很麻烦。
SLF4J一般都是和logback.xml配合使用的,那我们来看看最基本的logback配置
%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %class:%line >>
%msg%n
UTF-8
info
%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %class:%line >>
%msg%n
UTF-8
/opt/logs/insurance/infoInsure_sql.log
/opt/logs/insurance/infoInsure.%d{yyyy-MM-dd}.log
debug
%date{yyyy-MM-dd HH:mm:ss}[%level][%thread][%logger:%line]-%mdc{client} %msg%n
UTF-8
/opt/logs/insurance/infoInsure.log
/opt/logs/insurance/infoInsure.%d{yyyy-MM-dd}.log
info
%date{yyyy-MM-dd HH:mm:ss}[%level][%thread][%logger:%line]-%mdc{client} %msg%n
UTF-8
/opt/logs/insurance/errorInsure.log
/opt/logs/insurance/errorInsure.%d{yyyy-MM-dd}.log
ERROR
%date{yyyy-MM-dd HH:mm:ss}[%level][%thread][%logger:%line]-%mdc{client} %msg%n
UTF-8
以上配置信息中,我们只是控制输出了级别日志,像INFO,ERROR,WARING,当然,我们要做其他的操作就需要继续添加appender。
例如我们现在有一个需求,是需要生成登录用户自己的文件夹,方便开发员管理日志,那么我们就可以使用slf4j里的MDC实现。
当log使用了最外层的appender时可以使用mdc将一些值放在容器里,然后嵌套的那个appender就可以使用这个容器的值。下面来看具体代码的实现
SLF4J使用步骤
1》、在pom.xml内引入slf4j的jar包,和logback的包
ch.qos.logback
logback-classic
1.1.3
ch.qos.logback
logback-access
1.1.3
ch.qos.logback
logback-core
1.1.3
org.slf4j
slf4j-api
1.7.12
2》、在resource下新建logback.xml文件,最基本的配置我在上面已经贴出,这里就不重复了,我们具体来看我们要实现的
account
unknown
${LOG_HOME}/${account}/login.log
true
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n
private static final Logger login=LoggerFactory.getLogger("LoginInfoFile");
在需要输出日志的方法中,把我们登录的对象存进MDC中
MDC.put("account", gymOwner.getAccount());
然后输出日志
login.info("当前登录用户:"+gymOwner.getAccount());
login.info("登录时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
我们还需要声明logger,不然是不起作用的
如果还要写其他相关 类的日志,只要在多写几个appender,然后把名字修改就可以了
执行完项目后现在我们在指定的路径内,就可以看到我们的日志文件了