`
moxue2459
  • 浏览: 13839 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

log4j 数据库,邮件,html 等配置

阅读更多

以下是完整的一个log4j 的配置。包括  分级别存储。存储到数据库。发送邮件。生成html等。

 

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE log4j:configuration SYSTEM "../WebRoot/WEB-INF/config/log4j/log4j.dtd">

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

<!--输出到控制台 -->

<appender name="LOG.Console" class="org.apache.log4j.ConsoleAppender">

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%m%n" />

</layout>

<!--滤镜设置输出的级别 -->

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="levelMin" value="debug" />

<param name="levelMax" value="fatal" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>

<!--将级别为INFO的信息输出到文件 -->

<appender name="LOG.INFO" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="logs/info.log" />

<param name="Append" value="true" />

<param name="MaxFileSize" value="5120KB" />

<param name="MaxBackupIndex" value="1000" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="info" />

<param name="LevelMax" value="info" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>

<!--将级别为WARN的信息输出到文件 -->

<appender name="LOG.WARN" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="logs/warn.log" />

<param name="Append" value="true" />

<param name="MaxFileSize" value="5120KB" />

<param name="MaxBackupIndex" value="1000" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="warn" />

<param name="LevelMax" value="warn" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>

<!--将级别为ERROR的信息输出到文件-->

<appender name="LOG.ERROR" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="logs/error.log" />

<param name="Append" value="true" />

<param name="MaxFileSize" value="5120KB" />

<param name="MaxBackupIndex" value="1000" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="error" />

<param name="LevelMax" value="error" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender> 

<!--将级别为 info 级别以上的信息输出到文件  log4j.log-->

<appender name="LOG.LOG4J" class="org.apache.log4j.DailyRollingFileAppender">

<param name="File" value="logs/log4j.log" />

<param name="Append" value="true" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />

</layout>

<!--  注掉过滤器   将所有信息存到log4j.log -->

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="info" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>

<!--将级别为DEBUG的信息输出到文件 -->

<appender name="LOG.DEBUG" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="logs/debug.log" />

<param name="Append" value="true" />

<param name="MaxFileSize" value="5120KB" />

<param name="MaxBackupIndex" value="1000" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss} - %-5p -%c %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="debug" />

<param name="LevelMax" value="debug" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>

<!-- 将级别为 error 的信息 发送邮件 -->

<appender name="LOG.EMAIL" class="org.apache.log4j.net.SMTPAppender">

    <param name="From" value="发送者邮箱" />

    <param name="To" value="接受者邮箱" />

    <param name="SMTPUsername" value="发送者邮箱 用户名" />

    <param name="SMTPPassword" value="发送者邮箱 密码" />

    

    <param name="threshold" value="error"/>

    <param name="BufferSize" value="10" />

    <param name="SMTPHost" value="smtp.163.com" />

    <param name="Subject" value="Log4J Message" />

    <layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n"/>

</layout>

</appender>

<!-- 将级别为 错误信息 生成html  -->

<appender name="LOG.HTML" class="org.apache.log4j.DailyRollingFileAppender">

    <param name="File" value="logs/exception.html" />

    <param name="threshold" value="info"/>

    <param name="BufferSize" value="10" />

    <layout class="other.log4j.FormatHTMLLayout">

<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n"/>

</layout>

</appender>

<!-- 将级别为 error 的信息输出到数据库 -->

<appender  name="LOG.DB" class="org.apache.log4j.jdbc.JDBCAppender">

    <param name="driver" value="com.mysql.jdbc.Driver" /> 

<param name="URL" value="jdbc:mysql://127.0.0.1/log4j?useUnicode=true&amp;characterEncoding=UTF-8"/> 

    <param name="user" value="root" /> 

    <param name="password" value="admin" /> 

    <layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="INSERT INTO log4j(USERID,LOGTIME,LOGLEVEL,LOGACTION,MESSAGE)VALUES('%X{userId}','%d{yyyy-MM-dd HH:mm:ss}','%p','%l','%m')" />

</layout>

         <filter class="org.apache.log4j.varia.LevelRangeFilter"> 

<param name="levelMin" value="error" /> 

<param name="levelMax" value="error" /> 

<param name="acceptOnMatch" value="true" /> 

</filter>

</appender>

<!-- 

CREATE TABLE `log4j` (

`userid` VARCHAR(11) NULL DEFAULT NULL,

`logtime` VARCHAR(50) NULL DEFAULT NULL,

`logaction` VARCHAR(100) NULL DEFAULT NULL,

`loglevel` VARCHAR(100) NULL DEFAULT NULL,

`message` VARCHAR(255) NULL DEFAULT NULL

)

COLLATE='utf8_general_ci'

ENGINE=InnoDB

ROW_FORMAT=DEFAULT

-->

<root>

<priority value="debug" />

<appender-ref ref="LOG.Console" />

<appender-ref ref="LOG.DEBUG" />

<appender-ref ref="LOG.INFO" />

<appender-ref ref="LOG.WARN" />

<appender-ref ref="LOG.ERROR" />  

<appender-ref ref="LOG.LOG4J" />

   <appender-ref ref="LOG.DB" />

   <appender-ref ref="LOG.EMAIL" />

   <appender-ref ref="LOG.HTML" />

</root>

</log4j:configuration>

 

 

-----------------------------------

 注意:

1. 在分级别输出日志时,log4.properties不能使用Filter拦截日志级别,而log4j.xml可以,从这点就感觉log4j.xml要强大些 .

2.log4j.xml插入数据库的时候sql写在layout属性的ConversionPattern参数中,而log4.properties则有单独的sql属性接受配置文件中的sql语句 .

3. 在将日志信息写到HTML时,布局需要开发人员根据样式重写。下面是一个简单的例子:

 

 

public class FormatHTMLLayout extends HTMLLayout {

protected final int BUF_SIZE = 256;

protected final int MAX_CAPACITY = 1024;

static String TRACE_PREFIX = "<br>    ";

private StringBuffer sbuf = new StringBuffer(BUF_SIZE);

String title = "异常信息";

public static final String TITLE_OPTION = "Title";

boolean locationInfo = true;  

public FormatHTMLLayout() {

}

 

public String format(LoggingEvent event) {     

        if (sbuf.capacity() > MAX_CAPACITY) {     

            sbuf = new StringBuffer(BUF_SIZE);     

        } else {     

            sbuf.setLength(0);     

        }     

        sbuf.append(Layout.LINE_SEP + "<tr>" + Layout.LINE_SEP);     

 

        sbuf.append("<td>");     

        sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()));     

        sbuf.append("</td>" + Layout.LINE_SEP);     

 

        sbuf.append("<td>");     

        if (event.getLevel().equals(Level.FATAL)) {     

            sbuf.append("<font color=\"#339933\">");     

            sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));     

            sbuf.append("</font>");     

        } else if (event.getLevel().isGreaterOrEqual(Level.WARN)) {     

            sbuf.append("<font color=\"#993300\"><strong>");     

            sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));     

            sbuf.append("</strong></font>");     

        } else {     

            sbuf.append("<font color=\"green\">");     

            sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));     

            sbuf.append("</font>");     

        }     

        sbuf.append("</td>" + Layout.LINE_SEP);     

 

   if (locationInfo) {     

            LocationInfo locInfo = event.getLocationInformation();     

            sbuf.append("<td>");    

            sbuf.append(Transform.escapeTags(locInfo.getFileName()));    

            sbuf.append(':');    

            sbuf.append(locInfo.getLineNumber());    

            sbuf.append("</td>" + Layout.LINE_SEP);    

        }    

 

 

        sbuf.append("<td>");     

        sbuf.append(Transform.escapeTags(event.getRenderedMessage()));     

        sbuf.append("</td>" + Layout.LINE_SEP);     

        sbuf.append("</tr>" + Layout.LINE_SEP);     

 

        if (event.getNDC() != null) {     

            sbuf.append("<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">");     

            sbuf.append("NDC: " + Transform.escapeTags(event.getNDC()));     

            sbuf.append("</td></tr>" + Layout.LINE_SEP);     

        }     

 

        String[] s = event.getThrowableStrRep();     

        if (s != null) {     

            sbuf.append("<tr><td bgcolor=\"#993300\" style=\"color:White; font-size : xx-small;\" colspan=\"4\">");     

            appendThrowableAsHTML(s, sbuf);     

            sbuf.append("</td></tr>" + Layout.LINE_SEP);     

        }     

        return sbuf.toString();     

    } 

private void appendThrowableAsHTML(String[] s, StringBuffer sbuf) {     

        if (s != null) {     

            int len = s.length;     

            if (len == 0)     

                return;     

            sbuf.append(Transform.escapeTags(s[0]));     

            sbuf.append(Layout.LINE_SEP);     

            for (int i = 1; i < len; i++) {     

                sbuf.append(TRACE_PREFIX);     

                sbuf.append(Transform.escapeTags(s[i]));     

                sbuf.append(Layout.LINE_SEP);     

            }     

        }     

    }     

public String getHeader() {     

        StringBuffer sbuf = new StringBuffer();     

        sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\" >" + Layout.LINE_SEP);     

        sbuf.append("<html>" + Layout.LINE_SEP);     

        sbuf.append("<head>" + Layout.LINE_SEP);     

        sbuf.append("<title>" + title + "</title>" + Layout.LINE_SEP);     

        sbuf.append("<style type=\"text/css\">" + Layout.LINE_SEP);     

        sbuf.append("<!--" + Layout.LINE_SEP);     

        sbuf.append("body, table {font-family: '??',arial,sans-serif; font-size: 12px;}" + Layout.LINE_SEP);     

        sbuf.append("th {background: #336699; color: #FFFFFF; text-align: left;}" + Layout.LINE_SEP);     

        sbuf.append("-->" + Layout.LINE_SEP);     

        sbuf.append("</style>" + Layout.LINE_SEP);  

 

        sbuf.append("<meta   http-equiv=\"Content-Type\"  content=\"text/html\";   charset=\"UTF-8\"> </meta>" + Layout.LINE_SEP);  

 

        sbuf.append("</head>" + Layout.LINE_SEP);     

        sbuf.append("<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">" + Layout.LINE_SEP);     

 

        sbuf.append("<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP);     

        sbuf.append("<tr>" + Layout.LINE_SEP);     

 

        sbuf.append("<th>时间</th>" + Layout.LINE_SEP);     

        sbuf.append("<th>异常级别</h>" + Layout.LINE_SEP);     

 

        if (locationInfo) {     

            sbuf.append("<th>错误位置</th>" + Layout.LINE_SEP);     

        }     

 

        sbuf.append("<th>错误信息</th>" + Layout.LINE_SEP);     

        sbuf.append("</tr>" + Layout.LINE_SEP);     

        sbuf.append("<br></br>" + Layout.LINE_SEP);     

        return sbuf.toString();     

    }     

}

 

 

效果图 参考附件。

4.在日志信息写入到数据库时:

 

public static void Log4jXML() {

Logger logger = Logger.getLogger(LogRun.class);

MDC.put("userId", "11");

 

logger.error("test_Error");

logger.warn("test_warn");

logger.info("test_Info");

logger.debug("test_debug");

MDC.remove("userId");

}

 

 

这里的 MDC :用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息.

如图:http://my.iteye.com/admin/picture/118833.

 

0
8
分享到:
评论

相关推荐

    log4j实用配置扩展

    ### log4j实用配置扩展 #### 一、log4j简介与重要性 Log4j是一种广泛使用的开源日志框架,由Apache软件基金会维护。它主要用于记录Java应用程序的运行时信息,帮助开发者追踪应用程序的行为、调试问题以及进行性能...

    Log4j jar包及其配置方法

    这个压缩包"Log4j及其配置.rar"包含了Log4j的jar包(log4j-1.2.15.jar)以及相关的配置文档,旨在帮助开发者理解和使用Log4j。 一、Log4j介绍 Log4j是Apache软件基金会的一个开源项目,最初由Ceki Gülcü创建。它...

    log4j架包及配置说明

    - **Appender(输出器)**:负责将日志信息输出到指定的目标,比如控制台、文件、电子邮件、数据库等。 - **Layout(布局)**:定义了日志信息的输出格式,例如简单的文本格式、XML格式或HTML格式。 - **Level...

    log4j2用户指南

    最新的 log4j 版本(包括完整的源代码、类文件和文档)可以在 [http://logging.apache.org/log4j/2.x/index.html](http://logging.apache.org/log4j/2.x/index.html) 上找到。 #### 1. 插入日志语句到代码中作为...

    apache-log4j-2.3 jar包

    Log4j 2.3提供了多种内置Appender,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(电子邮件)等,开发者也可以自定义Appender来满足特定需求。 4. **Layout**:布局定义了日志事件的输出格式...

    log4j使用jar文件

    Log4j提供了多种内置的Appender,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(邮件)等。 3. **Layout**:Layout定义了日志消息的格式,比如简单布局(SimpleLayout)、HTML布局...

    log4j包的使用说明及api帮助文档

    log4j的配置主要通过`log4j.properties`或`log4j.xml`文件完成,其中包含对logger、appender和layout的定义。例如,以下是一个简单的配置示例: ```properties # 配置控制台输出 log4j.rootLogger=DEBUG, Console ...

    log4j记录Debug日志

    在使用Log4j记录Debug日志时,确保项目中引入了相应的Log4j库,并正确配置了`log4j.properties`或`log4j.xml`文件,设置DEBUG级别,然后在代码中使用Logger对象进行日志记录。例如: ```java import org.apache.log4...

    Log4j日志文档和Log4j包

    3. **Appenders**:Appender是Log4j的一个核心组件,它负责将日志信息发送到特定的目标,如控制台、文件、电子邮件、数据库等。常见的Appender有ConsoleAppender(控制台)、FileAppender(文件)、SMTPAppender...

    log4j.rar及用法

    `log4j-creator.jar`可能是一个辅助工具,用于创建和配置log4j的配置文件,帮助开发者更方便地管理日志配置。 ### 5. 示例:TestLog.java `TestLog.java`是一个简单的示例类,展示了如何在代码中使用Log4j记录日志...

    Log4J-config.rar_log4j java

    描述"LOG4J的配置范例常用log4j配置,log4j配置手册"表明这个压缩包提供了Log4J的常见配置示例和完整的配置手册,帮助开发者理解和使用Log4J进行日志管理。 **Log4J核心概念** 1. **日志级别**:Log4J支持多个日志...

    log4j使用例子和文档

    Log4j是Apache组织提供的一款广泛使用的Java日志框架,它具有高效、灵活、可配置等特点。本篇文章将深入探讨Log4j的使用,并通过实例进行讲解。 ### 1. Log4j的基本概念 - **Logger**: 日志器是Log4j的核心组件,...

    log4j配置教程mht

    **Log4j配置详解** Log4j是一款广泛应用于Java编程中的日志记录框架,它提供了灵活且强大的控制日志信息的能力。这篇教程将带你深入理解并掌握如何配置Log4j,以便在你的Java项目中有效地使用它。 首先,我们要...

    log4j-1.2.5.jar.zip

    Log4j是由Apache软件基金会开发的一个开源日志记录框架,它提供了丰富的日志级别(DEBUG、INFO、WARN、ERROR、FATAL),灵活的日志配置以及多种输出方式,包括控制台、文件、数据库等。Log4j 1.2.5是其早期的一个...

    log4j的jar包

    1. **配置文件**:`log4j.properties`或`log4j.xml`是Log4j的核心配置,决定了日志信息如何被记录、输出和格式化。配置中通常包含Appender(输出目的地,如控制台、文件)、Layout(日志格式)和Logger(日志级别)...

    Log4j API CHM 手册

    《Log4j手册.pdf》可能包含了更深入的使用指南和最佳实践,如如何配置Log4j.properties或log4j.xml文件,如何使用MDC(Mapped Diagnostic Context)进行日志关联,以及如何在复杂的应用环境中部署和管理Log4j。...

    西安野马计算机培训学校LOG4J讲义

    LOG4J提供了多种Appender,如ConsoleAppender(控制台输出)、FileAppender(文件输出)和SMTPAppender(邮件发送)。开发者可以根据项目需求选择或自定义Appender。 **四、Layout** Layout则规定了日志信息的输出...

    log4j使用手册和API chm格式

    4. **Appender**:Appender是Log4j的核心组件之一,用于指定日志信息的输出位置,如ConsoleAppender(控制台)、FileAppender(文件)、SMTPAppender(邮件)等。 5. **Layout**:Layout决定了日志信息的显示格式,...

Global site tag (gtag.js) - Google Analytics