您的位置:首页 > 编程语言 > Java开发

java类写入日志和定时删除日志

2016-01-03 15:38 435 查看
一、写入日志的工具类

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文件中初始化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: