log4j学习笔记

1. log4j的一些基本概念

log4j中的三个主要的类:
1) 公共类Logger
这是log4j的核心类,负责处理日志记录的操作
2) 公共接口Appender
负责控制日志输出,如输出到文件、控制台等等
3) 抽象类Layout
负责控制日志输出的格式

1.1 Logger

日志记录器(Logger)是日志处理的核心组件。 log4j具有5种正常级别(Level),日志记录器(Logger)的可用级别 Level (不包括自定义级别  Level)如下:
  • static Level DEBUG
DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。
  • static Level INFO
INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。
  • static Level WARN
WARN level表明会出现潜在错误的情形。
  • static Level ERROR
ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
  • static Level FATAL
FATAL level指出每个严重的错误事件将会导致应用程序的退出。

另外,还有两个可用的特别的日志记录级别: 
  • static Level ALL
ALL Level是最低等级的,用于打开所有日志记录。
  • static Level OFF
OFF Level是最高等级的,用于关闭所有日志记录。

比较常用的实例化Logger对象的方法如下:
Logger logger = Logger.getLogger(MyClass.class);
用下面方法设置级别:
logger.setLevel((Level)Level.WARN);
日志记录器(Logger)将只输出那些级别高于或等于它的级别的信息。

1.2 Appender

下面列出几种常用的Appender:
  1. ConsoleAppender:使用用户指定的布局(layout) 输出日志事件到System.out或者 System.err。默认的目标是System.out。

  2. DailyRollingFileAppender 扩展FileAppender,因此多个日志文件可以以一个用户选定的频率进行循环日志记录。

  3. FileAppender 把日志事件写入一个文件

  4. RollingFileAppender 扩展FileAppender备份容量达到一定大小的日志文件。

  5. WriterAppender根据用户的选择把日志事件写入到Writer或者OutputStream。

  6. SMTPAppender 当特定的日志事件发生时,一般是指发生错误或者重大错误时,发送一封邮件。

  7. SocketAppender 给远程日志服务器(通常是网络套接字节点)发送日志事件(LoggingEvent)对象。

  8. SocketHubAppender 给远程日志服务器群组(通常是网络套接字节点)发送日志事件(LoggingEvent)对象。

  9. SyslogAppender给远程异步日志记录的后台精灵程序(daemon)发送消息。

  10. TelnetAppender 一个专用于向只读网络套接字发送消息的log4j appender。

1.3 Layout

下面列出log4j的三种典型的Layout
  1. HTMLLayout 格式化日志输出为HTML表格。

  2. PatternLayout 根据指定的 转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转换模式。

  3. SimpleLayout 以一种非常简单的方式格式化日志输出,它打印级别 Level,然后跟着一个破折号“-“ ,最后才是日志消息。

以上三段对log4j的介绍,出自http://blog.csdn.net/wlq1983/article/details/2827638

2. log4j的典型应用

2.1 简单日志写入文件

import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;

public class Simpandfile {
	static Logger logger = Logger.getLogger(Simpandfile.class);

	public static void main(String args[]) {
		Layout layout = new SimpleLayout();
		Appender appender = null;
		try {
			appender = new FileAppender(layout, "MyLog.log", false);//false表示不追加写日志
			//在控制台输出log信息
			//appender = new ConsoleAppender(layout,ConsoleAppender.SYSTEM_ERR);
			logger.addAppender(appender);
			logger.setLevel((Level) Level.DEBUG);
			int i = 1/0;
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage(),e);
		}
	}
}

2.2 RollingFileAppender

这个对象可以使得log4j每天产生一个日志文件。
下面这个程序将演示如何将log4j的配置信息写入XML文件中:
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import java.net.URL;


public class InitUsingXMLPropertiesFile implements Runnable {

	private static Logger logger = Logger.getLogger(InitUsingXMLPropertiesFile.class);
	
	//构造函数,初始化log4j
	public InitUsingXMLPropertiesFile(){
		String resource = "logConfiguration.xml";
		URL configFileResource = InitUsingXMLPropertiesFile.class.getResource(resource);
		DOMConfigurator.configure(configFileResource.getFile());
	}

	public static void main(String argv[]) {
		InitUsingXMLPropertiesFile initUsingXMLPropertiesFile = new InitUsingXMLPropertiesFile();
		initUsingXMLPropertiesFile.write();
	}

	public static void write() {
		// Add a bunch of logging statements ...
		logger.debug("Hello, my name is Homer Simpson.");

		logger.info("We are the Simpsons!");

		logger.warn("Mmm...forbidden donut.");

		logger.error("Dear Baby, Welcome to Dumpsville. Population: you.");
		
		try {
			int i=1/0;
		} catch (Exception e) {
			// TODO: handle exception
			logger.error(e.getMessage(),e);
		}
	}
}

下面是logConfiguration.xml文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">

<log4j:configuration>
        
  <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
     <!-- 配置日志记录文件 -->
     <param name="File" value="Indentify-Log.txt"/>
     <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm"/>
	 <param name="Append" value="false"/>
     <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%p] - %m%n"/>
    </layout>
  </appender>

  <root>
    <priority value ="debug" />
    <appender-ref ref="DailyRollingFileAppender"/>
  </root>

</log4j:configuration>

log4j输出格式控制: http://dolphin-ygj.iteye.com/blog/312504
一个配置比较全的log4j的配置文件: http://avaj.iteye.com/blog/246088

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值