Log4j 在 spring 中的配置及应用

2015-11-16 13:41:35   最后更新: 2015-11-16 13:41:35   访问数量:1369




Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事 件记录器、UNIX Syslog守护进程等

我们也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程

这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码,使用起来十分的便利

 

想要使用 log4j,首先要在 pom.xml 中配置依赖:

<!-- 日志 --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <!-- slf4j-log4j绑定 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <!-- common-logging实际调用slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.7</version> </dependency> <!-- jdk14-logger实际调用slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>1.7.7</version> </dependency>

 

 

在 servlet-config.xml 中引入 log4j 配置文件:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:log4j.properties</value> </list> </property> </bean>

 

 

在 resource 目录下建立 log4j.properties,即可在 log4j.properties 文件中进行配置了

 

在 log4j 配置文件中,第一行通常是 rootLogger:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

 

根 Logger 指定了日志打印的基本配置

level 指定最低打印级别,比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来

Log4j 有 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别

Log4j 建议只使用 ERROR、WARN、INFO、DEBUG 四个级别

appenderName就是指定日志信息输出到哪个地方,可同时指定多个输出目的地

 

根 Logger 配置中,appenderName 指定了使用哪个 Appender,这里我们介绍一下 Appender 的配置

 

实现类

在 org.apache.log4j 中定义了很多实现类,可以实现预定的 log 处理处理方式

通过:

log4j.appender.{appenderName} = {realizeClass}

 

 

其中 appenderName 是自定义的 appender 名,realizeClass 即指定实现类

 

输出到控制台 -- org.apache.log4j.ConsoleAppender

#控制台输出 log4j.appender.A1=org.apache.log4j.ConsoleAppender #DEBUG以上级别是输出 log4j.appender.A1.Threshold=DEBUG #编码方式 log4j.appender.A1.Encoding=UTF-8 #是否立即输出 log4j.appender.A1.ImmediateFlush=true #使用System.err输出 log4j.appender.A1.Target=System.err #输出格式,表达式配置 log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.ConversionPattern=%-d{yyyy-MM-d HH:mm:ss, SSS}[%C]-[%p] %m%n

 

 

输出到文件 -- org.apache.log4j.FileAppender

#输出到文件 log4j.appender.F=org.apache.log4j.FileAppender #文件位置 log4j.appender.F.File=C:\\log4j.log #追加文件内容 log4j.appender.F.Append=true #输出格式表达式 log4j.appender.F.layout=org.apache.log4j.PatternLayout log4j.appender.F.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

 

 

Append 选项如果为 true 则在原文件内容上追加日志,否则 logger 初始化时会清空文件,也就是说,每次重启时,原来的日志都会丢弃

 

按大小滚动文件 -- org.apache.log4j.RollingFileAppender

#输出到滚动文件 log4j.appender.Rolling_File=org.apache.log4j.RollingFileAppender #DEBUG以上才使用 log4j.appender.Rolling_File.Threshold=DEBUG #滚动文件名 log4j.appender.Rolling_File.File=C:\\rolling.log #追加方式 log4j.appender.Rolling_File.Append=true #文件达到10KB就自动命名 log4j.appender.Rolling_File.MaxFileSize=10KB #最多备份100个文件 log4j.appender.Rolling_File.MaxBackupIndex=100 log4j.appender.Rolling_File.layout=org.apache.log4j.PatternLayout log4j.appender.Rolling_File.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

 

 

使用 FileAppender 并且追加日志,日志文件会越来越大,这显然是我们不想看到的,这个时候我们就需要使用滚动文件配置了

上面配置了滚动文件名为rolling.log,文件最大为10KB。当rolling.log达到10KB时,会自动更名为rolling.log1,rolling.log2,rolling.log3………………知道rolling.log100

 

按日期滚动文件 -- org.apache.log4j.Daily_RollingFileAppender

#输出到滚动文件 log4j.appender.Daily_Rolling=org.apache.log4j.Daily_RollingFileAppender #DEBUG以上才使用 log4j.appender.Daily_Rolling.Threshold=DEBUG #滚动文件名 log4j.appender.Daily_Rolling.File=C:\\daily_rolling-'yyyy-MM-dd'.log #追加方式 log4j.appender.Daily_Rolling.Append=true #滚动日期格式 log4j.appender.Daily_Rolling.DatePattern=.yyyy-MM-dd # 输出日期格式 log4j.appender.Daily_Rolling.layout=org.apache.log4j.PatternLayout log4j.appender.Daily_Rolling.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

 

这样,我们指定了按照日期来切分日志,文件名为 daily_rolling-'yyyy-MM-dd'.log

 

输出到JDBC数据库 -- org.apache.log4j.jdbc.JDBCAppender

#数据库输出 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DATABASE.Threshold=DEBUG #数据库连接URL log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4j #数据库驱动 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver #用户名 log4j.appender.DATABASE.user=root #用户密码 log4j.appender.DATABASE.password=password #执行SQL语句,列内容为表达式 log4j.appender.DATABASE.sql=insert into tb_log(date, priority, message, classname) values('%d', '%p', '%m', '%c') #输出格式 log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

 

 

引入包 -- org.apache.log4j.Logger

配置后,我们就可以通过引入 org.apache.log4j.Logger 包在 java 代码中使用了

 

创建变量 -- LoggerFactory.getLogger

通过 Logger.getLogger 调用返回一个 Logger 对象,操作这个 Logger 对象就可以进行日志写入了

这个方法的参数是一个 Class 对象,通常指的是要打印 log 的类 class 成员

public static Logger log = LoggerFactory.getLogger(Log4jTest.class);

 

打印 log

通过调用以下方法中的某个可以完成日志的打印:

log.trace("trace信息"); log.debug("debug信息"); log.info("info信息"); log.warn("warn信息"); log.error("errof信息"); log.fatal("fatal信息");

 

 

 

 

  1. Log4j详细介绍(五)----输出地Appender http://www.cnblogs.com/ArtsCrafts/archive/2013/06/07/log4j5.html
  2. 配置Log4j(很详细) http://blog.csdn.net/azheng270/article/details/2173430

 






技术帖      mvc      mysql      龙潭书斋      log      日志      java      framework      spring      springmvc      jdbc      logger      log4j      记录     


京ICP备15018585号