实例
#定义log输出级别
log4j.rootLogger=debug,CONSOLE #log4j.rootLogger=INFO,DEFAULT
#定义日志输出目的地:控制台
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:mm:ss,SSS} [%c]-[%p] %m%n
#按一定的频度滚动日志记录文件
log4j.appender.DEFAULT=org.apache.log4j.DailyRollingFileAppender #DatePattern,精确到dd为每天
log4j.appender.DEFAULT.DatePattern='.'yyyy-MM-dd #append的值为true为增加,false则为覆盖 log4j.appender.DEFAULT.Append=true
#file 指定日志输出目录
log4j.appender.DEFAULT.File=D:/logs/default.log
#日志输出格式
log4j.appender.DEFAULT.layout=org.apache.log4j.PatternLayout log4j.appender.DEFAULT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
% 含义:
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 %r: 输出自应用启动到输出该log信息耗费的毫秒数 %c: 输出日志信息所属的类目,通常就是所在类的全名 %t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 %%: 输出一个\字符
%F: 输出日志消息产生时所在的文件名称 %L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息 %n: 输出一个回车换行符,Windows平台为\
实例2
#定义LOG输出级别
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender #指定输出目录
log4j.appender.File.File = logs/ssm.log #定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern HH\\:mm\\:ss}][%c]%m%n
=[%p]
[%d{yyyy-MM-dd
Log4:具有日志记录功能,主要通过一个配置文件来对程序进行监测 有两周配置方式:程序配置、文件配置 三个单元:logger、appender、layout
Logger是进行记录的主要类,appender是记录的方式,layout是记录的格式 其中日志级别:常用的是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 layout = Logger.getLogger(Test.class.getName()) //取得logger SimpleLayout simpleLayout = new SimpleLayout() //取得layout
FileAppender fa = new FileAppender(simplelayout,”test.log”)//取得app Logger.addAppender(fa) //添加appender Logger.set((Level)Level.DEBUG) //设置级别 Logger.debug(“haha”) //记录信息
文件配置过程
1.得到特定名称的logger
2.加载配置文件 (配置文件做了2-5的工作) 3.logger输出有级别的日志信息
文件配置程序
Logger logger = Logger.getLogger(Test.class.getName()) //取得logger 使用下面的配置加载 输出信息
文件配置分properties,xml 读取properties:
PropertyConfigurator.configure(“logTest.propertites”)
读取xml:
DOMConfigurator.configure(“src/logTest.xml”)
实例一SimpleLoggingTest.java import java.util.logging.*;
public class SimpleLoggingTest {
public static void main(String args[]) { //程序的其它处理
//使用Logger的静态方法获得一个匿名 //Logger
Logger logger1 = Logger.getAnonymousLogger(); //记录消息
logger1.log(Level.INFO,\第一条日志记录\ //程序的其它处理 } }
Java Logging API
Java Logging API封装在JDK1.4.0的java.util.Logging 包中。它通过产生便于最终用户、系统管理员、故障维护工程师以及软件开发团队(工程师)进行分析的日志记录为软件的开发调试和维护提供便利的手段。它捕获操作系统平台和执行程序的安全故障、配置错误、执行瓶颈和(或)Bug等数据信息,以纯文本、XML或程序员自定的某种方式将其格式化成日志记录,然后传递给内存、系统输出流、控制台、文件、Sockets等多种系统资源进行缓存和输出。
(一)、该软件包中的关键类。
Logger: 应用程序进行日志记录调用的主要实体。 Logger对象用于记录特定系统或应用程序的消息。
LogRecord: 用于在日志框架和单个记录处理程序之间传递记录请求。 Handler: 日志数据的最终输出处理器。它将LogRecord对象导出到各种目标,包括内存、输出流、控制台、文件和套接字。多种Handler子类可供用于这种用途。
Level: 定义一组标准的记录级别,可用于控制记录的输出。可以把程序配置为只输出某些级别的记录,而忽略其他级别的输出。 Filter: 精细过滤、控制记录的内容,比记录级别所提供的控制准确得多。记录API支持通用的过滤器机制,这种机制允许应用程序代码添加任意过滤器以便控制记录的输出。
Formatter: 为LogRecord对象的格式化提供支持。
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逐一进行处理。