一、寫入日誌的工具類
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);//每天執行一次 } }
最後呢,我準備了一波學習資料一併給我的粉絲,希望大家能夠喜歡哈!
獲取方式:
1.轉發關注小編;
2.私信小編“學習“來拿走吧~