用slf4j统一管理日志总结

参考网页:http://www.slf4j.org/

一.使用slf4j统一管理并配置统一使用log4j日志

使用的jar:(slf4j-api-1.7.5.jar,jcl-over-slf4j-1.7.5.jar,jul-to-slf4j-1.7.5.jar,slf4j-log4j12-1.7.5.jar,log4j-1.2.12.jar)

因为项目中多个框架使用不同的日志或者现在修改以前项目中的日志框架改用另一种日志,所以使用slf4j统一管理日志会比较方便。

1.slf4j是一个接口标准。

2.jcl-over-slf4j-1.7.5.jar,jul-to-slf4j-1.7.5.jar是将以前jcl jul日志桥接到slf4j上并由slf4j管理。

备注:对于jul-to-slf4j-1.7.5.jar的使用应该在application初始化时加入代码(移除之前存在的handle,安装SLF4JBridgeHandler):
       SLF4JBridgeHandler.removeHandlersForRootLogger();
        SLF4JBridgeHandler.install();

3.slf4j-log4j12-1.7.5.jar是slf4j接口的实现,是一个slf4j到log4j的转换层,将以slf4j的管理的日志转为log4j

4.log4j-1.2.12.jar是log4j日志的jar

5.然后配置一个log4j的配置文件:log4j.properties

#将等级为INFO的日志信息输出到File(名字任意与定义时保持一致即可)目的地

#可以填写多个目的地

#等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL(优先级依次递减)

log4j.rootLogger =INFO,File

#此为hibernate的包中类的等级,以及选择其信息输出端(可选的输出端要定义)

#log4j.logger.org.hibernate.tool.hbm2ddl=INFO,File

#log4j.logger.org.hibernate.jdbc=DEBUG,File

log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE,File

#log4j.logger.org.hibernate.type.descriptor.sql.BasicExtractor=DEBUG,File

log4j.logger.org.hibernate.SQL=TRACE,File

# log4j.additivity.bao.leiming=false是log只打印到本log的输出端中

#不再打印到其父logger的输出端,防止日志信息打印多次

log4j.additivity.org.hibernate.SQL=false

#log4j.logger.org.hibernate.engine.QueryParameters=TRACE,File

#log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG,File

log4j.additivity.org.hibernate.type.descriptor.sql.BasicBinder=false

#定义名为File(名字可以任意)的日志输出端的类型此为每天产生一个日志

log4j.appender.File=org.apache.log4j.DailyRollingFileAppender

#定义名为File的输出端文件名

log4j.appender.File.file =c:/logs/tomcat.

log4j.appender.File.encoding =UTF-8

log4j.appender.File.datePattern ='.'yyyy-MM-dd'.log'

#定义名为File的输出端的layout的类型,此处PatternLayout为可以灵活的指定布局模式

log4j.appender.File.layout =org.apache.log4j.PatternLayout

#使用PatternLayout,此处要指定打印信息的具体格式

log4j.appender.File.layout.conversionPattern=%d[%t]%-5p%c-%m%n

log4j.appender.File.append =true

#与上述雷同,此处为定义名为stdout的日志输出端类型

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss,SSS}[%c]-[%p]%m%n

这样就可以在在项目中使用slf4j统一的接口写日志了(假设在名为Aa类)

//logger的名字见配置文件,如果没有就继承父,如果没父就继承rootLogger

final Logger logger = LoggerFactory.getLogger("logger的名字");

logger.debug("Thisis debug message");

logger.info("This is infomessage");

logger.warn("This is warnmessage");

logger.error("This is errormessage");

即使以后跟换日志框架(例如不使用log4j而改使用logback)都很方便。

举例:原先项目使用slf4j统一管理使用log4j而现在改使用logback

步骤:

1、删除log4j-1.2.12.jar、slf4j-log4j12-1.7.5.jar

2、删除配置文件log4j.properties

3、导入jar包:log4j-over-slf4j-1.7.5.jar、logback-access-1.0.13.jar、logback-classic-1.0.13.jar、logback-core-1.0.13.jar

