「Java基礎」-- java類寫入日誌和定時刪除日誌

「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));
 }
}
「Java基礎」-- java類寫入日誌和定時刪除日誌

二、定時刪除一個月前的日誌

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;
}
 
「Java基礎」-- java類寫入日誌和定時刪除日誌

------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);//每天執行一次 } }

最後呢,我準備了一波學習資料一併給我的粉絲,希望大家能夠喜歡哈!

獲取方式:

1.轉發關注小編;

2.私信小編“學習“來拿走吧~


分享到:


相關文章: