`
夜行者
  • 浏览: 18059 次
  • 性别: 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的属性值]


分享到:
评论

相关推荐

    log4net 使用小结 源代码

    **log4net 使用小结** **一、log4net 简介** log4net 是一个开源的日志记录框架,广泛应用于.NET平台,为应用程序提供灵活且强大的日志记录功能。它遵循 Apache 软件基金会的 log4j 设计模式,提供了多种日志输出...

    日志配置到文件,数据库

    #### 小结 通过上述解析,我们可以看出这份文档提供了非常详尽的日志配置指南,覆盖了控制台输出、文件输出、数据库输出以及特定级别的异常日志输出等多种场景。这对于开发者而言是非常有价值的参考资料。虽然文档...

    JAVA应用开发日志解决方案

    目前,市场上流行的日志解决方案主要有Log4j、Log4j+JCL以及Log4j+SLF4J等。本文将详细介绍这些日志框架的配置与使用方法。 #### 1.1 下载所需组件 为了进行日志框架的学习与实践,首先需要准备以下组件: 1. **...

    各种排序算法小结

    ### 各种排序算法小结 #### 一、引言 排序算法是在计算机科学中非常基础且常用的一类算法。由于在实际应用中往往需要处理大量数据,因此对排序算法的效率有着较高要求。通常,我们会关注算法的时间复杂度来评估其...

    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 小结 ...

    web应用dao层的开发经验小结

    - 日志监控工具,如Log4j、SLF4J,用于追踪和调试DAO层的问题。 9. 测试 使用JUnit进行单元测试,确保每个DAO方法的功能正确性,Mockito等工具可用于模拟数据库交互,提高测试覆盖率。 10. 持续集成与自动化 ...

    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 在代码中使用...

    ibatis小结

    **Ibatis小结** Ibatis,一款轻量级的Java持久层框架,是MyBatis的前身,由Clinton Begin在2003年创建。它致力于解决Java应用程序中的数据访问层(DAL)问题,提供了SQL映射框架,使得开发者可以直接编写SQL语句,...

    矩阵乘法在信息学中的应用

    ### 小结 通过以上对矩阵乘法及其在信息学中应用的介绍,我们可以看到矩阵乘法不仅在数学上有着广泛的应用,在信息学领域中也发挥着重要的作用。特别是在动态规划优化方面,矩阵乘法与快速幂相结合可以极大地提高...

    《程序天下: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 在代码中使用...

    hibernate小结

    2. 添加必要的jar包,包括Hibernate的核心库、Log4j日志库以及数据库驱动(例如MySQL)到工程的类路径或WEB-INF/lib目录。 3. 编写配置文件`hibernate.cfg.xml`,设置数据库连接信息,通常会从`hibernate.properties...

    Spring配置总结

    这是因为Spring应用通常需要日志记录功能,而Log4j是常用的日志库之一。为了防止在同一容器中部署多个应用时的日志配置冲突,我们需要通过设置唯一的`webAppRootKey`来指定日志的存储路径。如下面的代码所示: ```...

Global site tag (gtag.js) - Google Analytics