`
moxue2459
  • 浏览: 13517 次
  • 性别: 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可以实现信息的分级别的输出,可以将日志信息输出到控制台、文件、HTML文件、数据库、还可以发送电子邮件,功能相当给力

    s2mBlog 免费博客平台 v3.2.0

    项目全程采用LOG4J2作为日志框架,包括控制台输出、记录到文件、严重错误发送邮件提醒、将日志记录至数据库;图片、视频、附件上传保存在云存储,提升浏览速度、安全性能、稳定性;完善的管理员权限体系,将权限分配...

    网管教程 从入门到精通软件篇.txt

    EML:Microsoft Outlook Express邮件消息(MIME RTC822)文件 EXE:可执行文件(程序) F FAV:Microsoft Outlook导航条 FAX:传真类型图像 FCD:虚拟CD-ROM FDF:Adobe Acrobat表单文档文件 FLA:Macromedia...

    基于jbpm与activiti的工作流平台技术架构介绍

    14.Other: Log4j,Velocity,Sitemesh,Jfreechart,Jforum,Solr 15.Maven 2 3.BPMX3的组件构建方式 BPMX3同时也是基于组件构构建,整个系统的构建如下所示: 【图三】BPMX3组件构建 系统提供在线流程设计器,...

    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 断言...

    MySQL 5.1官方简体中文参考手册

    1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL ...

    MySQL5.1参考手册官方简体中文版

    本手册编译于2006-7-29,目录及索引由官方HTML文档转换并加以修订,如有链接错误请发送邮件至: hemono@gmail.com 。获取最新CHM及PDF版本,请访问:hemon.ecjtu.net 。 张伟,华东交通大学。 摘要 这是MySQL参考...

    jfinalpluginsjfinal-dreampie.zip

    增加Slf4jLogger实现,然日志配置能基于任何Slf4j下的log实现,如logback public class Slf4jLogFactory implements ILoggerFactory 3.基础model实现,实现基础的常用的部分功能用于复用  public List ...

    Lerx开源网站内容管理系统(CMS.ext)-其他

    主要框架后端:SpringMVC + Hibernate ORM + MySQL + Hibernate Search(Apache Lucence) + IK中文分词 + Log4J + ...前端:Jquery + Layui + wangEditor/KindEditor + JSON + Ajax三.实现功能(标记★的为关键的或...

Global site tag (gtag.js) - Google Analytics