`

log4j和slf4j的介绍和区别

 
阅读更多

 

log4j简易入门

package com.cn.fangxin.log4j;

import org.apache.log4j.Logger;

public class HelloLog4j {
    private static final Logger logger = Logger.getLogger(HelloLog4j.class);
    public static void main(String[] args) {
        logger.debug("This is debug message");
        logger.info("This is info message");
        logger.warn("This is warn message");
        logger.error("This is error message");
    }
}

 

 

log4j简单配置log4j.properties

#可以设置级别:debug < info < warn < error

#debug: 显示debug, info, warn, error

#info: 显示info, warn, error

#warn: 显示warn, error

#error: 只显示error

#日志的输出级别由rootLogger和普通Logger设置的最高级别决定。

 

#log4j.rootLogger=debug,appender1

#log4j.rootLogger=info,appender1

log4j.rootLogger=warn,appender1

#log4j.rootLogger=error,appender1

 

#输出到控制台

log4j.appender.appender1=org.apache.log4j.ConsoleAppender

#样式为TTCCLayout

log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout

 

#这里配置的是类所在的包test.log4j, 逗号之前未配置日志输出级别,默认为根logger的级别

log4j.logger.test.log4j=, TEST

log4j.appender.TEST=org.apache.log4j.ConsoleAppender

log4j.appender.TEST.layout=org.apache.log4j.TTCCLayout

复制代码

log4j提供的Appender

org.apache.log4j.ConsoleAppender(控制台),

org.apache.log4j.FileAppender(文件),

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

复制代码

log4j提供的Layout

org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

复制代码

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

  %m 输出代码中指定的消息

  %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

  %r 输出自应用启动到输出该log信息耗费的毫秒数

  %c 输出所属的类目,通常就是所在类的全名

  %t 输出产生该日志事件的线程名

  %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

 

log4j配置示例:log4j.properties

 

#	-X: X信息输出时左对齐 
#	%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, 
#	%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921 
#	%r: 输出自应用启动到输出该log信息耗费的毫秒数 
#	%c: 输出日志信息所属的类目,通常就是所在类的全名 
#	%t: 输出产生该日志事件的线程名 
#	%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。 
#	%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 
#	%%: 输出一个"%"字符 
#	%F: 输出日志消息产生时所在的文件名称 
#	%L: 输出代码中的行号 
#	%m: 输出代码中指定的消息,产生的日志具体信息 
#	%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行 
#	
#	
#	可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 
#	1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。 
#	2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。 
#	3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 
#	4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉
	 
log4j.rootLogger=warn,myconsole,errinfo

#输出到控制台的日志
log4j.appender.myconsole=org.apache.log4j.ConsoleAppender
log4j.appender.myconsole.layout=org.apache.log4j.PatternLayout
#log4j.appender.myconsole.Threshold=warn
log4j.appender.myconsole.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%t] (%F:%L) - %m%n

#输出到文件的异常日志文件
log4j.appender.errinfo=org.apache.log4j.FileAppender
log4j.appender.errinfo.File=D:/ERROR.LOG
log4j.appender.errinfo.Threshold =ERROR
log4j.appender.errinfo.layout=org.apache.log4j.PatternLayout
log4j.appender.errinfo.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%t] (%F:%L) - %m%n



 

 

slf4j简介

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

实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

slf4j简单示例

package com.cn.fangxin.slf4j;

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

public class HelloSlf4j {
    private static final Logger logger = LoggerFactory.getLogger(HelloSlf4j.class);
    public static void main(String[] args) {
        logger.debug("This is debug message");
        logger.info("This is info message");
        logger.warn("This is warn message");
        logger.error("This is error message");
    }
}

假设使用log4j做为底层日志工具,运行以上程序需要三个包:log4j-1.2.xx.jar、slf4j-api-x.x.x.jar、以及slf4j-log4j12-x.x.x.jar,后两个包由slf4j提供,包名中的x表示版本号。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics