Log4j 学习笔记

使用Log4j进行日志操作,简单笔记

Log4j简介:
Log4j是Apache的一个开放源代码项目,通过使用Log4j可以将日志信息输出到:文件、OutputStearn、java.io.Writer、远程Log4j服务器和远程Unix Syslog守护线程以及NT事件记录器。并且可以控制输出日志的格式。

在使用log4j的时候需要导入: log4j-1.2.8.jar或者log4j-1.2.9.jar

组成Log4j的基本组件(Logger、 Appender、 Layout):
1: Logger组件(记录器组件):
Logger组件负责产生日志,能够对日志进行筛选,控制什么样的日志可以被输出,什么样的日志应该被忽略。
程序员可以定义多个Logger组件,每个Logger组件都有唯一的名字,logger组件之间通过名字来表明Logger组件之间的隶属关系。
最高层次的Logger组件是:org.apache.log4j.Logger类中。使用此类中的静态方法:getRootLogger()来得到它。
Logger组件中最重要的一个属性——日志级别,
一共有5种可能的级别,升序排列为:DEBUG, INFO, WARN, ERROR, FATAL(都在org.apache.log4j.Level类中定义)
日志级别的作用:当程序编写完成以后当不再需要调式信息时,将日志级别调到最高即可

2:Appender组件:
在Log4j中,日志信息通过Appender组件输出到目的地,一个Appender实例就代表了一个目的地。一个记录器(Logger)可以拥有多个Appender
Appender的种类(4):
org.apache.log4j.ConsoleAppender: 控制台
org.apache.log4j.FileAppender: 指定的文件
org.apache.log4j.DailRollingFileAppender: 按照指定的日期或时间频率滚动产生日志文件
org.apache.log4j.RollingFileAppender: 当文件到达一定长度时,备份文件
每一个Appender都一个继承标记,用户决定记录器(Logger)是否可以继承其父记录器的Appender, 可以通过Logger类的setAddititivity(boolean)来设置(default=true)。对于Appender的继承,是一种叠加性继承。(在使用Appender的继承时,要尽量避免重复叠加的情况)。

3:Layout组件:
Layout组件负责格式化输出日志信息,一个Appender只能有一个Layout组件。
Layout组件的种类(5):
org.apache.log4j.SimpleLayout:由日志级别 + “-” + 消息 组成 例如:DEBUG – 错误
org.apache.log4j.HTMLLayout: 以HTML网页表格的形式输出日志信息(.html)
org.apache.log4j.xml.XMLLayout: 由一系列在log4j.dtd中定义的<log4j:event>元素组成
org.apache.log4j.TTCCLayout: 由时间(time),线程(thread), 类别(category), 和嵌套的上下文(context)信息组成。(TTCC有上述四个英文单词组成)(.log)
org.apache.log4j.PatternLayout: 程序员根据一系列的格式化标签,类似C中的printf()函数的输出


使用Log4j的基本步骤(总是采用以下三个步骤):
1:得到日志记录器(Logger)
log4j.rootLogger = INFO,console
log4j.logger.BrofeLogger = ,file
private static Logger logger = Logger.getRootLogger(); //: 得到根记录器组件
private static Logger brofeLogger = Logger.getLogger("BrofeLogger"); //: 得到自定义记录器

2: 读取配置文件
读取配置文件主要是得到Log4j的运行环境(也可以用程序来配置Log4j的配置环境但配置文件更灵活)。目前配置文件可以有两种形式:key=value的java属性格式文件,一种是XML文件。
Log4j运行时不对运行环境不做任何假定,特别是没有默认的Appender。在程序中设置Log4j的三种方法:
BasicConfigurator.configure():
创建一个简单的Log4j的配置。这个方法为根记录器(Logger)添加一个
ConsoleAppender的实例,输出的信息用PatternLayout的格式输出日志信息。并设置了根记录器的日志级别为:DEBUG.

PropertyConfigurator.configure(String propertyName/ Proterties prop):
使用java的属性文件配置Log4j的运行环境

DOMConfigurator.configure(String fileName): //: ServletURL + configFileName
使用XML文件配置Log4j的运行环境,xxx.dtd

