Log4J在spring中的运用

一、maven加入log4j依赖,配置如下:

                <!-- Apache 日志工具包 -->
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
			<type>jar</type>
		</dependency>
		<!-- 1.2.15这个版本会和 com.sun.jdmk:jmxtools:jar:1.2.1 jms等冲突 -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.14</version>
			<type>jar</type>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.6</version>
		</dependency>

		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4</version>
			<type>jar</type>
		</dependency>
		<dependency>
			<groupId>javax.activation</groupId>
			<artifactId>activation</artifactId>
			<version>1.1</version>
			<type>jar</type>
		</dependency>
		<dependency>
			<groupId>jline</groupId>
			<artifactId>jline</artifactId>
			<version>0.9.94</version>
			<type>jar</type>
		</dependency>

二、创建log4j.properties文件,包含了日志存储数据库,监控告警邮件,配置如下:

#rootLogger配置是有顺序的,开发环境debug生产环境info,支持文件输出类型以上需要在web.xml中进行LOG4J的配置
#console控制台的输出,属于自定义 ,MAIL  logfile日志文件的输出,上线后console打印直接删除,log4j的jar版本必须要在1.2.14以上
log4j.rootLogger=DEBUG,console,logfile
#CConsole output...
log4j.category.org.springframework=ERROR
log4j.category.org.apache=INFO

#日志输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%p] [%c]-> %m%n
  
##mybatis显示SQL语句日志配置  log4j.logger.后跟包名称
log4j.logger.com.ibatis=INFO  
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=INFO  
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=INFO  
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=INFO  
log4j.logger.java.sql.Connection=INFO  
log4j.logger.java.sql.Statement=INFO  
log4j.logger.java.sql.PreparedStatement=INFO
##这两句是把这两个包下出现的错误的等级设为ERROR,如果项目中没有配置EHCache,则不需要这两句。
log4j.logger.com.opensymphony.oscache=INFO
log4j.logger.net.sf.ehcache=INFO

## File 支持日志打印到文件中并达到指定大小新建文件, org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#输出到文件中日志的级别 
log4j.appender.logfile.Threshold=INFO
#日志文件地址路径文件夹,.log文件会自动创建
log4j.appender.logfile.File=E\:/logs/zht_core_log4j.log
#日志文件最大
log4j.appender.logfile.MaxFileSize=4000KB  

log4j.appender.logfile.MaxBackupIndex=10
##定制打印形式
#org.apache.log4j.HTMLLayout(以HTML表格形式布局),
#org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
#org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
#org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
#%d-%c-%-4r[%t]%-5p%c%x-%m%n

##将日志进行数据库存储
#log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
##数据库连接
#log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
##数据库驱动
#log4j.appender.database.driver=com.MySQL.jdbc.Driver
##存储哪种日志级别
#log4j.appender.database.Threshold=info
##数据库用户名
#log4j.appender.database.user=root
##数据库用户密码
#log4j.appender.database.password=123456
##存储日志执行sql
#log4j.appender.database.sql=INSERT INTO LOG4J(Message)VALUES('[framework]%d-%c-%-4r[%t]%-5p%c%x-%m%n')
#log4j.appender.database.layout=org.apache.log4j.PatternLayout
#log4j.appender.database.layout.ConversionPattern=%d-%c-%-4r[%t]%-5p%c%x-%m%n
  
### MAIL ERROR级别的进行邮件通知 注意不要留空格
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender  
## 日志发送邮件的错误级别  
#log4j.appender.MAIL.Threshold=ERROR
## 缓存文件大小,日志达到1K时发送Email  
#log4j.appender.MAIL.BufferSize=10
## 发送邮件的服务器 ,如:smtp.qq.com 必须在发送方的邮箱设置第三方权限,否则发布出去 
#log4j.appender.MAIL.SMTPHost=smtp.163.com
## 邮件的标题  
#log4j.appender.MAIL.Subject=log4j\u8F93\u51FA\u9519\u8BEF\u4FE1\u606F\u5230\u65E5\u5FD7  
## 发送方用户名  
#log4j.appender.MAIL.SMTPUsername=123456
## 发送方授权码,相当于密码  
#log4j.appender.MAIL.SMTPPassword=1234567
## 发件人邮箱地址  
#log4j.appender.MAIL.From=123456@163.com
## 日志邮件的接收者  
#log4j.appender.MAIL.To=123456@qq.com
## 是否在控制台打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息  
#log4j.appender.MAIL.SMTPDebug=true
## log4j的邮件发送默认级别为ERROR,更改需要实现TriggeringEventEvaluator接口
#log4j.appender.MAIL.EvaluatorClass=com.zht.common.Log4jTriggeringEventEvaluator
## 日志PatternLayout文件编码格式类型,此类需要extends HTMLLayout类
#log4j.appender.MAIL.layout=com.zht.common.Loger4JHTMLLayOut
## 日志的格式  
#log4j.appender.MAIL.layout.ConversionPattern=[ErrorMessage]%d %p [%c]-%m%n

