Log4j——系统必备“武器”之一

 
简介
  Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库、甚至是套接口服务器等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。
  在需要的时候,这些都可以通过一个配置文件来灵活地进行配置,而不需要修改程序代码。
 
安装
 
我们关心的问题
对于一个日志处理功能来说,我们主要关心的有3个问题:
谁来记录日志?——Logger
  • 如何取得Logger实例?
  1、有很多方法可以创建一个日志记录器(Logger),下面方法可以取回root日志记录器:
Logger logger = Logger.getRootLogger();
  2、还可以这样创建一个新的日志记录器:
Logger logger = Logger.getLogger("LogTest");
  3、比较常用的用法,就是根据类名实例化一个静态的全局日志记录器:
static Logger logger = Logger.getLogger(LogTest.class);
  • 如何记录日志?
日志级别(Level)对应的记录方法(Logger
FATAL(0)log.fatal()
ERROR(3)log.error()
WARN(4)log.warn()
WARN(6)log.info()
DEBUG(7)log.debug()
记录到哪里?——Appender
  1、ConsoleAppender 使用用户指定的布局(layout) 输出日志事件到System.out或者 System.err。默认的目标是System.out。
  2、DailyRollingFileAppender 扩展FileAppender,因此多个日志文件可以以一个用户选定的频率进行循环日志记录。
  3、FileAppender 把日志事件写入一个文件
  4、RollingFileAppender 扩展FileAppender备份容量达到一定大小的日志文件。
  5、WriterAppender 根据用户的选择把日志事件写入到Writer或者OutputStream。
  6、JDBCAppender 把日志事件写入到数据库中。
日志的格式?——Logger
  1、HTMLLayout 格式化日志输出为HTML表格。
  2、PatternLayout 根据指定的 转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转换模式。
  3、SimpleLayout 以一种非常简单的方式格式化日志输出,它打印级别 Level,然后跟着一个破折号“-“ ,最后才是日志消息。
 
配置文件说明
  log4j之所以简单易用就是它的可配置性,通过将上面的问题2、3用配置文件来指定,我们的系统就有了强大、近乎完美的日志记录功能!下面是一个配置文件的例子:logconfig.properties

log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true

# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

# 应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 应用于按天产生文件
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 用于数据库
# 说明: 数据库:mysql
# 首先创建一数据库表(LOG4J)说明:
# 字段 描述
# GUID 流水号(自增列)
# DATE 时间
# THREAD 当前线程
# LEVEL 当前级别
# CLASS 当前java程序/方法
# MESSAGE 当前输出信息
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (DATE,THREAD,LEVEL,CLASS,MESSAGE) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# “%d %t %p %l %m %n” 的含义:

# %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},输出类似:2005-7-19 17:49:27;
# %t 产生该日志事件的线程名;
# %p 日志的log_level,如DEBUG、WARN或者INFO;
# %c 输出所属的类目,通常就是所在类的全名,如“iNotes.Default”;
# %m 日志的内容;
# %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如write2database.main(write2database.java:33);
# %n 输出一个回车换行符,Windows平台为“ ”,Unix平台为“ ”

 
示例

package com.javer.test.log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.HTMLLayout;

/**
* javer的Log4j例子程序
* @author javer QQ:84831612
* @version 1.0
* @version http://blog.csdn.net/java008
*/
public class LogTest
{
 public static void main(String[] args)
 {
  String FILEPATH = "f://logconfig.properties";
  PropertyConfigurator.configure(FILEPATH);
  Logger log = Logger.getLogger(LogTest.class);
// log.addAppender(new HTMLLayout());
  for(int i=0;i<10;i++)
  {
   log.info("第"+(i+1)+"条调试信息");
   log.debug("SQLException:", new java.sql.SQLException("SQL异常!"));
   log.info("hello log4j!");
  }
 }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值