一、寫入日志的工具類
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
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<logs.length;i++){
//獲取第i個文件
File log=logs[i];
//獲取第i個文件的名稱
int logInt=Integer.parseInt(log.getName().substring(0,8));
//判斷是在一個月內
if(logInt>=firstDate&&logInt<=lastDate){
logger.info("----監聽器中,開始刪除往前一個月的日志文件:"+log);
//執行刪除方法
log.delete();
}
}
}
logger.info("---【監聽器監聽到刪除日志文件結束】---");
}
}, time, 24*60*60*1000);//每天執行一次
}
}
注:監聽器需要在web.xml文件中初始化