4、增加logback-1.0.13配置文件logback.xml

即可

不需要修改项目之前的代码,只要更换jar包和相应日志的配置文件即可

重新回顾一遍。2016年12月15号

补充参考网址:

http://phl.iteye.com/blog/2021461

http://www.tuicool.com/articles/IfeUfq

http://blog.csdn.NET/xianymo/article/details/51026663

用slf4j统一管理日志总结的更多相关文章

  1. 利用log4j+mongodb实现分布式系统中日志统一管理

    背景     在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出.为了方便对这些日志进行统一管理和分析.我们可以将日志统一输出到指定的数 ...

  2. 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架

    一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...

  3. 玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理

    背景 在分布式系统中,我们有多个web app,这些web app可能分别部署在不同的物理服务器上,并且有各自的日志输出.当生产问题来临时,很多时候都需要去各个日志文件中查找可能的异常,相当耗费人力. ...

  4. Android开发日志统一管理

    在开发中,我们通常要对日志的输出做统一管理,下面就为大家推荐一个日志输出类,在开发阶段只需将DEBUG常量设为true,生产环境将DEBUG设为false即可控制日志的输出.啥都不说了,需要的朋友直接 ...

  5. org.slf4j:slf4j-api:添加日志管理

    org.slf4j:slf4j-api:添加日志管理 转 https://blog.csdn.net/wolfking0608/article/details/77855624   一个好的程序, 完 ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  7. SLF4J - 借助SLF4J, 统一适配所有日志实现为logback日志实现的实践

    一.屏蔽各种日志实现,去掉各种日志实现的实现依赖 二.引入slf4j和各种日志实现的适配器 1.引入slf4j 2.引入各种日志实现的适配器(适配到slf4j) 3.引入logback 引入logba ...

  8. 多个SpringMVC项目配置统一管理(来自于springCloud的统一配置思路)

    因公司项目分多个系统进行开发,而系统架构几乎完全一样,所以同样的配置文件会存在不同的系统中 当其中的某些配置需要修改时,就需要依次把所有系统中相关的配置都修改掉 纯耗时且没技术含量的体力活 所以借鉴S ...

  9. 统一管理jar包版本

    <!-- 统一管理jar包版本 --> <properties> <spring.version>5.0.2.RELEASE</spring.version& ...

随机推荐

  1. 下载APP 2个二维码合并到一个二维码

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. mysql中char与varchar的区别

    在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔 ...

  3. bss段为什么需要初始化?

    我们都知道bss段需要初始化,但是这是为什么呢? 通过浏览资料,我们都会发现,bss段是不会出现在程序下载文件(*.bin *.hex)中的,因为全都是0.如果把它们出现在程序下载文件中,会增加程序下 ...

  4. 30年的Hello world

    30 年的 Hello world 转载自:http://www.admin10000.com/document/2398.html 最近我在7月4日这一天所在的那周休假了.休假期间,我利用大把的时间 ...

  5. LightOj_1364 Expected Cards

    题目链接 题意: 一副牌, 每个花色13张牌,加上大小王,共54张. 遇到大小王可以代替其中某种花色. 给定C, D, H, S. 每次抽一张牌, 问抽到C张梅花, D张方块, H张红桃, S张黑桃所 ...

  6. C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数

    在定义可变参数的函数之前,先来理解一下函数参数的传递原理: 1.函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈. 2.参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在 ...

  7. capitalize()在Python中含义

    Python为string对象提供了转换大小写的方法:upper() 和 lower(). 还不止这些,Python还为我们提供了首字母大写,其余小写的capitalize()方法, 以及所有单词首字 ...

  8. Gabor变换

    Gabor变换 Gabor变换属于加窗傅立叶变换,Gabor函数可以在频域不同尺度.不同方向上提取相关的特征.另外Gabor函数与人眼的生物作用相仿,所以经常用作纹理识别上,并取得了较好的效果.Gab ...

  9. 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1442  Solved: 552 Description ...

  10. 李洪强iOS开发Swift篇—09_属性

    李洪强iOS开发Swift篇—09_属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要 ...