`
夜行者
  • 浏览: 17620 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

log4j的应用小结

阅读更多
Log4j做为一个强大的日志记录工具,得到了广泛的应用。

一、为什么要使用Log4j
做为一款日志记录工具Log4j为我们提供了对程序问题的跟踪,在开发阶段,我们可以发现程序的问题,进行排错。在产品阶段,记录程序运行的状况。Log4j打破了System.out.println()的局限性
1.不能在运行时,打开或者关闭
2.不能选者包或者类,在运行的时候打开或者关闭,无法针对某包,和某个类
3.输出的信息没有分级
4.只能输出文本信息
5.不能改变输出的位置

二、Log4j的基本概念
Log4j的三大概念:Logger/Appender/Layout

Logger:  完成日志信息的处理,使用这个对象来进行输出
Logger继承了Category,同时继承了父类中的debug(),warn()等方法,Log4j的级别:All,trace,debug,info,warn,error,fatal,off 同时从左到右级别越来越高,即All<trace<debug<info<warn<error<fatal<off,最为常用的是debug<info<warn<error这四个

Appender:设置日志信息的去向,使用这个对象来定义将日志信息输出到哪里
在Appender这个接口中,有多种不同的实现类,它们分别处理信息的不同去向:AppenderSkeleton, AsyncAppender, ConsoleAppender, DailyRollingFileAppender, ExternallyRolledFileAppender, FileAppender, JDBCAppender, JMSAppender, LF5Appender, NTEventLogAppender, NullAppender, RollingFileAppender, SMTPAppender, SocketAppender, SocketHubAppender, SyslogAppender, TelnetAppender, WriterAppender

org.apache.log4j.ConsoleAppender--------------控制台
org.apache.log4j.DailyRollingFileAppender -----每天产生一个日志文件
org.apache.log4j.FileAppender-----文件
org.apache.log4j.WriterAppender---------将日志信息以串流格式发送到任意指定的地方
org.apache.log4j.RollingFileAppender------------文件大小到达指定尺寸的时候产生一个新的文件
org.apache.log4j.jdbc.JDBCAppender-------------将日志信息保存到数据库中


Layout:  设置日志信息的输出格式,使用这个对象来定义输出的格式

HtmlLayout: 以html表格形式展现
SimpleLayout: 包含日志信息的级别和信息字符串
TTCCLayout: 包含日志产生的时间,执行绪,类别等等信息
PatternLayout: 可以灵活的指定布局模式

Log4j常用的打印参数:
%p:输出优先级,即debug,info,warn,error
%r:输出自应用启动到输出该日志信息耗费的毫秒数
%t:输出产生该日志事件的线程名
%f:输出日志信息所属的类别的类别名
%c:输出日志信息所属的类的全名 例如:如果category名称是"a.b.c","%c{2}"将会输出"b.c". {2}意谓着输出“以点分隔开的category名称的后两个组件”,如果 {n}没有,将会输出整个category名称.
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以指定格式:%d{yyyy-MM-dd HH:mm:ss}或%d{HH:mm:ss,SSSS}
%l:输出日志事件的发生位置,包括类目名,发生的线程,以及在代码中的行数
%m:输出代码指定的消息
%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"
%%:输出一个"%"字符
%C:输出日志消息产生时所在的类名,如果类名是“test.page.Class1”%C{1}表示输出类名"Class1",%C{2}输出"page.Class1",而%C则输出"test.page.Class1"。
%M:输出日志消息产生时的方法名称
%F:输出日志消息产生时所在的文件名称
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
  1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
  2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐.
  3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
  4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远处的字符截掉。
 

三、Log4j的基本配置和使用

常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子:

1. log4j.properties

### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%m%n

### 把日志信息输出到日志文件:shaolong.log ###

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=shaolong.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l%m%n

### 把日志信息输出到Html:shaolong.html ###
log4j.appender.html=org.apache.log4j.RollingFileAppender
log4j.appender.html.File=shaolong.html
log4j.appender.html.MaxFileSize=500KB
log4j.appender.html.MaxBackupIndex=1
log4j.appender.html.layout=org.apache.log4j.HTMLLayout

### 设置优先级,以及输出源 ###
log4j.rootLogger=debug,stdout,file,html

2. log4j.xml
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="cn.shaolong" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="shao_long.log"/>
<param name="MaxBackupIndex" value="1" />
   <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
   </layout>
</appender>
<root>
<level value="debug" />
   <appender-ref ref="cn.shaolong" />
</root>
</log4j:configuration>

3. 配置文件加载方法:
package cn.shaolong.log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

public class TestTeacher {
public static void main(String []args) {
Teacher t = new Teacher();
DOMConfigurator.configure("log4j.xml");
//PropertyConfigurator.configure("log4j.properties");
//Logger logger = Logger.getLogger(TestTeacher.class.getName());
Logger logger = Logger.getLogger("cn.shaolong");
try {
logger.debug("请正确设置教员的编号");
t.setId("008");
} catch(IllegalArgumentException e) {
logger.info(e.getMessage());
}
}
}
当采用自动载入.propertie和xml时,优先采用的是xml
可以使用log4j中的DOMConfigurator来加载.xml文件 PropertyConfigurator来加载properties文件

四、 项目使用log4j
在web 应用中,可以将配置文件的加载放在一个单独的servlet中,并在web.xml中配置该servlet在应用启动时候加载。
对于在多人项目中,可以给每一个人设置一个输出通道,这样在每个人在构建Logger时,
用自己的域名称,让调试信息输出到自己的log文件中。

五、关于Log4j性能的影响

Log4j对程序的运行的性能其实是非常小的,我们还可以通过下面的方式来,降低性能的影响
if (log.isDebugEnabled()) {
log.debug("x=" + x)
}

在程序中输出某种级别的日志消息之前,提倡先调用以上方法来判断该级别的日志是否允许输出,
这有助于提高应用的性能。
例如以下代码先把日志消息添加到StringBuffer中,最后在调用日志器的debug()方法输出日志:

StringBuffer sb = new StringBuffer();
sb.append("Login Successfful -");
sb.append("Name:");
sb.appand(userView.getFirstName());
sb.appand(" ");
sb.appand(userView.getLastName());
sb.appand("-");
sb.appand("Email:");
sb.appand(userView.getEmailAddress());

log.debug(buf.toString());

对于以上代码,如果日志器实际上不允许输出DEBUG级别的日志,那么执行日志器的debug()方法不会输出任何消息,
此时向StringBuffer中添加消息的一大串操作都将是多余的。为了提高性能,可以合理地使用isDebugEnabled()等其他级别方法,
避免应用执行多余到的操作:

if(log.isDebugEnabled()){
StringBuffer sb = new StringBuffer();
sb.append("Login Successfful -");
sb.append("Name:");
sb.appand(userView.getFirstName());
sb.appand(" ");
sb.appand(userView.getLastName());
sb.appand("-");
sb.appand("Email:");
sb.appand(userView.getEmailAddress());

log.debug(buf.toString());
}


六.总结
了解如何配置logger
log4j.rootLogger=[级别],[使用哪个appender]
log4j.logger.[logger的名称(类路径)]=[级别],[使用哪个appender]

了解如何配置appender
log4j.appender.[appender的名称]=[appender 类别]
log4j.appender.[appender的名称].[appender的属性名]=[appender的属性值]
如果:对于ConsoleAppender来说,可以配置的target属性为System.out,而对于FileAppender来说,可以配置它的File属性为一个文件名

了解如何配置layout
log4j.appender.[appender的名称].layout=[layout 类别]
log4j.appender.[appender的名称].[layout的属性名]=[layout的属性值]


分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    6.2 建立Log4j的开发环境 6.2.1 下载Log4j 6.2.2 配置Log4j 6.3 Log4j的使用方法 6.3.1 配置Log4j 6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    6.2 建立Log4j的开发环境 6.2.1 下载Log4j 6.2.2 配置Log4j 6.3 Log4j的使用方法 6.3.1 配置Log4j 6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    6.2 建立Log4j的开发环境 6.2.1 下载Log4j 6.2.2 配置Log4j 6.3 Log4j的使用方法 6.3.1 配置Log4j 6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    6.2 建立Log4j的开发环境 6.2.1 下载Log4j 6.2.2 配置Log4j 6.3 Log4j的使用方法 6.3.1 配置Log4j 6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用...

    (超赞)JAVA精华之--深入JAVA API

    3.1 Log4j基本使用方法 3.2 Dom4j 使用简介 3.3 Java 语言的 XML 验证 API 3.4 hibernate的hello word 3.5 JavaMail(JAVA邮件服务)API详解 3.6 jxl.jar 包简介 3.7 Java与XML联合编程之SAX篇 3.8 Java与XML联合...

    JAVA SE学习精华集锦

    3.1 Log4j基本使用方法 119 3.2 Dom4j 使用简介 120 3.3 Java 语言的 XML 验证 API 138 3.4 hibernate的hello word 143 3.5 JavaMail(JAVA邮件服务)API详解 145 3.6 jxl.jar 包简介 150 3.7 Java与XML联合编程之...

    Spring in Action(第2版)中文版

    a.4spring与log4j 附录b用(和不用)spring进行测试 b.1测试简介 b.1.1理解不同类型的测试 b.1.2使用junit b.1.3spring在测试中的角色 b.2单元测试springmvc控制器 b.2.1模拟对象 b.2.2断言modelandview的内容...

    Spring in Action(第二版 中文高清版).part2

    A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言...

    Spring in Action(第二版 中文高清版).part1

    A.4 Spring与Log4j 附录B 用(和不用)Spring进行测试 B.1 测试简介 B.1.1 理解不同类型的测试 B.1.2 使用JUnit B.1.3 Spring在测试中的角色 B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言...

    springboot学习

    Spring Boot Actuator监控端点小结 在传统Spring应用中使用spring-boot-actuator模块提供监控端点 Spring Boot应用的后台运行配置 Spring Boot自定义Banner Dubbo进行服务治理 chapter9-2-1:Spring Boot中使用Dubbo...

    mybatis学习笔记

    1.6.4 第三步:log4j.properties 6 1.6.5 第四步:SqlMapConfig.xml 6 1.6.6 第五步:po类 7 1.6.7 第六步:程序编写 8 1.6.8 Mybatis解决jdbc编程的问题 15 1.6.9 与hibernate不同 16 2 Dao开发方法 16 2.1 需求 16...

    服务器端接口编程.pptx

    01 13.1 JNDI 数据源配置 02 03 04 13.2 Log4J 与 SLF4J 13.3 MyBatis vs Hibernate 13.4 项目实战:"移动商城"(四) 05 13.5 本章小结 服务器端接口编程全文共45页,当前为第2页。 本章导读 面向对象的开发过程中...

    计算机应用技术(实用手册)

    计算机应用技术 实用手册 Xnllz 2011.7.29 目录 第一章COMS的设置 1 1.STANDARD CMOS SETUP(标准CMOS设定)用来设定日期、时间、软硬盘规格、工作类类型。 3 2.BIOS能功设定 5 3.Advanced ...

    spring boot 全面的样例代码

    - [Spring Boot Actuator监控端点小结](http://blog.didispace.com/spring-boot-actuator-1/) - [在传统Spring应用中使用spring-boot-actuator模块提供监控端点]...

    Maven权威指南 很精典的学习教程,比ANT更好用

    小结 4. 定制一个Maven项目 4.1. 介绍 4.1.1. 下载本章样例 4.2. 定义Simple Weather项目 4.2.1. Yahoo! Weather RSS 4.3. 创建Simple Weather项目 4.4. 定制项目信息 4.5. 添加新的依赖 4.6. ...

    数据结构(C++)有关练习题

    &lt;br&gt;实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...

Global site tag (gtag.js) - Google Analytics