马鞍山网站建设费用,百度竞价关键词怎么优化,wordpress怎么弄在线表单,网络品牌推广怎么做一、概念SLF4J的全称是Simple Logging Facade for Java#xff0c;即简单日志门面。SLF4J并不是具体的日志框架#xff0c;而是作为一个简单门面服务于各类日志框架#xff0c;如java.util.logging, logback和log4j。SLF4J提供了统一的记录日志的接口#xff0c;对不同日志…一、概念SLF4J的全称是Simple Logging Facade for Java即简单日志门面。SLF4J并不是具体的日志框架而是作为一个简单门面服务于各类日志框架如java.util.logging, logback和log4j。SLF4J提供了统一的记录日志的接口对不同日志系统的具体实现进行了抽象化只要按照其提供的方法记录即可最终日志的格式、记录级别、输出方式等通过绑定具体的日志系统来实现。使用SLF4J的好处在于你只需要按统一的方式写记录日志的代码如public class LoggerTest {private static final Logger logger LoggerFactory.getLogger(Tester.class);public static void main(String[] args) {logger.info(Current Time: {}, System.currentTimeMillis());}}SLF4J支持{}作为占位符等价于C语言中的%s而不必再进行字符串的拼接效率有显著的提升(见后面运行结果)。而无需关心日志是通过哪个日志系统以什么风格输出的。因为它们取决于部署项目时绑定的日志系统。例如在项目中使用了SLF4J记录日志并且绑定了log4j则日志会以log4j的风格输出后期需要改为以logback的风格输出日志只需要将log4j替换成logback即可不用修改项目中的代码。二、依赖SLF4J绑定各类日志框架的原理图由上图可知使用SLF4J依赖于slf4j-api-1.8.0-alpha2.jar部署时还依赖于要绑定的日志系统的jar包和相应的适配器jar包。以绑定log4j为例需要导入以下包slf4j-api-1.8.0-alpha2.jarlog4j-1.2.17.jarslf4j-log4j12-1.8.0-alpha2.jar如果使用Maven则只需添加适配器jar包依赖即可org.slf4jslf4j-log4j121.8.0-alpha2三、使用示例这里以SLF4J log4j为例。1.在pom.xml中添加依赖(或者手动导入上述3个jar包)org.slf4jslf4j-log4j121.8.0-alpha22.配置log4j在类路径下创建log4j.properties配置文件这样log4j会自动加载配置文件。# rootLogger参数分别为根Logger级别输出器stdout输出器loglog4j.rootLogger info,stdout,log# 输出信息到控制台log4j.appender.stdout org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern %d [%-5p] %l %rms: %m%n# 输出DEBUG级别以上的日志到D://logs/debug.loglog4j.appender.log org.apache.log4j.DailyRollingFileAppenderlog4j.appender.log.DatePattern .yyyy-MM-ddlog4j.appender.log.File D://debug.loglog4j.appender.log.Encoding UTF-8#log4j.appender.log.Threshold INFOlog4j.appender.log.layout org.apache.log4j.PatternLayoutlog4j.appender.log.layout.ConversionPattern %d [%-5p] (%c.%t): %m%n将log4j.properties放在类路径下是最简单的做法当然也可以通过PropertyConfigurator在代码中加载或者通过web.xml加载。3.测试代码import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class LoggerTest {private static final Logger logger LoggerFactory.getLogger(LoggerTest.class);public static void main(String[] args) {logger.info(Current Time: {}, System.currentTimeMillis());logger.info(Current Time: System.currentTimeMillis());logger.info(Current Time: {}, System.currentTimeMillis());logger.trace(trace log);logger.warn(warn log);logger.debug(debug log);logger.info(info log);logger.error(error log);}}4.运行结果2017-06-16 23:11:05,490 [INFO ] com.jiapengcs.demos.slf4j.LoggerTest.main(LoggerTest.java:14) 0ms: Current Time: 14976258654882017-06-16 23:11:05,493 [INFO ] com.jiapengcs.demos.slf4j.LoggerTest.main(LoggerTest.java:15) 3ms: Current Time: 14976258654932017-06-16 23:11:05,493 [INFO ] com.jiapengcs.demos.slf4j.LoggerTest.main(LoggerTest.java:16) 3ms: Current Time: 14976258654932017-06-16 23:11:05,495 [WARN ] com.jiapengcs.demos.slf4j.LoggerTest.main(LoggerTest.java:18) 5ms: warn log2017-06-16 23:11:05,495 [INFO ] com.jiapengcs.demos.slf4j.LoggerTest.main(LoggerTest.java:20) 5ms: info log2017-06-16 23:11:05,495 [ERROR] com.jiapengcs.demos.slf4j.LoggerTest.main(LoggerTest.java:21) 5ms: error log通常输出日志开销非常大从上述结果可见SLF4J通过{}作为占位符的方式输出字符串相比字符串拼接的方式效率有显著的提升。5.更换日志系统看到这里你可能会有疑问既然都用了log4j为什么还要用SLF4J来写记录日志的代码呢不是多此一举吗答案是否定的。假设我们不再需要log4j而是希望改为使用java自带logging记录日志我们需要做的仅仅是将pom.xml的依赖项slf4j-log4j12改为slf4j-jdk14即可无需对上述测试代码做任何修改。org.slf4jslf4j-jdk141.8.0-alpha2是的就是这么简单。再次运行测试代码六月 16, 2017 10:32:30 下午 com.jiapengcs.demos.slf4j.LoggerTest main信息: Current Time: 1497623550843六月 16, 2017 10:32:30 下午 com.jiapengcs.demos.slf4j.LoggerTest main信息: Current Time: 1497623550874六月 16, 2017 10:32:30 下午 com.jiapengcs.demos.slf4j.LoggerTest main信息: Current Time: 1497623550875六月 16, 2017 10:32:30 下午 com.jiapengcs.demos.slf4j.LoggerTest main警告: warn log六月 16, 2017 10:32:30 下午 com.jiapengcs.demos.slf4j.LoggerTest main信息: info log六月 16, 2017 10:32:30 下午 com.jiapengcs.demos.slf4j.LoggerTest main严重: error log我们发现此时日志已经变为以logging的方式输出。四、总结SLF4J的使用非常简单甚至连官网上都说鉴于它太轻量文档篇幅不长。Given the small size of SLF4J, its documentation is not very lengthy.在《阿里巴巴Java开发手册(正式版)》中日志规约一项第一条就强制要求使用SLF4J1.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API而应依赖使用日志框架SLF4J中的API使用门面模式的日志框架有利于维护和各个类的日志处理方式统一。所以从现在开始使用SLF4J吧