Web开发加入Log4j日志管理

前言:我一个搞iOS开发的,阴差阳错的进入到了Java web开发,没有办法,虽然初有抵触情绪,但是后来发现其实开发之间其实是没有界限的,当初看过的《设计模式》还有《重构》甚至大学时就看过的Java技术,与iOS的Object-C或swift都是想通的,至少在面向对象这个层面上是没有什么差的,所以,就这样走下去吧,也许路会越来越宽。 

最近做了下Log4j日志相关的事情,也是翻阅了大量的博客和论坛,改了又改,初见成效,拿来分享。

1.问题描述

web开发中需要对异常或者警告、甚至日常日志进行记录,以便在日后查阅或者在出现问题时快速定位问题解决问题。

2.解决方案

Tomcat自带的日志就不说了,只能记录部分异常,有时候我们需要记录一些非程序异常比如调用接口出错等,校验失败等。所以Log4j是一个不错的选择。

3.解决问题

只说我个人采用的解决方式(其中部分代码也是摘录自网上,在此谢过不加链接了),或许有更优的,请留言共同学习。

首先就是配置Log4j.properties


我把log4j.properties放这默认是不用再做其他配置了,也可以添加log4j.xml等,这个需要在servlet中配置初始化,没做就不说了。

其次配置Log4j.properties。

log4j.rootLogger=DEBUG,CONSOLE,MAIL
#DEBUG,CONSOLE,ORDINARY,WARNNING,EXCEPTION,MAIL
log4j.addivity.org.apache=true
#################### 
## Console Appender 
#################### 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.Threshold=DEBUG 
log4j.appender.CONSOLE.Target=System.out 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} - [%-5p %c] - [%l] - [%rms] - [%t] %x - %m%n 

##配置INFOappender,每天生成一个文件
#log4j.appender.ORDINARY=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.ORDINARY.File=${catalina.base}/Logs/ordinary.log
##历史日志文件的文件名格式
#log4j.appender.ORDINARY.DatePattern='.'yyyy-MM-dd
##向文件追加日志内容
#log4j.appender.ORDINARY.Append=true
##appender的阀值(级别)
#log4j.appender.ORDINARY.Threshold=INFO
##日志内容格式
#log4j.appender.ORDINARY.layout=org.apache.log4j.PatternLayout
#log4j.appender.ORDINARY.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} - [%-5p %c] - [%l] - [%rms] - [%t] %x - %m%n
#
##配置WARNINGappender,每天生成一个文件
#log4j.appender.WARNNING=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.WARNNING.File=${catalina.base}/Logs/warnning.log
##历史日志文件的文件名格式
#log4j.appender.WARNNING.DatePattern='.'yyyy-MM-dd
##向文件追加日志内容
#log4j.appender.WARNNING.Append=true
##appender的阀值(级别)
#log4j.appender.WARNNING.Threshold=WARN
##日志内容格式
#log4j.appender.WARNNING.layout=org.apache.log4j.PatternLayout
#log4j.appender.WARNNING.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} - [%-5p %c] - [%l] - [%rms] - [%t] %x - %m%n
#
##配置EXCEPTIONappender,每天生成一个文件
#log4j.appender.EXCEPTION=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.EXCEPTION.File=${catalina.base}/Logs/exception.log
#log4j.appender.EXCEPTION.DatePattern='.'yyyy-MM-dd
#log4j.appender.EXCEPTION.Append=true
#log4j.appender.EXCEPTION.Threshold=ERROR
#log4j.appender.EXCEPTION.layout=org.apache.log4j.PatternLayout
#log4j.appender.EXCEPTION.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} - [%-5p %c] - [%l] - [%rms] - [%t] %x - %m%n

### send error through email.
#log4j的邮件发送appender,如果有必要你可以写自己的appender
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#发送邮件的门槛,仅当等于或高于ERROR(比如FATAL)时,邮件才被发送
log4j.appender.MAIL.Threshold=ERROR
#缓存文件大小,日志达到10k时发送Email
log4j.appender.MAIL.BufferSize=128
#发送邮件的邮箱帐号
log4j.appender.MAIL.From=xxx@163.com
#SMTP邮件发送服务器地址
log4j.appender.MAIL.SMTPHost=smtp.163.com
#SMTP发送认证的帐号名
log4j.appender.MAIL.SMTPUsername=xxx
#SMTP发送认证帐号的密码
log4j.appender.MAIL.SMTPPassword=xxx
#是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息
log4j.appender.MAIL.SMTPDebug=false
#邮件主题
log4j.appender.MAIL.Subject=[wo+sms]Log4J Alert!
#发送到什么邮箱,如果要发送给多个邮箱,则用逗号分隔;
#如果需要发副本给某人,则加入下列行
#log4j.appender.MAIL.Bcc=xxx@qq.com
log4j.appender.MAIL.To=xxx@163.com
log4j.appender.MAIL.layout=com.unisk.sms.style.MailEvaluator
#log4j.appender.MAIL.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} - [%-5p %c] - [%l] - [%rms] - [%t] %x - %m%n

说明:其中详细参数的设置不说了,大家参看这篇文章 http://zhangjunhd.blog.51cto.com/113473/21014/

1.MailEvaluator主要是用于输出中文,实际上是重写了getContentType方法,具体实现很简单。

import org.apache.log4j.Layout;  
import org.apache.log4j.spi.LoggingEvent;  
  
public class MailEvaluator extends Layout{  
      
    StringBuffer sbuf;  
    @Override    
    public String getContentType()   
    {     
        return "text/html;charset=GBK";  
    }  
}  

2.日志将会保存在tomcat的Logs文件夹下

${catalina.base}/Logs/warnning.log

大体就是这样,写了一个Logger4j类,调用:

import org.apache.log4j.Logger;

public class Logger4j {
	/**
	 * 注:仅作打印
	 * */
	public static void debuglog(Object message) {
		Logger consLogger = Logger.getLogger("CONSOLE");
		consLogger.debug(message);
	}
	
	/**
	 * 存储打印debug级别以上日志
	 * */
	public static void infolog(Object message) {
		Logger consLogger = Logger.getLogger("ORDINARY");
		consLogger.info(message);
	}
	
	/**
	 * 存储warn级别以上日志
	 * */
	public static void warnlog(Object message) {
		Logger consLogger = Logger.getLogger("WARNNING");
		consLogger.warn(message);
	}
	
	/**
	 * 存储error级别以上日志
	 * */
	public static void errorlog(Object message) {
		Logger consLogger = Logger.getLogger("EXCEPTION");
		consLogger.error(message);
	}
	
	/**
	 * 发送邮件error级别以上日志
	 * */
	public static void mailerrorlog(Object message) {
		Logger consLogger = Logger.getLogger("MAIL");
		consLogger.error(message);
	}
	
	public   static   void  main(String[] args)  {
//		Logger4j.infolog("info登录成功");
//		Logger4j.warnlog("warn登录成功");
//		Logger4j.errorlog("error登录成功");
//		Logger4j.mailerrorlog("mail登录进入");
	}
	
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值