[Java基础]-- java类写入日志和定时删除日志

一、写入日志的工具类

LogUtil.java

 

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 *
 *@author yang
 *@类功能说明:创建日志的工具类
 *@修改日期:2015-11-3 下午05:02:41
 *@修改说明:
 *@创建时间:2015-11-3 下午05:02:41
 *@版本:V1.0
 */
public class LogUtil {
    private String pathurl   =UrlInfo.GLOBALS_PATH+"/mdlog/mdWeb/";//另一个类中public  static String GLOBALS_PATH="";         //设置日志的全局变量
    private String time     =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    private String daytime   =new SimpleDateFormat("yyyyMMdd").format(new Date());
    //创建字符文件流
    private FileWriter     fw=null;
    //创建字符缓冲流
    private BufferedWriter bw=null;
    /**
     *
     * @方法功能说明: 写文件的工具类
     * @修改者名字:yang
     * @修改日期 : 2015-11-4 
     * @参数: @param message   
     */
    public void info(String message){
        String os=System.getProperty("os.name");
        try {
/**
 * 判断操作系统名称是windows
 */
            if(os.startsWith("Windows")){
                try {
//判断是否有C D E盘
                    if(new File(UrlInfo.PATH_CDEF_D).isDirectory()){
                        UrlInfo.GLOBALS_PATH=UrlInfo.PATH_CDEF_D;
                    }else if(new File(UrlInfo.PATH_CDEF_E).isDirectory()){
                        UrlInfo.GLOBALS_PATH=UrlInfo.PATH_CDEF_E;
                    }else if(new File(UrlInfo.PATH_CDEF_C).isDirectory()){
                        UrlInfo.GLOBALS_PATH=UrlInfo.PATH_CDEF_C;
                    }
                    File fi=new File(pathurl);
//判断mdlog目录是否存在
                    File fl=new File(UrlInfo.GLOBALS_PATH+"/mdlog/");
                    if(!fl.isDirectory()){
                        fl.mkdir();
                    }
//判断文件夹是否存在
                    if(!fi.isDirectory()){
//如果不存在,那么创建一个文件夹
                        fi.mkdir();
                    }
//true代表在原有基础上进行添加txt内容
                    this.fw=new FileWriter(pathurl+daytime+".log",true);
                    this.bw=new BufferedWriter(this.fw);
//写入信息内容
                    this.bw.write(time+":"+message+"\r\n");
//不用编码,只要统一了编码GBK那么就行
                } catch (IOException e) {
                    this.bw.write("write daily error:"+"\r\n"+e.getMessage());
                }finally{
                    this.bw.close();
                    this.fw.close();
                }
            }
/**
 * 判断操作系统是linux系统
 */
            else{
//设置linux下的全局变量
                UrlInfo.GLOBALS_PATH="/usr/";
                try {
                    File fi=new File(pathurl);
//判断文件夹是否存在
                    if(!fi.isDirectory()){
//如果不存在,那么创建一个文件夹
                        fi.mkdir();
                    }
//true代表在原有基础上进行添加txt内容20151104.log
                    this.fw=new FileWriter(pathurl+daytime+".log",true);
                    this.bw=new BufferedWriter(this.fw);
//写入信息内容
                    this.bw.write(time+":"+message+"\r\n");
// this.bw.write(time+":"+new String(b,UrlInfo.GLOBALS_UNICODE)+"\r\n");
                } catch (IOException e) {
                    e.printStackTrace();
                    this.bw.write("write daily error:"+"\r\n"+e.getMessage());
                }finally{
                    this.bw.close();
                    this.fw.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @方法功能说明: 获取当前月往前推一个月的日期
     * @修改者名字:yang
     * @修改日期 : 2015-11-8 
     * @修改内容 :
     * @参数:     int 多少月  
     * @return String
     * @异常抛出:
     */
    public  int getForwardDate(int what){
        SimpleDateFormat  sdf = new SimpleDateFormat("yyyyMMdd");
        Calendar cl = Calendar.getInstance();
        cl.add(Calendar.MONTH, what);//从现在算,之前month个月
        Date dateFrom = cl.getTime();
        return Integer.parseInt(sdf.format(dateFrom));
    }
}

 

 

二、定时删除一个月前的日志

LogListener.java

 



 

 

1、监听器需要在web.xml文件中初始化

 

 
  web.md.listener.LogListener
 

 

 

2、UrlInfo.java参考

 

package com.dg.web.form.common;

public class UrlInfo {
	/**2016-03-01新增小店服务器的ip地址*/
	//
	public static String SERVICE_IP_40="*.40";
	public static String SERVICE_IP_41="*.41";
	public static String SERVICE_IP_73="*.73";
	public static String SERVICE_IP_78="*.78";
	public static String SERVICE_IP_79="*.79";
	public static String NAME_SMALL_STORE="小店服务器";
	/**
	 *2016-02-19增加条件 
	 */
	public static String COMMON_NAME_GIFT="赠品";			//为赠品管理添加条件
	public static int COMMON_NAME_NUM=8;							//赠品券活动的sqlx是8
	
	public static String URL_DATANAME_DG="dg";                //mysql数据库名--> dg
	public static String URL_DATANAME_ORDER="order";          //mysql数据库名--> order
	public static String URL_DATANAME_IPADD="127.0.0.1";      //链接数据库,服务器本机默认ip地址127.0.0.1
	public static String URL_TABLENAME_MD_QUERY="md_query";   //门店信息表(包含所有门店信息)
	//mysql dg数据库 表名称
	public static String TABLENAME_XSLSB="xslsb";              //销售流水表
	public static String TABLENAME_XSLSB_BAK="xslsb_bak";      //销售流水备份表
	
	public static String TABLENAME_ZFFSB="zffsb";              //支付方式表
	public static String TABLENAME_ZFFSB_BAK="zffsb_bak";      //支付方式备份表
	
	public static String TABLENAME_YHQFQB="yhqfqb";			   //优惠券发券表
	public static String TABLENAME_YHQFQB_BAK="yhqfqb_bak";	   //优惠券发券备份表
	
	public static String TABLENAME_YHQDQB="yhqdqb";			   //优惠券兑券表
	public static String TABLENAME_YHQDQB_BAK="yhqdqb_bak";    //优惠券兑券备份表
	
	public static String TABLENAME_YHHDB="yhhdb";              //优惠活动表
	public static String TABLENAME_FQGZB="fqgzb";              //发券规则表
	public static String TABLENAME_DQGZB="dqgzb";              //兑券规则表
	
	public static String TABLENAME_FQSJB="fqsjb";              //发券时间表
	public static String TABLENAME_DQSJB="dqsjb";              //兑券时间表
	
	public static String TABLENAME_FQSPB="fqspb";              //发券商品表
	public static String TABLENAME_DQSPB="dqspb";              //兑券商品表
	
	public static String TABLENAME_XTCSB="xtcsb";              			    	//系统参数表
	public static String TABLENAME_MUSIC="t_md_query_music";     //获取到门店的ip地址
	
	public static String VARIABLE_NAME_HAND="发券";              //发券
	public static String VARIABLE_NAME_HAND_OUT="剔除";          //剔除发券或者兑券
	public static String VARIABLE_NAME_EXCHANGE="兑券";          //兑券
	
	public static int XPH_LENGTH=2;                              //小票号的长度为6时,起始值是2
	public static String ZFFSDM="4";                             //支付方式代码为4代表优惠券支付
	public static int SQLX=6;                                           //收券类型为6代表云收券,
	public static int SQLX2=7;                                   
	public static int SQLX3=0;                                    
	public static int SQLX4=9;                                    
	public static int FQLX=6;                                     //代表有发券规则
	public static int FQLX2=0;                                   //代表有发券规则
	public static int FQLX3=7;                                   //代表有发券规则
	public static int FQLX4=9;                                   //代表有发券规则
	
	/**
	 * 用于判断sqlx,fqlx
	 */
	public static int FQLX5=5;            //代表不发券
	public static int FQLX9=999;         //代表不发券
	public static int SQLX5=5;
	public static int SQLX9=999;
	
	/**
	 *登录 账号和密码
	 */
	public static String UER="dg";
	public static String UER1="001";
	public static String UER2="002";
	public static String UER3="003";
	public static String UER4="004";
	
	public static String PASSWORD="123";
	public static String PASSWORD1="123";
	public static String PASSWORD2="123";
	public static String PASSWORD3="123";
	public static String PASSWORD4="123";
	
	/**
	 * 设置选择的活动名称个数
	 */
	public static int COUNT_HDBH=3;
	/**
	 * 活动名称
	 */
	public static String NAME_HDMC="重要";    //为了显示重要的活动
	/**
	 * 规定jsp填写参数mdh时,如果查询备份服务器10.2.2.71那么需要规定mdh以小写或者大写B开头
	 */
	public static String STRING_MDH_B="B"; 
	public static String STRING_MDH_b="b"; 
	/**
	 * 总部查询时,是否需要访问备份服务器的标志
	 */
	public static String MASTER_TIPS_TRUE ="999";    //如果是999代表需要访问备份服务器
	public static String MASTER_TIPS_FALSE="888";    //如果是888代表不需要访问备份服务器
	/**
	 * 门店查询时,是否需要访问备份服务器的标志
	 */
	public static String MD_TIPS_TRUE ="1";  //如果是1代表需要访问备份服务器
	public static String MD_TIPS_FALSE="0";  //如果是0代表需要访问备份服务器
	/**
	 * 门店不通时,需要查询备份服务器
	 */
	public static String BAK_IP="10.2.2.71";   //备份数据服务器ip
//	public static String BAK_IP="192.168.1.122";           //备份数据服务器ip
	/**
	 *路径的全局变量
	 */
	public  static String GLOBALS_PATH="";         //设置日志的全局变量
	public static String GLOBAL_MP3_PATH="";  //设置mp3门店存放的全局变量
	/**
	 * 用于判断是否有“请选择”字样的变量
	 */
	public static String GLOBALS_JADGMENT="请选择";
	/**
	 * 2015-11-26
	 * 提示查询小票商品最综是否符合发券信息
	 */
	public static String RESULT_JSP_TRUE="符合(本地门店服务器【已生成】优惠券!)";   //显示符合发券,备注本地服务器已经发券
	public static String RESULT_JSP_FALSE="符合(本地门店服务器【未生成】优惠券,【需要总部补发】!)";   //显示符合发券,备注本地服务器未发券
	
	/**
	 * 2015-11-30
	 * 固定时间删除日志
	 */
	public static int TIME_DELETE_HOUR=02;      //时
	public static int TIME_DELETE_MINUTES=00;   //分
	public static int TIME_DELETE_SECOND=00;    //秒
	
	
	/**
	 * 2015-12-10
	 * 固定的下发时间
	 */
	public static int TIME_HANDOUT_HOUR=2;      //时
	public static int TIME_HANDOUT_MINUTES=0;   //分
	public static int TIME_HANDOUT_SECOND=0;    //秒
	/**
	 * 2016-01-06
	 * 固定的删除空文件和不存在的文件的时间
	 */
	public static int TIME_DELETE_FILE_HOUR=1;      //时
	public static int TIME_DELELTE_FILE_MINUTES=0;   //分
	public static int TIME_DELETE_FILE_SECOND=0;    //秒
	/**
	 * xml和mp3下发相关
	 */
	public static String URL_MP3XML_MASTER="D://play/";              //.40上的mp3和xml文件路径默认是D盘
	public static String URL_MP3XML_LINUX_OR_WINDOWS       ="";                             //存放门店返回的文件
	public static String XML_PLAYLIST_NAME="PlayList.xml"; //监听器传递的下发xml文件名称
	public static String XML_COMMAND_NAME="command"; //监听器传递的命令参数名称
	public static String XML_EXECUTE_RESULT="yes";               //.40的servlet接收yes的命令
	
	/**
	 * 2015-12-11
	 * 新增参数:判断是否连接门店数据库成功
	 */
	public static String CONECT_MD_RESULT="链接失败";
	public static String MD_TO_MASTER_SUCESS="1";   //接收mp3后给.40返回的成功标记
	public static String MD_TO_MASTER_ERROR="0";   //接收xml文件或者mp3后给.40返回的失败标记
	/**
	 * 保存日志已经xml和mp3文件的磁盘路径
	 */
	public static String PATH_CDEF_C ="C:/"; //windows下C盘
	public static String PATH_CDEF_D="D:/";//windows下D盘
	public static String PATH_CDEF_E ="E:/";//windows下E盘
	
	/**
	 * 2016-01-21 优惠券发券表中的sftd目前为1时,表示为通兑码
	 */
	public static int PARAM_SFTD=1;
}

 

------LogListener 监听----

import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import web.md.util.LogUtil;
public class LogListener implements ServletContextListener{
    private LogUtil logger=new LogUtil();

    public void contextDestroyed(ServletContextEvent sce) {
    }
    public void contextInitialized(ServletContextEvent sce) {
        Timer timer=new Timer();
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, UrlInfo.TIME_DELETE_HOUR); // 控制时 
        calendar.set(Calendar.MINUTE, UrlInfo.TIME_DELETE_MINUTES);   // 控制分 
        calendar.set(Calendar.SECOND, UrlInfo.TIME_DELETE_SECOND);    // 控制秒 
        Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的02:00:00 
//获取时间
        timer.scheduleAtFixedRate(new TimerTask() {
            int firstDate=0;
            int lastDate =0;
            @Override
            public void run() {
                logger.info("---【监听器监听到开始删除日志文件】---");
//获取日志文件夹的路径
                String logPath=UrlInfo.GLOBALS_PATH+"/mdlog/mdWeb/";
/**
 * 定时删除任务
 */
//获取当前日期往前推一个月的开始时间和结束时间
                firstDate=logger.getForwardDate(-2);
                lastDate =logger.getForwardDate(-1);
//首先进入目录去匹配是否有该文件夹
                if(new File(logPath).isDirectory()){
//获取文件夹中的文件集合
                    File []logs=new File(logPath).listFiles();
//遍历集合
                    for(int i=0;i=firstDate&&logInt<=lastDate){
                            logger.info("----监听器中,开始删除往前一个月的日志文件:"+log);
//执行删除方法
                            log.delete();
                        }
                    }
                }
                logger.info("---【监听器监听到删除日志文件结束】---");
            }
        }, time, 24*60*60*1000);//每天执行一次
    }
}
=firstDate&&logInt<=lastDate){
                            logger.info("----监听器中,开始删除往前一个月的日志文件:"+log);
//执行删除方法
                            log.delete();
                        }
                    }
                }
                logger.info("---【监听器监听到删除日志文件结束】---");
            }
        }, time, 24*60*60*1000);//每天执行一次
    }
}

 

 

 

 

 

 

你可能感兴趣的:(java,Java)