事件输出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

    

文章结束给大家分享下程序员的一些笑话语录: 古鸽是一种搜索隐禽,在中国快绝迹了…初步的研究表明,古鸽的离去,很可能导致另一种长着熊爪,酷似古鸽,却又习性不同的猛禽类——犤毒鸟

--------------------------------- 原创文章 By
事件和输出
---------------------------------

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3106702.html