在配置文件中配置基本的Log4j组件:
1:Logger组件:# xxxxxxxxx 注释 (.properties)(org.apache.log4j.Level)
log4j.rootLogger = [level], [appenderName1,/appenderName2/appenderName3]……
log4j.logger.[loggerName] = [level], [appenderName1/appenderName2/]…..
2:Appender组件:
log4j.appender.[appenderName]=org.apache.log4j.ConsoleAppender/FileAppender/
DailyRollingFileAppender/RollinFileAppender
3:Layout组件:
log4j.appender.[appenderName].layout= org.apache.log4j.SimpleLayout/HTMLLayout/XMLLayout/TTCCLayout/
PatternLayout

3:插入记录的语句:
Logger.debug(“”)/info(“”)/warn(“”)/error(“”)/fatal(“”)


NDC/MDC:
在Web应用中是一个基于多线程的应用,为类标识每个客户端产生的日志信息,故采用:NDC、MDC模式来解决:
当进入一个环境时调用NDC.push(String guestName), MDC.put(Object key, String value);
离开一个环境时调用NDC.pop(), MDC.get(Object key);
离开一个线程时调用:NDC.remove(), MDC.remove(Object key);
log4j.appender.simple.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%x] [%c]-[%-5p] %m%n%n
NDC: [%x] 输出 guestName
MDC:[%x]{Object key} 输出对应key的value

简单的Demo:

log4j.properties

## 简单的log4j的配置文件

## 配置根记录器的日志级别为:INFO,渲染器Appender的名字为:console
log4j.rootLogger = INFO, console, htmlfile

## 配置根记录器, 名为 console 的 Appender组件和Layout组件
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.SimpleLayout

## 配置根记录器, 名为 htmlfile 的Appender组件和Layout组件
log4j.appender.htmlfile = org.apache.log4j.FileAppender
log4j.appender.htmlfile.File = log.html
log4j.appender.htmlfile.layout = org.apache.log4j.HTMLLayout




import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Appender;
import org.apache.log4j.Logger;
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.Level;

import java.util.Properties;
/**
* Function: 测试使用简单的Log4j
* Date: 2007-11-23
* Author: brofe
*/
public class TestLog4j {

private static final String LOG4J_PATH = "log4j.properties";

//: 使用根记录器
private static Logger rootLogger = Logger.getRootLogger();

static {
Properties props = new Properties();

try {
props.load(TestLog4j.class.getResourceAsStream(LOG4J_PATH));
}catch (Exception ex) {
ex.printStackTrace();
}

//: 加载配置文件
org.apache.log4j.PropertyConfigurator.configure(props);
}

public TestLog4j () {
try {
int i = 0;
i = 9/0;
}catch (Exception ex) {
rootLogger.info("info msg...aaaaaaaaaaaa", ex);

}
}

public static void main(String[] args) {
new TestLog4j();
}
}


稍微复杂一点的log4j的配置文件

#根记录器的日志级别是ERROR, 在这个级别一下的级别都将被忽略
#为根记录器指定名为:console的控制器(Appender)
#日志级别有:DEBUG, INFO, WARE, ERROR, FATAL

log4j.rootLogger = INFO,console

log4j.logger.BrofeLogger = ,file
log4j.logger.BrofeLogger = ,log

#设置BrofeLogger记录器的叠加性标签为false
log4j.additivity.BrofeLogger = true

log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{yyyy-MM-dd HH:mmm:ss} [%c]-[%-5p] %m%n%n

## file appender
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = E:/PRJ/JSP/NetGoProject/Log_Msg/logger.html
log4j.appender.file.layout = org.apache.log4j.HTMLLayout
log4j.appender.file.layout.LocationInfo=true

## log appender
log4j.appender.log = org.apache.log4j.RollingFileAppender
log4j.appender.log.MaxFile.Size = 1MB
log4j.appender.log.MaxBackupIndex = 2
log4j.appender.log.File = E:/PRJ/JSP/NetGoProject/Log_Msg/log.log
log4j.appender.log.layout = org.apache.log4j.PatternLayout
log4j.appender.log.layout.ConversionPattern = %d{yyyy-MM-dd HH:mmm:ss} [%c]-[%-5p] %m%n%n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值