一、概述

  简单日记门面(simple logging Facade for java)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。

  百度百科:

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

  为什么使用slf4j:

    我们在开发过程中可能使用各种log,每个Log有不同的风格、布局,如果想灵活的切换那么slf4j是比较好的选择。

二、入门程序

  引入依赖: 

    <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>

  这样我们的依赖中就会多出3个jar,分别是:

  引入配置文件:

  这里我们结合的是log4j,所以引入Log4j的的配置文件在当前classpath下:log4j.properties

#   可设置级别:TRACE→DEBUG→INFO→WARNING→ERROR→FATAL→OFF
# 高级别level会屏蔽低级别level。
# debug:显示debug、info、error
# info:显示info、error #log4j.rootLogger=DEBUG,console,file
log4j.rootLogger=INFO,console #输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#日志输出信息格式为
log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #输出到文件(这里默认为追加方式)
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=F:/LinkinPark/logs/Log4J.log
#样式为TTCCLayout
#log4j.appender.file.layout=org.apache.log4j.TTCCLayout #自定义样式
#%c 输出所属的类目,通常就是所在类的全名
#%C 输出Logger所在类的名称,通常就是所在类的全名
#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},%d{ABSOLUTE},%d{DATE}
#%F 输出所在类的类名称,只有类名。
#%l 输出语句所在的行数,包括类名+方法名+文件名+行数
#%L 输出语句所在的行数,只输出数字
#%m 输出代码中指定的讯息,如log(message)中的message
#%M 输出方法名
#%p 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
#%r 输出自应用启动到输出该log信息耗费的毫秒数
#%t 输出产生该日志事件的线程名
#%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
#%% 用来输出百分号“%”
#log4j.appender.Linkin.layout.ConversionPattern=%n[%l%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m
#log4j.appender.Linkin.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[%C]-[%p] %m%n
#log4j.appender.Linkin.layout.ConversionPattern = %d{ABSOLUTE} %5p %t %c{2}:%L - %m%n

  编码测试代码:

    初始化logger的方式不一样了:

 private static final Logger log = LoggerFactory.getLogger(LogTest.class);

  //之前的方式:public static Logger log = Logger.getLogger(LogTest.class);

    log的输出日志的写法也稍有不同(下节讲解):

     log.info("info...{}", "info...");
log.warn("warn...{}", age);

  完整测试代码如下:

package com.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 日志测试类
* 作者: Administrator
* 日期: 2017/9/20
**/
public class LogTest {
// 获取日志对象
private static final Logger log = LoggerFactory.getLogger(LogTest.class);
private static Integer age = 18;
private static String name = "Alice";
public static void log() {
log.debug("debug....{}", "debug...");
log.info("info...{}", "info...");
log.warn("warn...{}", age);
log.error("error...{}", name);
try {
int i = 10 / 0;
} catch (Exception e) {
log.error(e.getMessage());
}
} public static void main(String[] args) {
log();
}
}

  结果:

  

  入门程序参考自http://blog.csdn.net/anialy/article/details/8529188

三、slf4j的格式

  由于log4j的拼接字符串的形式,无论从性能上或者从优雅性上,都难以满足,所以,我们强烈推荐使用slf4j来进行日志记录!

  使用log4j输出程序中参数变量的日志写法大概是这样的: 

if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}

  切换为slf4j后:

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

  可以看到,通过使用大括号 {} 来占位,再通过参数的传入来避免了拼接字符串的性能与代码优雅性问题,同时省去了麻烦的isInfoEnabled()的判断

  当然,slf4j日志还有一些重载方法,可参见API!

  大括号 {} 对应若是POJO类等应当重写toString()方法

日志工具——slf4j的更多相关文章

  1. 细说Java主流日志工具库

    概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...

  2. Java主流日志工具库

    在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...

  3. Spring Boot 日志记录 SLF4J

    Spring Boot 日志记录 SLF4J 2016年01月12日 09:25:28 阅读数:54086 在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人 ...

  4. 日志工具全面理解及配置应用---以Log4j例子

    一.日志系统基本常识 1.日志系统作用:将日志信息输出到控制台和文本文件,以追踪代码运行信息. 2.日志系统操作的是什么?日志系统打印信息,也是调用日志系统的log.Info(),log.Warn() ...

  5. 日志之slf4j和logback日志系统(二)

    这篇文章我们讲一下,如何使用slf4j和logback组合来搭建一套日志系统. 介绍 如果我们的系统是新系统,也就是之前没有引入其他的日志工具,那么只需要引入,如果之前已经用了common-loggi ...

  6. Mybatis自定义控制台打印sql的日志工具

    调试mybatis源码时,想要更改日志的的实现工具,首先需要了解其原理. 源码包里有这部分的解释,翻译如下: Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理: ...

  7. .NetCore中的日志(2)集成第三方日志工具

    .NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...

  8. Atitit.日志系统slf4j的使用

    Atitit.日志系统slf4j的使用 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar ...

  9. 【工具推荐】ELMAH——可插拔错误日志工具

    今天看到一篇文章(构建ASP.NET网站十大必备工具(2)),里面介绍了一个ELMAH的错误日志工具,于是研究了一下. ELMAH 是 Error Logging Modules and Handle ...

随机推荐

  1. Python切片(入门7)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407977.html 本文出自:[Edwin博客园] Python切片 1. 对list进行切片 L = r ...

  2. P2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver

    P2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver 最大化一个子矩阵的和. 我们如何去做,dp和贪心呀! 大体题意:给定一个正方形,然后在正方形中求出一个大小已经给定的 ...

  3. CssSelector之selenium元素定位

    CssSelector是我最喜欢的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath loc ...

  4. ICT测试点是干什么的, 怎么设置!

    简单理解:ICT类似如万用表,只是把表笔换成了测试针.那么问题就简单了,一颗普通的RLC元件,都必须有两个测试点才能够测试,当然同一个网络共用的节点用一个测试点就可以了. 详细描述: PCB设计时要看 ...

  5. Gradle Goodness: Init Script for Adding Extra Plugins to Existing Projects

    Gradle Goodness: Init Script for Adding Extra Plugins to Existing Projects Gradle is very flexible. ...

  6. Spark Streaming编程示例

    近期也有开始研究使用spark streaming来实现流式处理.本文以流式计算word count为例,简单描述如何进行spark streaming编程. 1. 依赖的jar包 参考<分别用 ...

  7. Oracle 备份恢复实例

    Oracle 备份恢复实例:三思笔记 1 shutdown abort 系统归档模式,有备份 create table xx as select * from emp; update xx set e ...

  8. C#中小写人民币转大写

    /// <summary> /// 转换成大写人民币 /// </summary> /// <param name="myMoney">< ...

  9. springBoot 官方整合的redis 使用教程:(StringRedisTemplate 方式存储 Object类型value)

    前言:最近新项目准备用 redis 简单的缓存 一些查询信息,以便第二次查询效率高一点. 项目框架:springBoot.java.maven  说明:edis存储的数据类型,key一般都是Strin ...

  10. DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载  吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...