- 浏览: 531589 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (230)
- java (87)
- c/c++/c# (39)
- ASP.net MVC (4)
- eclipse/visual studio (3)
- tomcat/weblogic/jetty (13)
- linux/unix/windows (20)
- html/javascript/jquery/kendo/bootstrap/layui/vue/react (31)
- hibernate/struts/spring/mybatis/springboot (21)
- lucene/solr/ELK (2)
- shiro (0)
- oracle/sqlserver/mysql/postgresql (23)
- shell/python/ruby (6)
- android (0)
- maven/ant (1)
- freemarker/thymeleaf/velocity (1)
- open source project (41)
- cache/memcached/redis (0)
- nosql/hadoop/hbase/mongodb (0)
- system architecture/dubbo/zookeeper (0)
- software testing (0)
- system optimization (0)
- system security (0)
- tcp/udp/http (2)
- roller/wordpress (2)
- 工具收藏 (8)
- 文摘 (4)
- 生活 (0)
最新评论
-
coconut_zhang:
这个demo 非常完整了,是指下面说的那个html 模版,模版 ...
flying sauser, thymeleaf实现PDF文件下载 -
a93456:
你好,你有完整的demo吗? String template这 ...
flying sauser, thymeleaf实现PDF文件下载 -
yujiaao:
fn 函数循环是没有必要的啊,可以改成
protecte ...
Java 笛卡尔积算法的简单实现 -
安静听歌:
设置了.setUseTemporaryFileDuringWr ...
使用jxl导出大数据量EXCEL时内存溢出的解决办法 -
q280499693:
写的很详细,但是我现在想知道他们是怎么定位log4j.prop ...
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
1、出现的原因:log4j,slf4j结合使用时,这里说下slf4j的一点原理:它是facade模式设计的,简单的说它只是个门面,具体做事的还是被他包装起来的(如:apache common logging,log4j,jdklogging等),所以在搭建项目是如果想使用slf4j那你必须还得选择一个干活的工具,也就是对应的配置文件,这里我选者Log4j,相应的配置文件是log4j.properties.
2、为什么出错了:我在搭建工程的时候放了log4j-1.2.16.jar、slf4j-api-1.5.11.jar、slf4j-simple-1.5.11.jar,使用的配置文件是log4j.properties,用:
PropertyConfigurator.configure("conf/log4j.properties");
加载了日志配置,在spring中打出的日志和log4j.properties指定的格式相同,但是我在自己的程序中输出日志时显示的格式和指定的不同,应为没有琢磨透,所以很晕,无解,后来单独建立个工程找出了问题所在。其实很简单:
slf4j-simple-1.5.11.jar就是Jdk Logging相关的jar,而Jdk logging系统默认有一个配置文件,在JAVA_HOME中,而JDk logging加载配置文件的时候有个优先顺序(自己去查),所以出现了日志输出不同的问题。
选择JDK自带的日志系统,则只需要将slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar放置到classpath中即可,如果中途无法忍受JDK自带的日志系统了,想换成log4j的日志系统,仅需要用slf4j-log4j12-1.5.10.jar替换slf4j-jdk14-1.5.10.jar即可
应用举例
我们先举个实际例子,让大家有个直观认识,建立一个简单测试类,如下:
- package chb.test.slf4j;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * @author chb
- *
- */
- public class TestSlf4j {
- Logger log = LoggerFactory.getLogger(TestSlf4j.class);
- public void testLog(){
- log.info("this is a test log");
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- TestSlf4j slf = new TestSlf4j();
- slf.testLog();
- }
- }
1>JDK自带的log输出
首先,我们在classpath中加入slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar两个包,然后运行main函数,输出信息如下:
- 2010-1-5 21:44:47 chb.test.slf4j.TestSlf4j testLog
- 信息: this is a test log
2>slg4j提供的simple log
然后,我们用slf4j-simple-1.5.10.jar替换slf4j-jdk14-1.5.10.jar,选择使用slf4j提供的simple log,输出信息如下:
- 0 [main] INFO chb.test.slf4j.TestSlf4j - this is a test log
3>log4j日志输出
再然后,我们再用slf4j-log4j12-1.5.10.jar替换slf4j-simple-1.5.10.jar(记得classpath也需要增加log4j依赖jar包),同时增加一个log4j.properties文件,内容如下:
- log4j.debug=true
- log4j.rootLogger=DEBUG,stdout
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.Target=System.out
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p - %m%n
我们再稍微修改一下main函数,加载一下log4j.properties,如;
- public static void main(String[] args) {
- System.setProperty("log4j.configuration", "log4j.properties");
- TestSlf4j slf = new TestSlf4j();
- slf.testLog();
- }
运行main函数,输出结果如下:
- log4j: Parsing for [root] with value=[DEBUG,stdout].
- log4j: Level token is [DEBUG].
- log4j: Category root set to DEBUG
- log4j: Parsing appender named "stdout".
- log4j: Parsing layout options for "stdout".
- log4j: Setting property [conversionPattern] to [%d{ABSOLUTE} %5p - %m%n ].
- log4j: End of parsing for "stdout".
- log4j: Setting property [target] to [System.out].
- log4j: Parsed "stdout" options.
- log4j: Finished configuring.
- 22:01:40,831 INFO - this is a test log
原理介绍--静态绑定
大家看到要使用哪种日志系统,只需要将对应的日志系统所需要的jar包文件(包括slf4j提供的jar包和日志系统自身依赖的jar包,例如:slf4j-log4j12-1.5.10.jar和log4j.1.2.jar)放入classpath即可,slf4j可以自动探测具体使用哪种日志系统,这种技术被称为静态绑定。
在实际使用中,我们通过LoggerFactory.getLogger()获得logger,查看LoggerFactory的源代码会发现如下两点,
- LoggerFactory通过StaticLoggerBinder.getSingleton().getLoggerFactory()获得LogFactory,然后再通过该LogFactory来获取logger的
- 但是StaticLoggerBinder类并不在slf4j-api-1.5.10.jar中,分析与具体日志系统相关的jar包,会发现每个jar包都有一个StaticLoggerBinder类的实现(如slf4j-log4j12-1.5.10.jar、slf4j-simple-1.5.10.jar、slf4j-jdk14-1.5.10.jar均有StaticLoggerBinder类实现),这就很明白了,slf4j在启动时会动态到classpath中查找StaticLoggerBinder类,找到之后就可以生成对应日志系统的日志文件了。
这里就有一个问题了,slf4j是如何将自己的通用日志格式转成不同的日志系统的格式的呢?
我们再分析每个日志系统相关的源代码,会发现不同日志系统包都会有一个Adapter,用来在slf4j和不同日志系统之间做转换。
发表评论
-
easypoi 按照模板到出excel并合并单元格
2022-11-10 21:46 107这是entity类,注解的mergeVertical是纵向合 ... -
Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
2017-03-31 14:59 1282一、概述 1、问题描述 使用Java处 ... -
logback的使用和logback.xml详解
2017-03-09 11:20 2134一、logback的介绍 Logback是由log4j ... -
jxls操作excel文件
2017-03-03 14:51 1014JXLS是基于Jakarta POI API的Excel报表 ... -
eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
2016-04-22 08:33 695在eclipse中用过maven的可能都遇到过这种情况,我 ... -
Java_Ant详解
2015-06-15 16:54 6881,什么是antant是构建工 ... -
httpClient通过代理(Http Proxy)进行请求
2014-09-16 14:18 1156httpClient通过代理(Http Proxy)进行请求 ... -
httpclient上传文件及传参数
2014-09-16 11:07 11513用到的包有commons-httpclient-3.0.1. ... -
Java文件下载的几种方式
2013-08-19 14:15 835public HttpServletResponse dow ... -
http上传文件深度解析-高性能http传输
2013-07-23 10:41 9718最近在做web服务器的时候将一些应用集成在了服务器里面,比 ... -
plupload实现多图片上传
2013-07-19 16:12 23201最近发现一个非常牛的上传组件(http://www.plu ... -
java servlet common-fileupload 实现的文件批量上传
2013-07-18 14:31 6364结合前辈们的代码, 写了个用servlet 和 common ... -
调用axis2 WebService三种方法
2013-06-28 13:41 1744第一:简单的使用axis2包自己实现调用 package ... -
java-jsch实现sftp文件操作
2013-06-26 13:55 3615(曾在天涯)的文章详细讲解了jsch中的函数以及用法 ht ... -
url encode的问题
2012-11-06 08:27 58931.urlencode和decode 字符的编码和解码在有中 ... -
Java集合运算(交集,并集,差集)
2012-11-02 14:59 12932在实现数据挖掘一些算法或者是利用空间向量模型来发现相似文档的时 ... -
使用jxl导出大数据量EXCEL时内存溢出的解决办法
2012-11-02 14:05 11690POI或者JXL在导出大量数据的时候,由于它们将每一个单元格生 ... -
Java 笛卡尔积算法的简单实现
2012-10-31 15:26 9438笛卡尔积算法的Java实现: (1)循环内,每次只有一列向下 ... -
java实现求一个项目集合任意元子集的通用算法
2012-10-31 15:25 4在关联规则挖掘过程中,经常涉及到求一个频繁项目集的n元子集,在 ... -
java实现求一个项目集合任意元子集的通用算法
2012-10-31 15:21 1452在关联规则挖掘过程中,经常涉及到求一个频繁项目集的n元子集,在 ...
相关推荐
log4j-1.2.16.jar与slf4j-api-1.6.1.jar加个转换包和log4j.properties示例
根据项目需要,要求日志文件名及输出的日志内容头为特殊的格式,因此重写了log4j的一些方法,如要求的格式和项目不同,可根据示例参考进行再次的修改
slf4j-log4j12-1.5.8完整例子,含所有jar,log4j.properties ,java文件
日志记录文件,使用log4j,和slf4j。这种联合使用的方式,提供log4j的jar包、log4j-over-slf4j的jar包,slf4j-api的jar包,以及log4j.properties文件。
一、运行部署 1、将LogerWriteMySqlDemo项目导入Eclipse 2、修改db.properties文件中数据库...三、配置文件db.properties、log4j.properties两个配置文件可以通过servlet配置来使用,也可以直接先用DbUtil.java中先测试
使用log4j2实现日志数据脱敏
apache-log4j-1.2.16.zip log4j.properties slf4j-log4j12-1.7.2.jar
4.将log4j.properties复制到项目src目录下并打开, 可以找到语句:log4j.logger.org.hibernate.tool.hbm2ddl=debug ,这就是用来显示DDL语句的配置,还有其他配置用来显示其他信息,不要的话可以注释掉
slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar 3.添加Log4j的配置文件Log4j.properties
hibernate用log4j输出更详细的信息,其中包含log4j的jar包,slf4j的api包,slf和log4j的关系jar包以及log4j.properties。总之是全的,全部导入项目中就可以使用了。
里面含有1.5.2版本和1.7.5版本的,如果你需要打印hibernate或则ibatis的sql语句,需要下面四个jar包哟,我放在里面有个文件夹的。 然后你还需要配置一个log4j.properties文件
搭建sf4j日志系统所需jar包和properties 内容包括 slf4j-log4j12-1.7.9.jar slf4j-api-1.7.21.jar log4j-1.2.17.jar log4j.properties
包括: 1、slf4j-api-1.6.1.jar 2、slf4j-log4j12-1.6.1、 3、org.apache.log4j_1.2.15.v201005080500 4、log4j.properties 5、log4j.xml
log4j-1.2.16.jar与slf4j-api-1.6.1.jar加个转换包和log4j.properties示例。。下载即用
grayrabbit-slf4j-logj12:使用slf4j的统一接口时,使log4j记录%l参数量能够支持自定义的记录位置(在类路径:log4jadapter.properties中,内容:adapter = xxx.xxxxLogger)称为之前封装的那个类(这样log4j会把...
JFinal 自身对第三方无依赖,但当需要第三方功能支持时则需要添加相应的 jar 文件 1:只有 jfinal-bin-xx.... 而log4j.properties 不存在时无日志输出。jdk logger 需要的logging.properties文件 也在此目录下提供了
该文档为官方webx框架文档,对webx进行了全面的讲解,非常实用,并附学习的Demo 为什么要用Webx而不是其它的开源框架? 现在有很多Java的Web框架可供选择,并且它们也都是免费的...3.1.2. 初始化日志系统 ..............
Maven项目 Java中的基础Maven项目,带有日志记录(通过SLF4J通过log4j)和可执行jar打包 记录都已完成到STDOUT和文件(/logs/test.log)。 有关配置,请参见/src/main/resources/log4j.properties
Using SLF4J ............................................................................................ 13 Using Log4J ...................................................................................
│ log4j.properties │ messageResource_zh_CN.properties │ spring.xml │ struts.xml │ ├─28个java常用的工具类 │ │ Base64.java │ │ Base64DecodingException.java │ │ CConst.java │ │ CharTools....