#看一下PatternLayout的值代表的什么意思
#%d 输出日志时间点的日期或时间,紧跟一对花括号进行自定义格式
#%t 输出产生该日志事件的线程名
#%c 输出所属的类目,通常就是所在类的全名
#%l 输出行号
#%m 输出代码中指定的消息
#%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”,也就是一跳消息占用一行
#      所以%m%n基本都是一起用
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
#   我们经常会看到[%-5p]这样的用法,就是对%p进行格式化,占用几个字符空间,因为INFO,DEBUG他们有的占用4个有的占用5个,日志看起来不对其,进行一个格式化而已。
#%r 输出自应用启动到输出该log信息耗费的毫秒数
#%c 输出所属的类目,通常就是所在类的全名
#%x 输出对齐

#**发送邮件报错--退信代码说明**: 
#  •421 HL:REP 该IP发送行为异常,存在接收者大量不存在情况,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并核对发送列表有效性;
#  •421 HL:ICC 该IP同时并发连接数过大,超过了网易的限制,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并降低IP并发连接数量;
#  •421 HL:IFC 该IP短期内发送了大量信件,超过了网易的限制,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并降低发送频率;
#  •421 HL:MEP 该IP发送行为异常,存在大量伪造发送域域名行为,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并使用真实有效的域名发送;
#  •450 MI:CEL 发送方出现过多的错误指令。请检查发信程序;
#  •450 MI:DMC 当前连接发送的邮件数量超出限制。请减少每次连接中投递的邮件数量;
#  •450 MI:CCL 发送方发送超出正常的指令数量。请检查发信程序;
#  •450 RP:DRC 当前连接发送的收件人数量超出限制。请控制每次连接投递的邮件数量;
#  •450 RP:CCL 发送方发送超出正常的指令数量。请检查发信程序;
#  •450 DT:RBL 发信IP位于一个或多个RBL里。请参考http://www.rbls.org/关于RBL的相关信息;
#  •450 WM:BLI 该IP不在网易允许的发送地址列表里;
#  •450 WM:BLU 此用户不在网易允许的发信用户列表里;
#  •451 DT:SPM ,please try again 邮件正文带有垃圾邮件特征或发送环境缺乏规范性,被临时拒收。请保持邮件队列,两分钟后重投邮件。需调整邮件内容或优化发送环境;
#  •451 Requested mail action not taken: too much fail authentication 登录失败次数过多,被临时禁止登录。请检查密码与帐号验证设置;
#  •451 RP:CEL 发送方出现过多的错误指令。请检查发信程序;
#  •451 MI:DMC 当前连接发送的邮件数量超出限制。请控制每次连接中投递的邮件数量;
#  •451 MI:SFQ 发信人在15分钟内的发信数量超过限制,请控制发信频率;
#  •451 RP:QRC 发信方短期内累计的收件人数量超过限制,该发件人被临时禁止发信。请降低该用户发信频率;
#  •451 Requested action aborted: local error in processing 系统暂时出现故障,请稍后再次尝试发送;
#  •500 Error: bad syntaxU 发送的smtp命令语法有误;
#  •550 MI:NHD HELO命令不允许为空;
#  •550 MI:IMF 发信人电子邮件地址不合规范。请参考http://www.rfc-editor.org/关于电子邮件规范的定义;
#  •550 MI:SPF 发信IP未被发送域的SPF许可。请参考http://www.openspf.org/关于SPF规范的定义;
#  •550 MI:DMA 该邮件未被发信域的DMARC许可。请参考http://dmarc.org/关于DMARC规范的定义;
#  •550 MI:STC 发件人当天的连接数量超出了限定数量,当天不再接受该发件人的邮件。请控制连接次数;
#  •550 RP:FRL 网易邮箱不开放匿名转发(Open relay);
#  •550 RP:RCL 群发收件人数量超过了限额,请减少每封邮件的收件人数量;
#  •550 RP:TRC 发件人当天内累计的收件人数量超过限制,当天不再接受该发件人的邮件。请降低该用户发信频率;
#  •550 DT:SPM 邮件正文带有很多垃圾邮件特征或发送环境缺乏规范性。需调整邮件内容或优化发送环境;
#  •550 Invalid User 请求的用户不存在;
#  •550 User in blacklist 该用户不被允许给网易用户发信;
#  •550 User suspended 请求的用户处于禁用或者冻结状态;
#  •550 Requested mail action not taken: too much recipient  群发数量超过了限额;
#  •552 Illegal Attachment 不允许发送该类型的附件,包括以.uu .pif .scr .mim .hqx .bhx .cmd .vbs .bat .com .vbe .vb .js .wsh等结尾的附件;
#  •552 Requested mail action aborted: exceeded mailsize limit 发送的信件大小超过了网易邮箱允许接收的最大限制;
#  •553 Requested action not taken: NULL sender is not allowed 不允许发件人为空,请使用真实发件人发送;
#  •553 Requested action not taken: Local user only  SMTP类型的机器只允许发信人是本站用户;
#  •553 Requested action not taken: no smtp MX only  MX类型的机器不允许发信人是本站用户;
#  •553 authentication is required  SMTP需要身份验证,请检查客户端设置;
#  •554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;**
#  •554 DT:SUM 信封发件人和信头发件人不匹配;
#  •554 IP is rejected, smtp auth error limit exceed 该IP验证失败次数过多,被临时禁止连接。请检查验证信息设置;
#  •554 HL:IHU 发信IP因发送垃圾邮件或存在异常的连接行为,被暂时挂起。请检测发信IP在历史上的发信情况和发信程序是否存在异常;
#  •554 HL:IPB 该IP不在网易允许的发送地址列表里;
#  •554 MI:STC 发件人当天内累计邮件数量超过限制,当天不再接受该发件人的投信。请降低发信频率;
#  •554 MI:SPB 此用户不在网易允许的发信用户列表里;
#  •554 IP in blacklist 该IP不在网易允许的发送地址列表里。
 

