`
mxsfengg
  • 浏览: 206050 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Log4j的邮件功能

阅读更多

    Log4j的邮件功能能够为我们做这样的事情----当程序运行完的时候,或者正在运行也是可以的,它将程序的日志通过邮件的方式发到你的邮箱上。

    这样,对于程序运行的控制就不用每次都跑到机器上去看日志文件这么麻烦了,我们需要的只是,开开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=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
	public boolean isTriggeringEvent(LoggingEvent arg0) {
		return arg0.getLevel().isGreaterOrEqual(Level.INFO);
	}

 

  •    每遇到一个触发事件就发一封邮件!

            SMTPAppender 实现是,每当isTriggeringEvent()这个方法返回true的时候,它都会发送邮件。这样的话,一个程序执行下来,每个有能力触发的事件都会形成一封邮件。这显然不是我们希望看到的场面。

            笔者继承了SMTPAppender类,重装了append方法。          

@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(new Thread() {

			@Override
			public void run() {
				if (cb.length() > 0) {
					sendBuffer();
				}

			}

		});
	}

 

         笔者在构造函数中,添加了一个程序结束时运行的线程,来处理这个问题。

  •   设置Html格式的输出

            按照刚刚笔者给出的配置文件,所产生的邮件的格式是纯文本的。其实log4j有网页格式的输出的。

           

log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout

 

          这样的话,邮件就好看很多啦。

  •   解决邮件中的中文乱码问题

            最后,你会发现中文是乱码的,而且HTMLLayout没有提供编码方式的属性设置,哎,又是一阵无语中。

           得,笔者也就只好再写一个类,继承HTMLLayout,覆盖getContentType方法

          

@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

 

          

          好了,问题都解决了,不过仍然有一些不是很不明了的地方,路过的朋友多多留心,帮忙看看。这里谢过啦。

 

   

分享到:
评论
4 楼 飞天奔月 2014-11-09  
不错的文章, 丝丝入扣 有条理
3 楼 rancococ 2009-06-01  
好像结束时的那个线程有点问题,停止服务器时要报空指针异常。
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
if (cb.length() > 0) {
sendBuffer();
}
}
});
2 楼 mxsfengg 2008-12-19  
spyker 写道
不知道 如果上网有代理的话
log4j怎么配置的

代理我也没有用过,有空去看看。
1 楼 swen00 2008-12-19  
没用过,打算试试!项目中都是自己实现了发邮件功能,发到139邮箱,然后短信提示

相关推荐

    log4j常用配置

    日志处理组件log4j的配置 通过log4j可以实现信息的分级别的输出,可以将日志信息输出到控制台、文件、HTML文件、数据库、还可以发送电子邮件,功能相当给力

    LOG4J配置全接触

    Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。

    Log4net.dll

    Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库、txt文件、内存缓冲区、邮件、控制台、ANSI终端、...

    Java日志软件Log4j的基本使用教程

    主要介绍了Java日志软件Log4j的基本使用教程,包括回滚和发送日志邮件等基本功能使用的讲解,需要的朋友可以参考下

    常用日志控件的一个实例

    1:JDKLogTest.java JDK自带的日志控件,相对... commons-logging控件不是日志控件,没有日志功能,他只是统一了JDK Logging与Log4的API,并且将日志功能交给JDK Logging或Log4,对于不能确定日志方式的系统,建议使用。

    log4pb, pb的日志组件, 后台线程记录日志

    log4pb调用演示例子, 思想仿log4j // 2. 集成对象到application, // 3. 组件文件: log4pb90.pdb + callback.pbd, // 4. SQL目录包含一些数据库对象,目前支持postgresql和MS SQL(修改下表log4pb_log可支持其他...

    商品秒杀系统(限时抢购系统)

    springboot+Mybatis-plus搭建 redis、zookeeper、mq集群 redis缓存、jetCache缓存 ...拦截器、Log4j日志使用 还有很多的工具类、组件使用 数据库连接池Druid使用 MapStruct实体转化工具使用 然后部署时候CDN之类的使用

    springboot学习

    chapter4-2-5:使用log4j记录日志到MongoDB chapter4-2-6:Spring Boot 1.5.x新特性:动态修改日志级别] 安全管理 chapter4-3-1:使用Spring Security chapter4-3-2:[使用Spring Session(未完成)] 缓存支持 ...

    iBase4J分布式系统-其他

    iBase4J主要功能:1、数据库:Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。数据库密码加密,加密方式请查看PropertiesUtil,decryptProperties属性配置需要解密的key。2、持久层:mybatis持久化,...

    智能文章标题截取功能 专辑增加投稿开放模式 Lerx开源网站内容管理系统(CMS.ext) v6.6.5 JAVA源码

    后端:SpringMVC + Hibernate ORM + MySQL + Hibernate Search(Apache Lucence) + IK中文分词 + Log4J + … 前端:Jquery + Layui + wangEditor/KindEditor + JSON + Ajax 简介: 1.跨平台设计,能无差别运行于...

    s2mBlog 免费博客平台 v3.2.0

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

    框架整合jar包及其它功能包_spring4.2.3+hibernate5.0.2+struts2.3.24

    ehcache二级缓存,c3p0连接池,文件上传,dom4j,mysql数据库驱动,jscharts图表统计图走势,JSTL,struts日历控件包,base64加密,Excel文件生成,邮件发送,log4j以及log4j配置文件,mysql数据库连接Properties...

    基于Springboot的BUG管理平台.zip

    该系统基于Springboot框架开发,使用了Maven进行项目构建和管理,采用MySQL作为数据库存储数据,前端使用了Bootstrap和Thymeleaf等技术实现界面展示和交互操作,同时还使用了Log4j日志框架记录系统运行日志,保证...

    spring boot 全面的样例代码

    - chapter4-2-2:[使用log4j记录日志](http://blog.didispace.com/springbootlog4j/) - chapter4-2-3:[对log4j进行多环境不同日志级别的控制](http://blog.didispace.com/springbootlog4jmuilt/) - chapter4-2-4:...

    互联网创意产品众筹平台

    问题一箩筐-关于打印日志log4j问题5 y: }- e: Z$ p6 X9 d0 A9 @ │ 7.问题一箩筐-生产环境模拟, y; v4 Z% p0 }& I+ X* B) t# j │ 8.问题一箩筐-相对路径和绝对路径 │ 9.问题一箩筐-自定义监听器,解决上下文路径...

    storm-yarn:Storm-yarn使Storm集群可以部署到Hadoop YARN管理的计算机中

    暴风纱 Storm-yarn使Storm群集可以部署到Hadoop YARN管理的计算机中。 这项工作仍在进行中。 贡献者 ... 我们已经将日志记录框架从logback更新为log4j2。 如何安装和使用 先决条件 首先安装Java 8和Maven

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

    spring-boot-101:弹簧引导配置指南,例如mybatis,redis,缓存等

    功能清单Web配置和静态页面支持log4j2配置mySql和myBatis配置mongoDB配置Redis集群配置咖啡因缓存配置RESTful API 不同环境的不同配置文件从application.yml检索属性(请参阅:读取属性) 速度模板(不建议使用) ...

Global site tag (gtag.js) - Google Analytics