文章转载http://www.blogjava.net/libin2722
这样,对于程序运行的控制就不用每次都跑到机器上去看日志文件这么麻烦了,我们需要的只是,开开Foxmail,用用鼠标,就可以知道,程序到底运行的怎么样了。
-
使用log4j-1.2.15
之前用的是 log4j-1.2.8 ,照理说,它们之间的版本号的区别够小,应该没有什么区别,但是事实却让我丈二摸不着头脑。
发送邮件的一个重要的类是SMTPAppender。
在1.2.8的版本中,SMTPAppender没有smtpPassword 和smtpUsername 属性。这两个属性分别是登录smtp服务器用的用户名和密码。笔者到现在也没有想明白,在通常的情况下怎样才可以不登录smtp服务器就可以发送邮件了。有知道的朋友,就留个言吧,先谢过啦。
由于不能解决上面的那个问题,我就只好使用1.2.15这个版本啦。
- log4j.properties文件
- log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
- log4j.appender.MAIL.BufferSize=10
- log4j.appender.MAIL.From=yourname@domain.com
- log4j.appender.MAIL.SMTPHost=mail.domain.com
- log4j.appender.MAIL.Subject=Log4JMessage
- log4j.appender.MAIL.To=target@domain.com
- log4j.appender.MAIL.SMTPUsername=username
- log4j.appender.MAIL.SMTPPassword=password
- log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
- log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
- log4j.appender.MAIL.layout.ConversionPattern=[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=yourname@ domain.com log4j.appender.MAIL.SMTPHost=mail.domain.com log4j.appender.MAIL.Subject=Log4J Message log4j.appender.MAIL.To=target@domain.com log4j.appender.MAIL.SMTPUsername=username log4j.appender.MAIL.SMTPPassword=password log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
这个文件配好以后,恭喜你,现在log4j的邮件功能,你就可以体会了。
- SMTP的级别默认是ERROR级别的,怎么办
默认的级别是ERROR级别的,那就是说,只有程序出错了,你才可以收到邮件,很显然,这还不能满足我们日常管理的要求。我们需要自定义的级别。
为此,笔者继承了TriggeringEventEvaluator类,覆盖里面的一个方面,如下所示
- @Override
- publicbooleanisTriggeringEvent(LoggingEventarg0){
- returnarg0.getLevel().isGreaterOrEqual(Level.INFO);
- }
@Override public boolean isTriggeringEvent(LoggingEvent arg0) { return arg0.getLevel().isGreaterOrEqual(Level.INFO); }
- 每遇到一个触发事件就发一封邮件!
SMTPAppender 实现是,每当isTriggeringEvent()这个方法返回true的时候,它都会发送邮件。这样的话,一个程序执行下来,每个有能力触发的事件都会形成一封邮件。这显然不是我们希望看到的场面。
笔者继承了SMTPAppender类,重装了append方法。
- @Override
- publicvoidappend(LoggingEventevent){
- if(!checkEntryConditions()){
- return;
- }
- event.getThreadName();
- event.getNDC();
- event.getMDCCopy();
- if(this.getLocationInfo()){
- event.getLocationInformation();
- }
- cb.add(event);
- if(evaluator.isTriggeringEvent(event)){
- if(cb.length()>this.getBufferSize()/2){
- sendBuffer();
- }
- }
- }
@Override public void append(LoggingEvent event) { if (!checkEntryConditions()) { return; } event.getThreadName(); event.getNDC(); event.getMDCCopy(); if (this.getLocationInfo()) { event.getLocationInformation(); } cb.add(event); if (evaluator.isTriggeringEvent(event)) { if (cb.length() > this.getBufferSize() / 2) { sendBuffer(); } } }
这样的话,当事件的个数达到bufferSize的一半的时候就会发一封邮件了。
但是另外一个问题也随之产生了,当程序结束时,还在缓冲里面的事件是不会被发送出来的。因为事件数往往没有bufferSize的一半。
- public*****SMTPAppender(){
- Runtime.getRuntime().addShutdownHook(newThread(){
- @Override
- publicvoidrun(){
- if(cb.length()>0){
- sendBuffer();
- }
- }
- });
- }
public *****SMTPAppender() { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { if (cb.length() > 0) { sendBuffer(); } } }); }
笔者在构造函数中,添加了一个程序结束时运行的线程,来处理这个问题。
- 设置Html格式的输出
按照刚刚笔者给出的配置文件,所产生的邮件的格式是纯文本的。其实log4j有网页格式的输出的。
- log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout
log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout
这样的话,邮件就好看很多啦。
- 解决邮件中的中文乱码问题
最后,你会发现中文是乱码的,而且HTMLLayout没有提供编码方式的属性设置,哎,又是一阵无语中。
得,笔者也就只好再写一个类,继承HTMLLayout,覆盖getContentType方法
- @Override
- publicStringgetContentType(){
- return"text/html;charset=GBK";
- }
@Override public String getContentType() { return "text/html;charset=GBK"; }
添加上述功能之后的配置文件如下所示:
- log4j.appender.MAIL.To=target@domain.com
- log4j.appender.MAIL.From=yourname@domain.com
- log4j.appender.MAIL.SMTPHost=smtp.domain.com
- log4j.appender.MAIL.Subject=Information
- log4j.appender.MAIL.SMTPUsername=username
- log4j.appender.MAIL.SMTPPassword=password
- log4j.appender.MAIL.EvaluatorClass=com.wole.***.MailEvaluator
- log4j.appender.MAIL.layout=com.wole.log4j.net.DefaultLayOut
相关推荐
#### 四、log4j的核心组件 log4j的核心组件主要包括**Loggers(记录器)**、**Appenders(输出源)**和**Layouts(布局)**。 1. **Loggers (记录器)**:负责生成日志信息,并决定是否发送日志信息到Appenders。记录器...
Log4j是一款广泛使用的开源日志框架,由Apache软件基金会开发。本文将深入探讨Log4j的基本概念、配置与使用方法。 1. **什么是Log4j** Log4j是一个基于Java的日志记录工具,它提供了灵活的控制来记录日志信息,...
"源码"标签暗示我们将讨论Log4j的内部机制或如何查看和理解其代码,这对于学习和定制Log4j功能很有帮助。而"工具"标签则表明Log4j是一个开发者常用的工具,它的使用和配置是提高开发效率的关键。 **压缩包文件名称...
**标题解析:** "log4j 发送邮件" 指的是使用 Log4j 这个流行的Java日志框架来实现日志事件触发时发送电子邮件的功能。Log4j 是一个强大的日志处理库,它允许开发者自定义日志级别、格式和输出方式,包括将日志信息...
虽然Log4j的SMTPAppender提供了基本的邮件通知功能,但还有其他工具和库,如Logback,提供了更丰富的选项和更现代的特性。考虑使用这些替代方案,尤其是对于新项目。 综上所述,Log4j 的邮件配置是一项实用的功能...
Log4j是Java编程语言中广泛使用的日志记录框架,特别是在企业级应用和大型系统中。这个"**log4j-2.17.1**"的版本是该框架的一个更新,提供了修复的安全漏洞和性能优化。以下是关于Log4j 2.17.1的一些关键知识点: 1...
3. **Appenders**:Appenders是Log4j的核心组件之一,负责将日志消息输出到不同的目的地,如控制台、文件、网络、电子邮件等。 4. **Layouts**:Layouts决定了日志事件的格式,如简单的文本格式、XML或JSON,以便于...
### Log4j全套功能解析 #### 一、概述 在软件开发过程中,日志记录是一项极为重要的工作。它不仅能够帮助开发者追踪程序运行时的状态,还能在出现问题时提供关键线索以便快速定位问题所在。Log4j是Apache组织推出...
Log4j作为Java平台上的一个经典日志记录框架,因其强大的功能和灵活性,一直以来都是开发者们的首选工具。本文将详细解析Log4j 1.2.15.jar这个版本的核心概念、使用方法以及重要特性。 一、Log4j简介 Log4j是由...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中插入日志语句,以便跟踪程序的...它通过`log4j.jar`提供核心功能,通过`log4j.properties`进行个性化配置,为开发者提供了一套完整的日志解决方案。
总结,Log4j作为Java日志处理的重要工具,其灵活性和强大功能使其在开发和运维工作中占据了重要地位。了解并熟练掌握Log4j的使用,有助于提升开发效率,优化系统的可维护性。然而,随着技术的发展,建议关注更新的...
Log4j是一款广泛使用的Java日志记录框架,它允许开发者以灵活的方式控制应用程序的日志输出。这个框架的主要目的是提供一种简单、高效的日志记录机制,帮助开发者调试代码、追踪问题,以及收集运行时信息。在Java...
Log4J是Apache的一个开源项目,用于提供灵活的日志记录功能。通过它,开发者能够控制日志信息的输出级别、输出目的地(控制台、文件等)、格式化方式等。本文将围绕一份示例配置文件来详细介绍Log4J的配置方法。 ##...
- Log4j允许开发者创建自定义的Appender和Layout来满足特定需求,如发送邮件、写入数据库等。 - Appender决定了日志信息的输出位置,而Layout则决定日志的显示格式。 6. **Log4j的最新版本:Log4j 2** - 随着...
本文将围绕“log4j-1.2.17.jar”这一核心组件,深入探讨其功能、配置以及在实际项目中的使用技巧。 一、Log4j简介 Log4j是一个用于生成日志的灵活框架,它提供了丰富的配置选项,允许开发者根据需求调整日志级别、...
Log4j是一个灵活且高效的日志记录库,为Java应用程序提供了丰富的日志功能。它的设计目标是提供一个能够进行调试、性能监测、系统管理和安全控制的工具。Log4j的核心组件包括Logger(日志器)、Appender(输出端)和...
Log4j是一个广泛使用的Java日志框架,由Apache软件基金会开发并维护。它为应用程序提供了灵活的日志记录功能,使得开发者能够控制日志信息的输出格式、级别以及输出位置,从而便于调试、性能分析和系统监控。这个...
Log4j是一个广泛使用的日志记录框架,它提供了灵活的日志配置和丰富的功能。本教程将详细介绍如何配置Log4j来实现日志信息通过电子邮件发送,以便于及时获取系统异常或关键事件的通知。 首先,我们需要理解Log4j的...
### Log4J 全能配置文件详解 #### 一、概述 Log4J是一款非常流行的Java日志框架,被广泛应用于各种规模的应用程序中。它提供了灵活的日志记录机制,可以将日志输出到不同的目的地,如控制台、文件、数据库等,并且...
这个压缩包“apache-log4j-2.13.2-bin”包含了Log4j2的核心组件,使得开发者可以在他们的应用程序中集成并使用Log4j2。以下是关于Log4j2的一些关键知识点: 1. **日志框架**:Log4j2是Apache软件基金会开发的日志...