三、监控告警邮件发送形式定义类

3.1 html页面上下文类Loger4JHTMLLayOut
package com.zht.common;

import org.apache.log4j.HTMLLayout;


/**
 * @author Administrator
 * @Description: 日志文件
 * @date 2017年2月5日 上午11:00:45
 */
public class Loger4JHTMLLayOut extends HTMLLayout{
	@Override  
    public String getContentType() {  
        return "text/html;charset=utf-8";   
    }  
}
3.2 告警级别监听类Log4jTriggeringEventEvaluator
package com.zht.common;

import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.TriggeringEventEvaluator;


/**
 * @author Administrator
 * @Description: 此类为了实现LOG4J的错误日志进行邮件发送,更改日志邮件发送级别
 * @date 2017年2月5日 下午3:27:35
 */
public class Log4jTriggeringEventEvaluator implements TriggeringEventEvaluator{

	@Override
	public boolean isTriggeringEvent(LoggingEvent arg0) {
		
		return arg0.getLevel().isGreaterOrEqual(Level.ERROR);
	}

}

四、web.xml中加入log4j监听以及属性文件

<context-param>  
        <!-- log4j配置文件位置 -->  
        <param-name>log4jConfigLocation</param-name>  
        <param-value>classpath:log4j.properties</param-value>  
   </context-param>  
   <context-param> 
    	<!-- log4j配置文件刷新-->   
        <param-name>log4jRefreshInterval</param-name>  
        <param-value>60000</param-value>  
   </context-param>
   <context-param>
   		<!-- 服务器下部署多个项目都用到了Log4jConfigListener时,避免冲突问题,
   		value每个系统设置不同。否则两个默认值web.root在环境变量中就会有冲突导致第二个应用启动失败-->   
		<param-name>webAppRootKey</param-name>
		<param-value>zht_core</param-value>
	</context-param> 
    <!-- log4j监听器 -->  
   <listener>  
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
    </listener>

五、如果是启用了告警邮件发送,那么需要对应的邮箱开启权限,否则会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值