一、背景
在程序运行时常常会需要观察程序的运行状态,为程序运行的状态做标记,一开始我用System.Out来实现这个功能,然而发现当写的代码变多了的时候用这个方法显得很笨拙,而且要一直在代码中修修改改很不方便。后来发现log4j的设计其实就可以帮我们实现这个功能。于是了解了一下Log4j和Commons-logging。
二、Log4j
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,邮件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。Log4j的功能十分强大,然而在使用它的时候我们只需要引入Log4j的jar包和编写一个log4j.properties 配置文件就可以使用。然而大多数项目都不会直接使用Log4j 而是搭配其他日志接口一起使用比如Commons-logging。
三、Commons-logging
Commons-logging是为所有java日记实现提供一个统一的接口,它自身的日志功能平常弱,所以一般不会单独使用它。很多项目会搭配Log4j一起使用。 提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密耦合很贴心的帮我们自动选择适当的日志实现系统它甚至不需要配置。Commons-logging具体做了什么 推荐看这篇文章:好文推荐
四、如何使用
4.1 添加依赖
(1)如果使用maven,就在pom.xml 添加这些:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
(2)如果没有使用maven,就去官网下载导入对应的包 ,官网地址
4.2 编写log4j.properties配置文件
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到/Users/jlweng/Desktop/log.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/jlweng/Desktop/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到/Users/jlweng/Desktop/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =/Users/jlweng/Desktop/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
4.3 写个例子
package first;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Log4jTest {
private static Log logger = LogFactory.getLog(Log4jTest.class);
public static void main(String[] args) {
// System.out.println("This is println message.");
// 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
}
}