`
banxi1988
  • 浏览: 151942 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

Java日志系统学习之slf4j!

    博客分类:
  • java
阅读更多
大大小小的项目或者框架用到都有用到日志。但自己都是一知半解。
今天又要配置框架,下下决心好好学习总结下!

1. slf4j。
http://www.slf4j.org/
直接上官网直接学习。
上网查各种资料不是过时了,就是你抄我,我抄你。看起来没什么意思。
直接看用户手册。
1.1 最简单的使用方法 。在类路径上添加slf4j-api.jar和slf4j-simple.jar

package edu.guet.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloLog {
	private static final Logger log = LoggerFactory.getLogger(HelloLog.class);
	public static void main(String[] args) {
		log.info("hello,world");
		
	}
}
/***
输出结果:
0 [main] INFO edu.guet.log.HelloLog - hello,world
**/






   slf4j点位符,及日志级别:
package edu.guet.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLogPlaceHolder {
	private static final Logger log = LoggerFactory.getLogger(TestLogPlaceHolder.class);
	
	private String name;
	private int id;
	
	public static void main(String[] args) {
		TestLogPlaceHolder holder = new TestLogPlaceHolder();
		holder.setName("banxi");
	}

	public void setName(String name) {
		String oldName = name;
		this.name = name;
		log.debug("name set to {},old name is {}",name,oldName);
		log.warn("name set to {},old name is {}",name,oldName);
		log.error("name set to {},old name is {}",name,oldName);
		
		if(name.equals("banxi")){
			log.info("welcome,{} is coming",name);
		}
		
		
	}
}
/***
日志输入结果:
1 [main] WARN edu.guet.log.TestLogPlaceHolder - name set to banxi,old name is banxi
2 [main] ERROR edu.guet.log.TestLogPlaceHolder - name set to banxi,old name is banxi
2 [main] INFO edu.guet.log.TestLogPlaceHolder - welcome,banxi is coming

***/




  分析,slf4j可以使用{}作为点位符。默认情况下。debug级别的输出不显示。
   日志级别。
    error>warn>info>debug

   使用点位符是因为它可以提高性能。
测试如下:
// 使用点位符的情况:
		long beginTime = System.nanoTime();
		log.debug("name set to {},old name is {}",name,oldName);
		long endTime = System.nanoTime();
		log.info("placeholder spend time {}",(endTime - beginTime));
//输入使用时间:
//2 [main] INFO edu.guet.log.TestLogPlaceHolder - placeholder spend time 
8334
		


// 不使用点位符的情况
		long beginTime = System.nanoTime();
		log.debug("name set to"+name+",old name is"+oldName);
		long endTime = System.nanoTime();
		log.info("placeholder spend time {}",(endTime - beginTime));
// 日志输出如下:
1 [main] INFO edu.guet.log.TestLogPlaceHolder - placeholder spend time 42742		


一个是8334一个是42742。在实际上并不输入debug级别的情况下。使用点位符的性能是不使用的5倍。

再来测试下都是info级别,即要输入的情况下。性能比较:
// 这一次先是不使用点位符的代码
		long beginTime = System.nanoTime();
		log.info("name set to"+name+",old name is"+oldName);
		long endTime = System.nanoTime();
		log.info("placeholder spend time {}",(endTime - beginTime));
// 日志输出如下:
0 [main] INFO edu.guet.log.TestLogPlaceHolder - name set tobanxi,old name isbanxi
3 [main] INFO edu.guet.log.TestLogPlaceHolder - placeholder spend time 394765		


//  使用点位符的情况:
		long beginTime = System.nanoTime();
		log.info("name set to{},old name is{}",name,oldName);
		long endTime = System.nanoTime();
		log.info("placeholder spend time {}",(endTime - beginTime));
		
2 [main] INFO edu.guet.log.TestLogPlaceHolder - name set tobanxi,old name isbanxi
3 [main] INFO edu.guet.log.TestLogPlaceHolder - placeholder spend time 2342676


一个是2342676一个是394765
性能的差异也是5倍的样子。这个是可以理解的。因为String的连接已经有了优化。而使用点位符还要做解析。

静态?一个类的日志成员的变量,是声明为静态的好呢,还是实例的好呢?
他们各有好处。
主要区别在于,将Logger成员声明为静态的,性能及内存方面有优势。但实例型的Logger则是IOC友好的。
详细的说明参考slf4j的说明:
http://www.slf4j.org/faq.html#logging_performance

在spring的项目中使用各种的日志系统。
所以 配置spring框架使用的日志时,和自己利用slf4j和log4j的话需要以下日志包:
slf4j-api-version.jar
slf4j-log4j12-version.jar
jcl-over-slf4j-version.jar
log4j-1.2.16.jar

先去吃饭先。。。。

又到晚上了。上面说spring用到了那么多的日志系统。作为证据我得把他们找出来。

1. jcl
//在org.springframework.web.servlet.DispatcherServlet类导入类。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


2. log4j 用spring-mvc的模板就会看到有log4j.xml文件了。

3.slf4j
  在某处源代码有,当时看到了,现在找不到了。不过可以确定Spring-OSGi上有。在slf4j的网站上就有。

slf4j与其它日志系统的搭配看官网上的一张图就可以了。
如下:
点击查看图片

如果在iteye上已经有很多人对于java的日志系统有所总结,而且很多不错。
比如。
java日志,需要知道的几件事
对于可能出现的错误如:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
则是因为没有找到合适的slf4j绑定。

未完待续-------
分享到:
评论

相关推荐

    slf4j完整日志文件

    基于slf4j的完整资源

    java高级处理日志工具org.slf4j.jar

    java高级处理日志工具org.slf4j.jar,可以和org.slf4j.log4j结合起来使用

    java高级处理日志工具org.slf4j.log4j.jar,可以和org.slf4j.jar结合起来使用

    java高级处理日志工具org.slf4j.log4j.jar,可以和org.slf4j.jar结合起来使用

    非web工程使用slf4j输出日志

    非web工程使用slf4j输出日志 非web工程使用slf4j输出日志 非web工程使用slf4j输出日志

    slf4j-Logging

    slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade。Facade:门面,更底层一点说就是接口。他允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统。更直观一点,slf4j是个数据线,一端...

    浅谈Java日志框架slf4j作用及其实现原理

    日志记录是应用程序运行中必不可少的一部分。这篇文章主要介绍了浅谈Java日志框架slf4j作用及其实现原理,SLF4J是一个日志框架抽象层,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    slf4j-gao.rar

    分享我写的彩色控制台日志组件-基于slf4j-simple改造。 有颜色、最简单/全面的log内容、最佳的性能,能够定制所有的内容,所以我写了一个彩色控制台log的java组件。 原创不易多多支持。

    slf4j 1.6.4

    SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。 实际上,SLF4J所提供的核心API是一些...

    Slf4j日志相关jar包

    Slf4j日志相关jar包 包含log4j Slf4j jboss-logging commons-logging

    java的log4j、slf4j的jar包

    日志记录文件,使用log4j,和slf4j。这种联合使用的方式,提供log4j的jar包、log4j-over-slf4j的jar包,slf4j-api的jar包,以及log4j.properties文件。

    Loger_slf4j写入数据表Demo

    slf4j日志级别有五种:ERROR、WARN、INFO、DEBUG、TRACE,级别从高到底 其示例中取warn级别及写入数据库配置:database 三、配置文件db.properties、log4j.properties两个配置文件可以通过servlet配置来使用,也...

    slf4j-api-1.7.2.jar

    Simple Logging Facade for Java (SLF4J) The Simple Logging ...Java的简单日志外观(SLF4J)作为各种日志框架(例如JavaUTIL日志记录、LogCub、Log4J)的简单外观或抽象,允许终端用户在部署时插入所需的日志框架。

    调试日志之slf4j+logback

    NULL 博文链接:https://xiayingjie.iteye.com/blog/828498

    slf4j输入日志到mongodb

    演示了java中怎样使用slf4j把日志记录到mongodb中

    slf4j-1.4.3 log日志包

    slf4j-1.4.3 java开源log日志包

    slf4j与其它日志api的结合

    关于日志的一些小例子,包括slf4j, log4j等

    slf4j-1.7.17

    为什么使用 SLF4J 而不是 Log4J 来做 Java 日志

    slf4j+logback日志系统介绍

    SLF4J(Simple Logging Facade for Java)作为commons-logging的替代,为各种logging APIs提供了一个简单的统一接口,使得最终用户能够在部署的时候配置所希望的logging APIs的实现。

    jcl-over-slf4j-1.7.25.jar 由于下载次数较多,所需积分上去了,我已下调

    java 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很多其他很多日志...

    slf4j1.7最新版

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

Global site tag (gtag.js) - Google Analytics