log4的使用及诠释

log4是具有日志登记功能,重要穿越一个搭配文件来对过程举行监测
有两种搭配措施:一种过程搭配,一种文件搭配
有三个重要单元要打听,Logger,appender,layout.

logger是举行登记的重要类,appender是登记的措施,layout是登记的款式
logger七种日志级别:debug,info,warn,error,fatal,all,off
最常用的该当是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才利用

appender重要分三类,终端输出,文件输出,流输出
ConsoleAppender
FileAppender
WriterAppender

layout也分三类:容易款式,html款式,相称款式
SimpleLayout
HTMLLayout
PatternLayout

输出简写:(用在PatternLayout)
%m 输出代码中指定的消息
%p 输出优先级
%r 输出自利用启用到输出该log消息花费的毫秒数
%c 输出所属的类目,等闲即便所在类的全名
%t 输出发生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志工夫点的日期或工夫,默认款式为ISO8601,也能够在其后指定款式,例如:%d{yyy MMM dd HH:mm:ss,SSS},输出相仿:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。等闲利用了它就无须利用%c了

[按照下面环节来写吧!就能够获得我们所想要的日志文件哦!]

[按照次序就能够将日志文件读出来了!]
作用实例:
过程搭配等闲过程:
1.获得特定名目的logger
2.获得其中一个layout
3.依据layout获得appender
4.logger增加appender
5.logger设置级别
6.logger输出有级别的日志消息

过程:
Logger logger = Logger.getLogger(Test.class.getName()) //获得logger
SimpleLayout ***Layut = new SimpleLayout() //获得layout
FileAppender fa = new FileAppender(***Layout,"test.log") //获得ppender
logger.addAppender(fa) //增加appender
logger.set((Level)Level.DEBUG) //设置级别
logger.debug("hihihihih") //登记消息


文件搭配过程:
1.获得特定名目的logger
2.加载搭配文件 (搭配文件做了2-5的工作)
3.logger输出有级别的日志消息

文件搭配过程:
1.Logger logger = Logger.getLogger(Test.class.getName()) //获得logger
2.利用下面的搭配加载
3.输出消息


文件搭配分properties,xml
读取properties:
PropertyConfigurator.configure("logTest.properties");

读取xml:
DOMConfigurator.configure("src/logTest.xml");

 

告别System.out.print()—J2SDK1.4新增Java日志框架 (一)

作为一名Java 过程员,最纯熟的、利用最多的调用大约莫过度System.out.print(“…”)。当你未曾调试工具而要追寻一个变量的划算时候;当你必需揭示捉拿的Exception、Error的时候;当你想懂得过程在运行的时候究竟发生了什么的时候,等闲的做法即便调用System.out.print把他们在终端、扼制台上打印出来。这种措施对于输出消息的分类、款式化及永远保留带来众多不便。固然我们能够把它写入一个文件然后举行分析,然而这要必需编写额外的过程代码,其成本不可疏忽!而由此给目标系统本身添置的混杂程度不可避免的使开发、调试坠入一个深深的迷潭。
[要懂得一点:万一说能不写的代码良好不要写!]


JDK1.4的推出,使得这一切即刻成为历史。让我们向System.out.print()告别吧,利用Java Logging API为自己的过程发生一个全面的日志登记系统!

一、第一个实例
先看一个容易的实例:SimpleLoggingTest.java
1 import java.util.logging.*;
2 public class SimpleLoggingTest {
3 public static void main(String args[]) {
4 //过程的其它处理
5 //利用Logger的静态措施获得一个匿名 //Logger
6 Logger logger1 = Logger.getAnonymousLogger();
7 //登记消息
8 logger1.log(Level.INFO,"第一条日志登记");
9 //过程的其它处理
10 }
11 }

实例1

当心:编译、厉行该过程必需JDK1.4及以上版本的扶持。
运行该过程jp.riajpg.com,能够在扼制台看到过程运行收获:

2003-1-14 15:09:40 SimpleLoggingTest main
消息: 第一条日志登记
率先,过程引用java.util.Logging包(第1行)。随后,在贴切的时候获得一个Logger(登记器)类的实例(第6行,获得一个匿名的Logger)。最后,在过程必需登记消息的地方调用Logger类的log措施举行登记(第8行,登记一个INFO级别的消息)。



二、Java Logging API

