`
sxdtzhaoxinguo
  • 浏览: 228639 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用Log4j为项目配置日志输出应用详细总结及示例演示.

 
阅读更多

Log4j组件构成

Log4j由三个重要的组件构成:

1.日志信息的优先级(Logger)

2.日志信息的输出目的地(Appender)

3.日志信息的输出格式(Layout)。

概要:

日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;

日志信息的输出目的地指定了日志将打印到控制台还是文件中;

而输出格式则控制了日志信息的显示内容。

Log4j介绍

  Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。log4j--log for java (java的日志) .

Log4j下载地址: http://logging.apache.org/log4j/2.x/download.html

Log4j配置文件的格式

Log4j支持两种配置文件格式:

1. XML格式的文件

2. properties格式的文件

也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。

Log4j定义配置文件

1.配置根Logger

其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

参数说明:  

level是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

Off:最高等级,用于关闭所有日志记录

Fatal:指出每个严重的错误事件将会导致应用程序的退出。

Error:指出虽然发生错误事件,但仍然不影响系统的继续运行。

Warn:表明会出现潜在的错误情形

Info:一般用在粗粒度级别上,强调应用程序的运行全程

Debug:一般和在粗粒度级别上,强调应用程序的运行全程。

All:最低等级,用于打开所有日志记录。

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

appenderName就是指日志信息输出到哪个地方,可以同时指定多个输出目的地。

2.配置日志信息输出目的地Appender

其语法为:

复制代码
log4j.appender.appenderName = fully.qualified.name.of.appender.class   

log4j.appender.appenderName.option1 = value1   

...   

log4j.appender.appenderName.option = valueN
复制代码

Log4j提供的appender有以下几种:

  org.apache.log4j.ConsoleAppender(控制台)

  org.apache.log4j.FileAppender(文件)

  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)

  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3.配置日志信息的格式

语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 

log4j.appender.appenderName.layout.option1 = value1 … 

log4j.appender.appenderName.layout.option = valueN

Log4j提供的layout有以下几种:

  org.apache.log4j.HTMLLayout(以HTML表格形式布局),

  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m输出代码中指定的消息  

%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL   

%r输出自应用启动到输出该log信息耗费的毫秒数   

%c输出所属的类目,通常就是所在类的全名   

%t输出产生该日志事件的线程名   

%n输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”   

%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyMMMddHH:mm:ss,SSS},输出类似:2002年10月18日22:10:28,921   

%l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像javaservlets这样的多客户多线程的应用中。

%%:输出一个”%”字符 %F:输出日志消息产生时所在的文件名称

%L:输出代码中的行号

%m:输出代码中指定的消息,产生的日志具体信息

%n:输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。

如:

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.xml的配置方式

View Code
复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="appender1"
        class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logfile08.html" />
        <param name="MaxFileSize" value="1MB" />
        <param name="MaxBackupIndex" value="5" />
        <layout class="org.apache.log4j.HTMLLayout">
        </layout>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="appender1" />
    </root>
</log4j:configuration>
复制代码

代码中使用Log4j

  在程序中使用Log4j之前,首先要将commons-logging.jar和logging-log4j-1.2.9.jar导入到classpath中,并将log4j.properties放于src根目录中。 在类中使用log4j,首先声明一个静态变量Loggerlogger=Logger.getLog("classname").现在就可以使用了。

用法如下:logger.debug("debugmessage")或者logger.info("infomessage").

1.得到记录器

  使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。

其语法为:

  publicstaticLoggergetLogger(Stringname)

  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

  staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())

2.读取配置文件

  当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

  BasicConfigurator.configure():自动快速地使用缺省Log4j环境。

  PropertyConfigurator.configure(StringconfigFilename):读取使用Java的特性文件编写的配置文件。

  DOMConfigurator.configure(Stringfilename):读取XML形式的配置文件。

3.插入记录信息(格式化日志信息)

  当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,语法如下:

   Logger.debug(Objectmessage);

   Logger.info(Objectmessage);

   Logger.warn(Objectmessage);

   Logger.error(Objectmessage);

程序演示

1.使用程序进行日志信息输出

复制代码
 1 package org.demo.log4j.dennisit;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.commons.logging.impl.Log4JLogger;
 6 import org.apache.log4j.BasicConfigurator;
 7 import org.apache.log4j.FileAppender;
 8 import org.apache.log4j.Layout;
 9 import org.apache.log4j.Level;
10 import org.apache.log4j.Logger;
11 import org.apache.log4j.SimpleLayout;
12 
13 /**
14  *
15  *  @version : 1.1
16  *  
17  *  @author  : 苏若年    <a href="mailto:DennisIT@163.com">发送邮件</a>
18  *    
19  *  @since      : 1.0        创建时间:    2013-1-1        下午03:19:42
20  *     
21  *  @function: 通过代码将日志输出
22  *
23  */
24 
25 public class Log4jPrintByCode {
26 
27     private static Logger logger = Logger.getLogger(Log4jPrintByCode.class);
28     
29     private Layout layout = new SimpleLayout();
30     private FileAppender fileAppender;
31     
32 
33     //使用构造依赖,创建对象时初始化
34     public Log4jPrintByCode(Layout layout, Level level,String distDir){
35         
36         BasicConfigurator.configure();        //使用默认的配置信息,不需要写log4j.properties
37         
38         try {
39             init(layout,level, distDir);
40         } catch (Exception e) {
41             e.printStackTrace();
42         }
43         
44     }
45     
46     
47     public void init(Layout layout, Level level,String distDir) throws Exception{
48         
49         logger.setLevel(level);                //设置日志输出级别
50         fileAppender = new FileAppender(layout,distDir,false);
51         logger.addAppender(fileAppender);    //添加输出端
52         
53     }
54     
55     
56     public static void main(String[] args) {
57         
58         SimpleLayout layout = new SimpleLayout();
59         String logDir = "log4jcode.Log";
60         Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir);
61         
62         
63         //下面信息将被输出
64         log4jCode.logger.info("log info print by log4j");
65         log4jCode.logger.warn("log warn print by log4j");
66         log4jCode.logger.error("log error print by log4j");
67         
68     }
69 
70 
71     public Layout getLayout() {
72         return layout;
73     }
74 
75     public void setLayout(Layout layout) {
76         this.layout = layout;
77     }
78 
79     public FileAppender getFileAppender() {
80         return fileAppender;
81     }
82 
83     public void setFileAppender(FileAppender fileAppender) {
84         this.fileAppender = fileAppender;
85     }
86     
87     
88     
89 }
复制代码

为了提高效率,我们可以在写日志前增加判断:

复制代码
// 记录debug级别的信息
if (logger.isDebugEnabled()) {
    logger.debug("This is debug message from Dao.");
}

// 记录info级别的信息
if (logger.isInfoEnabled()) {
    logger.info("This is info message from Dao.");
}
复制代码

如果这个类作为基类,如J2EE中的BaseDao、BaseAction、BaseService等等,则我们可以将各层的日志信息分类输出到各个文件。

2.Log4J将同一个日志信息输出到多个目的地

应用实例将日志信息同时输出到控制台,文件和数据库中.

创建数据库与 表

复制代码
/* 创建数据库 */ 
create database db_log4j;

/* 切换数据库 */
use  db_log4j;

/* 日志信息表 */
create table tb_log(
    logId int not null auto_increment comment '流水号' ,
    createDate varchar(45) default null comment '日志生成时间' ,
    thread varchar(45) default null comment '当前线程',
    level varchar(45) default null comment '当前日志级别' ,
    class varchar(45) default null comment '生成日志的类',
    message varchar(245) default null comment '日志具体信息',
    primary key(logId)
);
复制代码

配置文件log4j.properties

复制代码
#定义3个输出端
log4j.rootCategory=INFO,A1,A2,A3

#定义A1输出到控制器
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#定义A1的布局模式为PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# 定义A1的输出格式
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n

#定义A2输出到文件
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#定义A2输出到哪个文件
log4j.appender.A2.File=./log/sysLog.log
#定义A2输出文件的最大长度
log4j.appender.A2.MaxFileSize = 1KB
#定义A2的备份文件数
log4j.appender.A2.MaxBackupIndex = 3
#定义A2的布局模式为PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#定义A2的输出模式
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n

#定义A3输出到数据库
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
#定义A3的布局和执行的SQL语句
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message) values('%d','%t','%-5p','%c','%m')
复制代码

Java测试代码

复制代码
package org.demo.log4j.dennisit;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 *
 *  @version : 1.1
 *  
 *  @author  : 苏若年    <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since      : 1.0        创建时间:    2013-1-1        下午04:13:59
 *     
 *  @function: 通过配置文件控制日志信息输出到多个目的端
 *
 */

public class Log4jPrintByConfigure {
    
    private static Logger logger = Logger.getLogger(Log4jPrintByConfigure.class);
      
    public static void main(String[] args) throws Exception {

        //加载log配置文件log4j.properties
        PropertyConfigurator.configure("configure/log4j.properties");//文件存放在src同目录的configure文件夹下
        
        //如果放在src下的话,参数应为"bin/log4j.properties"或者"src/log4j.properties", 建议以bin为准
        
        //以下信息将被打印输出
        logger.debug("logger print DEBUG messgae");
        logger.info("logger print INFO message");
        logger.warn("logger print WARN message");
        logger.error("logger print ERROR message");
        logger.fatal("Here is FATAL message");
    }

}
复制代码

转载请注明出处[http://www.cnblogs.com/dennisit/archive/2013/01/01/2841603.html]

分享到:
评论

相关推荐

    log4j按功能保存日志

    - `log4jTest`可能是包含测试代码或示例的目录,用于演示如何使用Log4j按功能保存日志。在这些代码中,你会看到如何创建Logger实例,以及如何根据配置文件将日志输出到对应的文件。 总结,Log4j提供了一种灵活的...

    log4j的详细配置,log4j.xml和log4j.properties,日志输出到文件,邮件,数据库,控制台等

    8. **实际应用**:`Log4jTest`可能是测试代码或示例,演示如何在实际项目中应用上述配置,进行日志输出的验证。 总之,Log4j通过其灵活的配置,可以满足不同场景下的日志需求,无论是简单地输出到控制台,还是复杂...

    log4j的配置示例

    这个“log4j的配置示例”是一个简单的测试工程,旨在帮助开发者理解如何配置和使用Log4j进行日志记录。 首先,Log4j的核心在于其配置文件——`log4j.properties`或`log4j.xml`,这决定了日志输出的级别、格式和目的...

    使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析

    总之,Log4j是一个强大的日志工具,能够帮助开发者有效地管理和监控应用程序的日志输出。正确配置Log4j,不仅有助于调试和问题定位,还能确保关键信息在需要时能够被准确记录和检索。因此,理解并熟练运用Log4j对于...

    LOG4.net日志控件使用示例项目

    LOG4.net是一个强大的日志记录框架,源自Java世界的log4j,被广泛应用于.NET平台的软件开发中。它提供了一套灵活的日志记录方案,帮助开发者在应用程序中方便地记录调试信息、错误信息以及其他关键性日志数据。本...

    Log4j的配置与使用

    Log4j作为Apache组织下的一个开源项目,是一个非常强大的日志组件,能够为应用程序提供方便且灵活的日志记录服务。在软件开发过程中,良好的日志记录机制对于系统的调试、监控以及问题追踪等都具有重要意义。 #### ...

    日志实战样例配置:log4j-demo.zip

    3. 运行脚本或启动配置:这可能是启动应用的`main`方法或者Maven/Gradle构建脚本,用于演示如何使用配置好的`log4j`运行程序。 具体配置示例可能如下: ```properties # log4j.properties 示例 log4j.rootLogger=...

    log4net配置和应用示例

    在`Log4netTest`这个示例项目中,可能包含了一个简单的使用log4net的程序,演示了如何配置、初始化以及在代码中使用log4net记录日志。通过查看和分析该项目的源代码,我们可以更深入地理解log4net的使用方法和功能。...

    Log4j的配置与使用方法(以简单程序为例子)

    在`caseLog4j`文件夹中,可能包含了一个简单的Java项目,该项目演示了上述Log4j的配置和使用。你可以打开这个项目,查看`log4j.properties`配置文件,以及`Main`类中的日志输出代码,运行程序,观察日志文件`app.log...

    log4j常用配置和Demo

    为了演示Log4j的使用,我们可以创建一个简单的Java应用,它使用配置的Log4j输出不同级别的日志消息。首先,创建`log4j.properties`文件,然后创建一个Java类: ```java // MyDemo.java import org.apache.log4j....

    [简单]log4jdbc-log4j2配置简记

    标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...

    log4j\c3p0\jndi详细配置实例

    `log4j`的配置文件通常为`log4j.properties`或`log4j.xml`,其中定义了日志输出级别(如DEBUG、INFO、WARN、ERROR、FATAL)、日志输出目的地(控制台、文件、邮件等)以及日志格式。例如: ```properties # log4j....

    Log4j—将系统日志输出到控制台和html格式的文件中

    本工程以一个简单的log4j示例演示了log4j的使用方法 本工程编码方式:UTF-8 本工程开发工具:MyEclipse 说明:log4j详细使用方法请参考博客:http://blog.csdn.net/gaohuanjie/article/details/44077551

    log4j2异步多线程打印

    在`asnc-print-different-logfile`这个压缩包中,可能包含了一个示例项目,用于演示如何配置和使用Log4j2实现异步多线程打印。项目可能包含以下元素: 1. `pom.xml`:Maven项目的配置文件,定义了依赖项和构建指令...

    使用log4j生成日志

    提供的示例项目中,可能包含了一个简单的Java程序,演示了如何在代码中使用Log4j记录日志。通过导入Log4j的jar包,创建Logger实例,然后调用相应的记录方法,即可完成日志的生成。 总的来说,理解和掌握Log4j对于...

    log4j的eclipse工程,最简单最直接的方式配置log4j

    标题"log4j的eclipse工程,最简单最直接的方式配置log4j"指出了本项目的核心内容,即在一个Eclipse工程环境中,如何以简便快捷的方法设置和使用log4j,一个广泛使用的日志记录框架。log4j是Apache的一个开源项目,它...

    C#控制台应用使用Log4net日志

    在`Log4netTest`项目中,我们可以看到具体的示例代码,演示了如何在C#控制台应用中配置和使用Log4net。这个例子通常包括了配置文件、初始化和使用日志的方法,可以帮助初学者快速理解和实践Log4net的日志记录功能。 ...

    log4j

    描述提到的是一个包含控制台输出、文件输出、数据库输出的Log4j实例,这表明这是一个完整的示例工程,演示了Log4j如何在不同的场景下工作,如打印到控制台、写入文件以及存储到数据库。 **Log4j核心概念** 1. **...

    log4j保存路径 配置

    Log4j是一个广泛使用的Java日志框架,它提供了灵活的日志配置和强大的功能,帮助开发者追踪应用程序的运行状态,便于调试和故障排查。本篇文章将深入探讨如何配置Log4j来设置日志保存的路径。 首先,我们需要了解...

    Log4j的使用

    下面将详细介绍Log4j的基本概念、配置、使用方法及其在实际项目中的应用。 一、Log4j的基本组件 1. **Logger**:日志记录器是Log4j的核心组件,负责实际的日志输出。每个Logger都有一个名称,通过名称可以控制不同...

Global site tag (gtag.js) - Google Analytics