项目中一般都需要日志输出。这里主要谈谈commons-logging、log4j、slf4j、logback这四个东西。
可以使用apache commons logging + log4j组合,或者slf4j + logback的组合(新秀)。
commons-logging:
简介:日志的门面接口。避免和具体的日志方案直接耦合。
我
们经常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。为什么我们在使用 log4j 的同时还要引入
commons-logging.jar 呢?原因是commons-logging只是一种日志前端接口,而log4j才是真正的输出日志实现。
官网:http://commons.apache.org/proper/commons-logging/
使用时导入jar包:commons-logging-[version].jar
log4j:
简介:经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;
我们也可以通过编写配置文件来控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
官网:http://logging.apache.org/log4j/2.x/
使用时导入jar包:log4j-[version].jar
一般使用commons-logging时,都要导入log4j,因为其底部是调用了log4j,如果没导入,会出现“找不到类”异常。
tips:commons项目也是Apache很强大的一个项目,主要提供编程时一些公共的功能。
slf4j:
简介:java简单日志门面。 是对不同日志框架提供的一个门面封装。可作为commons-logging的替代。
是一种日志前端接口,可以用logback来作为它的实现。
官网:http://www.slf4j.org/
使用时导入jar包:slf4j-api-[version].jar
logback:
简介:一个通用可靠、快速灵活的日志框架,可以代替log4j作为一种新的解决方案。
官网:http://logback.qos.ch/
使用时导入jar包:logback-core-[version].jar、logback-classic-[version].jar
logback为什么要和slf4j结合使用:原因跟commons-logging和log4j结合使用一样!
log4j:项目中使用log4j来进行 日志 输出管理 【详解】:
为什么需要Log4j?---项目的调试是log4j产生的内在驱动力
原始的方法是:把信息输出到屏幕(console),利用JDK提供的System.out.println。但是,这样做的坏处是显而易见的:
a)信息的输出不够灵活,并且繁琐。比如,要输出执行处的文件名,行数,当前时间等,println显得很原始。
b)如果要改变输出的内容和格式,需要重新编译源程序。
c)更严重的是,如果程序中有很多的println,会严重的影响程序的性能。
Log4j使用的几个关键点?
——根记录器(Logger),输出端(appenders)和布局(layouts)
简单示例:
#定义DEBUG优先级,R为日志输出目的的 log4j.rootLogger=DEBUG, R #设置日志输出类型,为文件类型 log4j.appender.R=org.apache.log4j.FileAppender #org.apache.log4j.ConsoleAppender,将日志信息输出到控制台 #org.apache.log4j.FileAppender,将日志信息输出到一个文件 #org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件 #org.apache.log4j.WriterAppender,将日志信息以流格式发送到任意指定的地方。 #org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中 #设置日志文件名my.log log4j.appender.R.file=my.log #每次在文件尾写入新的日志信息 log4j.appender.R.Append=true #日志输出信息格式类型 log4j.appender.R.layout=org.apache.log4j.PatternLayout #org.apache.log4j.HTMLLayout,以HTML表格形式布局 #org.apache.log4j.PatternLayout,可以灵活地指定布局模式 #org.apache.log4j.SimpleLayout,包含日志信息的级别和信息字符串 #日志输出信息格式为 换行、换行、日期、优先级、[类名]、日志信息、换行 log4j.appender.R.layout.ConversionPattern=%n%n%d%p[%c]-%m%n #%c 输出日志信息所属的类的全名 #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 #%f 输出日志信息所属的类的类名 #%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 #%m 输出代码中指定的信息,如log(message)中的message #%n 输出一个回车换行符,Windows平台为“ ”,Unix平台为“ ” #%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推 #%r 输出自应用启动到输出该日志信息所耗费的毫秒数 #%t 输出产生该日志事件的线程名
log4j的配置文件——log4j.properties或者log4j.xml
a)有几种方式可以配置Log4J
◆在程序中调用BasicConfigurator.configure()方法;
◆配置放在文件里,通过命令行参数传递文件名字,通过
PropertyConfigurator.configure(args[x])解析并配置;
◆配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
◆配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。
b)配置文件的初始化:
通过应用服务器完成初始化
通过servlet辅助完成初始化
java代码写日志简单示例:
package com.log4j; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class Log4jTest { static Logger logger; public static void main(String[] args) { String filePath = Log4jTest.class.getResource("/").getPath().replaceAll("%20", " "); System.out.println("filePath=" + filePath); logger = Logger.getLogger(Log4jTest.class); PropertyConfigurator.configure(filePath + "log4j.properties"); //输出 错误信息 logger.error("出错了!!"); //一般信息 logger.info("my name is chenyouhuang!!"); //警告信息 logger.warn("warning!!"); //调试信息 logger.debug("debug!!"); //致命错误信息 logger.fatal("致命错误!!"); } }