Java Logging API封装在JDK1.4.0的java.util.Logging 包中。它穿越发生便于最后用户、系统管教员、故障维护工程师以及软件开发群体(工程师)举行分析的日志登记为软件的开发调试和维护供给方便的手段。它捉拿垄断系统平台和施征途序的平安故障、搭配讹谬、厉行瓶颈和(或)Bug等数据消息,以纯文本、XML或过程员自定的某种措施将其款式化成日志登记,然后递交给内存、系统输出流、扼制台、文件、Sockets等多种系统资源举行缓存和输出。

(一)、该软件包中的关键类。

n Logger: 利用过程举行日志登记调用的重要实体。 Logger对象用于登记特定系统或利用过程的消息。
n LogRecord: 用于在日志框架和个体登记处理过程之间递交登记哀求。
n Handler: 日志数据的最后输出处理器。它将LogRecord对象导出到各种目标,包括内存、输出流、扼制台、文件和套接字。多种Handler子类可供用于这种用处。

图一

n Level: 定义一组规范的登记级别,可用于扼制登记的输出。能够把过程搭配为只输出某些级别的登记,而疏忽其他级别的输出。
n Filter: 精细过滤、扼制登记的内容,比登记级别所供给的扼制准确得多。登记API扶持通用的过滤器机制,这种机制批准利用过程代码增加任意过滤器以便扼制登记4008301199.com的输出。
n Formatter: 为LogRecord对象的款式化供给扶持。

图二

n LogManager: Java Logging框架中单一的、大局的对象,用于维护与Logger登记器及日志服务的一系列分享的数据构造及事态。它负责全副日志框架的初始化、维护一组大局性的Handle对象、维护一个树形构造的Logger的名字空间、诊测日志框架搭配文件的改换从而重新读入并利用相干的参数以及负责过程静止运行时全副日志框架的清理工作。

(二)Logger

1、Logger的命名空间

在SimpleLoggingTest.java实例中,我们利用了一个匿名的(未曾命名的)Logger对象。在Java Logging 框架中,Logger是能够命名的。Logger的名字空间与java类的名字空间雷同的构造雷同:利用“.”间隔的字符串。Logger的名字空间揭示了Logger的层次构造。例如:命名为“a.b”的Logger是命名为“a.b.c”的“父”(上一级)Logger登记器。Logger的命名能够是任意的字符串,等闲理况下,利用包或类的名字为Logger 举行命名。

Logger的名字空间由大局单列类LogManager的实例举行创立、维护。
[传神在处理数据库的时候的DriverManage来管教数据库驱动一样了!]


匿名Logger不被存储在命名空间中。

2、创立Logger实例

Logger对象能够穿越调用工厂措施getLogger或getAnonymousLogger获得。

//获得一个名为“A”的Logger对象

Logger loggerA= Logger.getLogger(“A”);

// 获得一个名

 

为“A.B”的Logger对象,其上级登记器为loggerA。

Logger loggerAB= Logger.getLogger(“A.B”);

//获得一个匿名Logger对象

Logger loggerTmp = Logger.getAnonymousLogger();


对非匿名Logger,getLogger先在命名空间中查找同名的Logger对象,万一有,则归来该Logger对象;万一不存在,则在命名空间中创立登记一个新的Logger对象,并与其上级Logger对象相干联。

 

匿名Logger对象属于创立它的对象的私有对象,只能由创立它的对象利用,登记一些临时性的日志消息。而命名Logger对象使大局性的,在日志框架的生存期内,除非创立它的对象外还,可由其它对象用于登记日志消息。

 

匿名的Logger对象由一个大局的的root Logger “” 对象(root Logger的名字为空)。这意味着所有匿名Logger对象将从root Logger “”中继承行动。

 

匿名Logger对象等闲用于java Applet利用中。它去掉了在运征途序中的一班性的平安察看,批准其创立类对象对Logger的扼制、事态消息举行修正,如:setLevel设置Logger的日志消息登记级别;addHandle添置Logger的Handle(处理器)对象等。

 

一个Logger对象能够具有有零个到多个Handler实例。当未曾Handler时,如不遏止日志登记沿名字空间向上递交,那该Logger对象的日志消息登记将有其具有Handler实例的上级Logger举行处理。当一个Logger对象具有多个 Handler实例对象时,其登记的日志数据将被所有的Handler逐一举行处下面推荐的是对于java中经常揭示的一些讹谬的归纳。

捷足先登学用CSS:HTML构造化(评比).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值