一、寫入日志的工具類
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檔案中初始化
<listener>
<listener-class>web.md.listener.LogListener</listener-class>
</listener>
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);//每天執行一次
}
}