Java:使用SLF4J门面模式的日志框架

SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志System.

实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

依赖配置pom.xml

 
    org.slf4j
    slf4j-log4j12
    1.7.25

示例代码:

package com.bytrees;

import org.apache.log4j.PropertyConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
    	try {
    		PropertyConfigurator.configure("conf/log4j.properties");
    		Logger logger = LoggerFactory.getLogger("simple");
    		logger.info("test");
    	} catch (Exception ex) {
    		System.out.println( ex.getMessage() );
    	}
    }
}

代码解析:

PropertyConfigurator.configure("conf/log4j.properties");

指定log4j配置文件的位置,如果没有自定,默认会读取包下面的log4j.properties配置,如果找不到该配置则会提示一个WARN

log4j:WARN No appenders could be found for logger (simple).


log4j.properties文件配置:

该例子展示了输出到控制台,以及文件的日志配置

log4j.rootLogger = INFO,stdout,logFile

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %m%n

log4j.appender.logFile = org.apache.log4j.FileAppender
log4j.appender.logFile.File = logs/app.log
log4j.appender.logFile.Threshold = INFO
log4j.appender.logFile.Append = true
log4j.appender.logFile.layout = org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %m%n

推荐使用PatternLayout,使用上面的配置,输出

2018-07-11 17:31:18 [INFO] test

附录:

slf4j官网:https://www.slf4j.org/

layout格式说明:http://logging.apache.org/log4j/2.x/manual/layouts.html

日志规约:https://vipshop.github.io/vjtools/#/standard/chapter11

你可能感兴趣的:(Java)