Log4J日志整合及配置详解

历史

Log4j 是基于Java开发的日志框架,其作者Ceki Gülcü将Log4j捐献给了Apache软件基金会,使之成为了Apache日志服务的一个子项目。
Log4j虽然是Java日志服务,因其出色的表现,被孵化出了支持C, C++, C#, Perl, Python, Ruby等语言的子框架。
Log4j早在1996年就被创立,之后经过改进与增强,正式对外发布。
2015年9月,Apache软件基金业宣布,Log4j不在维护,建议所有相关项目升级到Log4j2.

简介

Log4J 是 Apache 的一个开源项目,通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

调用log4j功能代码

import org.apache.log4j.Logger;

private static Logger logger = Logger.getLogger(App.class);

一、组成

Log4J 主要由 Loggers (日志记录器)、Appenders(输出端)和 Layout(日志格式化器)组成。其中 Loggers 控制日志的输出级别与日志是否输出;Appenders 指定日志的输出方式(输出到控制台、文件等);Layout 控制日志信息的输出格式。

1、日志级别

Log4J 在 org.apache.log4j.Level 类中定义了FATALERRORWARNINFODEBUGTRACE、6种日志级别:

fatal	将会导致应用程序退出的错误
error	发生错误事件,但仍不影响系统的继续运行
warn	警告,即潜在的错误情形
info	一般和在粗粒度级别上,强调应用程序的运行全程
debug	一般用于细粒度级别上,对调试应用程序非常有帮助
trace   近次于debug

注:Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

2、Appender(输出端)

Appender 用来指定日志输出到哪个地方,可以同时指定日志的输出目的地。

格式:log4j.appender.appenderName = className

aappenderName:自定义appderName,在log4j.rootLogger设置中使用

bclassName:可设值如下:

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  • org.apache.log4j.jdbc.JDBCAppender
3、Layout(日志格式化器)

格式:log4j.appender.appenderName.layout = className

aappenderName:自定义appderName,在log4j.rootLogger设置中使用

bclassName:可设值如下:

  • org.apache.log4j.HTMLLayout 格式化日志输出为HTML表格形式
  • org.apache.log4j.SimpleLayout 简单的日志输出格式化,打印的日志格式为(info - message)
  • org.apache.log4j.PatternLayout 最强大的格式化期,可以根据自定义格式输出日志,如果没有指定转换格式,就是用默认的转换格式

注意当且近当className为org.apache.log4j.PatternLayout时,我们自定义的输出格式可以如下表示。
log4j.appender.appenderName.layout.ConversionPattern = 自定义的输出格式

二、配置案例

1、配置根Logger

格式:log4j.rootLogger = [ level ] , appenderName1, appenderName2, …(默认输出目的地,当前端传入类名)

level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。通过在这里设定级别,您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。

appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。

2、控制台
### 设置###
log4j.rootLogger = info,console
log4j.additivity.org.apache=true

### 输出信息到控制抬 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender //表示输出信息到控制抬
log4j.appender.console.Target = System.out // 默认值是System.out ,也可以写成System.err
log4j.appender.console.Threshold = error //指定日志信息的最低输出级别
log4j.appender.console.ImmediateFlush = true //表示所有消息都会被立即输出,设为false则不输出,默认值是true
//控制信息输出控制台的格式
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy MM dd HH\:mm\:ss}-%p %t %c -%l %m%n
3、日志文件
### 设置###
log4j.rootLogger = info,file
log4j.additivity.org.apache=true

### 输出信息到指定文件 ###
log4j.appender.file = org.apache.log4j.FileAppender //输出信息到指定文件
log4j.appender.file.File = logging.log4j // 指定消息输出到logging.log4j文件中
log4j.appender.file.Threshold = error //指定日志信息的最低输出级别,默认为DEBUG
log4j.appender.file.ImmediateFlush = true //表示所有消息都会被立即输出,设为false则不输出,默认值是true
//控制信息输出文件的格式
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy MM dd HH\:mm\:ss}-%p %t %c -%l %m%n
3、定期回滚日志文件
### 设置###
log4j.rootLogger = info,dayfile
log4j.additivity.org.apache=true

### 输出信息到指定文件 ###
log4j.appender.dayfile = org.apache.log4j.DailyRollingFileAppender //输出信息到指定文件
log4j.appender.dayfile.File = logging.log4j // 指定消息输出到logging.log4j文件中
log4j.appender.dayfile.Threshold = error //指定日志信息的最低输出级别,默认为DEBUG
log4j.appender.dayfile.ImmediateFlush = true //表示所有消息都会被立即输出,设为false则不输出,默认值是true
log4j.appender.dayfile.Append = true //true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true

###其值如下###
1)'.'yyyy-MM:每月
2)'.'yyyy-ww:每周
3)'.'yyyy-MM-dd:每天
4)'.'yyyy-MM-dd-a:每天两次
5)'.'yyyy-MM-dd-HH:每小时
6)'.'yyyy-MM-dd-HH-mm:每分钟
//值是'.'yyyy-MM ,每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM
log4j.appender.dayfile.DatePattern = '.'yyyy-MM 
//控制信息输出文件的格式
log4j.appender.dayfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dayfile.layout.ConversionPattern=%d{yyyy MM dd HH\:mm\:ss}-%p %t %c -%l %m%n
4、回滚日志文件
### 设置###
log4j.rootLogger = info,rollingFile
log4j.additivity.org.apache=true

### 输出信息到指定文件 ###
log4j.appender.rollingFile = org.apache.log4j.DailyRollingFileAppender //输出信息到指定文件
log4j.appender.rollingFile.File = logging.log4j // 指定消息输出到logging.log4j文件中
log4j.appender.rollingFile.Threshold = error //指定日志信息的最低输出级别,默认为DEBUG
log4j.appender.rollingFile.ImmediateFlush = true //表示所有消息都会被立即输出,设为false则不输出,默认值是true
log4j.appender.rollingFile.Append = true //true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true
//后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
log4j.appender.rollingFile.MaxFileSize = 100KB 
//指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。
log4j.appender.rollingFile.MaxBackupIndex = 2 
//控制信息输出控文件的格式
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy MM dd HH\:mm\:ss}-%p %t %c -%l %m%n
5、输出到数据库
### 设置###
log4j.rootLogger = info,database
log4j.additivity.org.apache=true

### 输出信息到数据库 ###
log4j.appender.database = org.apache.log4j.jdbc.JDBCAppender //输出信息到数据库
log4j.appender.database.URL = jdbc:mysql://localhost:3306/test 
log4j.appender.database.driver = com.mysql.jdbc.Driver 
log4j.appender.database.user = root
log4j.appender.database.password = 123456 
log4j.appender.database.sql = INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n') 

//控制信息输出格式
log4j.appender.database.layout = org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=%d{yyyy MM dd HH\:mm\:ss}-%p %t %c -%l %m%n
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值