今天講一下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
?*@類功能說明:創(chuàng)建日志的工具類
?*@修改日期:2015-11-3 下午05:02:41
?*@修改說明:
?*@創(chuàng)建時間:2015-11-3 下午05:02:41
?*@版本:V1.0
?*/
public class LogUtil {
??private String pathurl??=UrlInfo.GLOBALS_PATH+"/mdlog/mdWeb/";//另一個類中public?static String GLOBALS_PATH="";?????//設(shè)置日志的全局變量
??private String time???=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
??private String daytime??=new SimpleDateFormat("yyyyMMdd").format(new Date());
??//創(chuàng)建字符文件流
??private FileWriter???fw=null;
??//創(chuàng)建字符緩沖流
??private BufferedWriter bw=null;
??/**
???*
???* @方法功能說明: 寫文件的工具類
???* @修改者名字:yang
???* @修改日期 : 2015-11-4?
???* @參數(shù): @param message??
???*/
??public void info(String message){
????String os=System.getProperty("os.name");
????try {
/**
?* 判斷操作系統(tǒng)名稱是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()){
//如果不存在褐桌,那么創(chuàng)建一個文件夾
????????????fi.mkdir();
??????????}
//true代表在原有基礎(chǔ)上進行添加txt內(nèi)容
??????????this.fw=new FileWriter(pathurl+daytime+".log",true);
??????????this.bw=new BufferedWriter(this.fw);
//寫入信息內(nèi)容
??????????this.bw.write(time+":"+message+"\r\n");
//不用編碼,只要統(tǒng)一了編碼GBK那么就行
????????} catch (IOException e) {
??????????this.bw.write("write daily error:"+"\r\n"+e.getMessage());
????????}finally{
??????????this.bw.close();
??????????this.fw.close();
????????}
??????}
/**
?* 判斷操作系統(tǒng)是linux系統(tǒng)
?*/
??????else{
//設(shè)置linux下的全局變量
????????UrlInfo.GLOBALS_PATH="/usr/";
????????try {
??????????File fi=new File(pathurl);
//判斷文件夾是否存在
??????????if(!fi.isDirectory()){
//如果不存在,那么創(chuàng)建一個文件夾
????????????fi.mkdir();
??????????}
//true代表在原有基礎(chǔ)上進行添加txt內(nèi)容20151104.log
??????????this.fw=new FileWriter(pathurl+daytime+".log",true);
??????????this.bw=new BufferedWriter(this.fw);
//寫入信息內(nèi)容
??????????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();
????}
??}
??/**
???*
???* @方法功能說明: 獲取當(dāng)前月往前推一個月的日期
???* @修改者名字:yang
???* @修改日期 : 2015-11-8?
???* @修改內(nèi)容 :
???* @參數(shù):???int 多少月??
???* @return String
???* @異常拋出:
???*/
??public?int getForwardDate(int what){
????SimpleDateFormat?sdf = new SimpleDateFormat("yyyyMMdd");
????Calendar cl = Calendar.getInstance();
????cl.add(Calendar.MONTH, what);//從現(xiàn)在算,之前month個月
????Date dateFrom = cl.getTime();
????return Integer.parseInt(sdf.format(dateFrom));
??}
}
二、定時刪除一個月前的日志
LogListener.java
注:
1屎债、監(jiān)聽器需要在web.xml文件中初始化
?<listener>
?<listener-class>web.md.listener.LogListener</listener-class>
?</listener>
今天為大家整理了部分學(xué)習(xí)教程與大家共享,每個人可以根據(jù)自己的需要來選擇垢油,需要的小伙伴可以+下學(xué)習(xí)資料分享裙 943加上064最后是644數(shù)字連起來就是了盆驹。
2、UrlInfo.java參考
package com.dg.web.form.common;
public class UrlInfo {
/**2016-03-01新增小店服務(wù)器的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="小店服務(wù)器";
/**
*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數(shù)據(jù)庫名--> dg
public static String URL_DATANAME_ORDER="order";?????//mysql數(shù)據(jù)庫名--> order
public static String URL_DATANAME_IPADD="127.0.0.1";???//鏈接數(shù)據(jù)庫滩愁,服務(wù)器本機默認ip地址127.0.0.1
public static String URL_TABLENAME_MD_QUERY="md_query";??//門店信息表(包含所有門店信息)
//mysql dg數(shù)據(jù)庫 表名稱
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"; ??//優(yōu)惠券發(fā)券表
public static String TABLENAME_YHQFQB_BAK="yhqfqb_bak"; ??//優(yōu)惠券發(fā)券備份表
public static String TABLENAME_YHQDQB="yhqdqb"; ??//優(yōu)惠券兌券表
public static String TABLENAME_YHQDQB_BAK="yhqdqb_bak";??//優(yōu)惠券兌券備份表
public static String TABLENAME_YHHDB="yhhdb";???????//優(yōu)惠活動表
public static String TABLENAME_FQGZB="fqgzb";???????//發(fā)券規(guī)則表
public static String TABLENAME_DQGZB="dqgzb";???????//兌券規(guī)則表
public static String TABLENAME_FQSJB="fqsjb";???????//發(fā)券時間表
public static String TABLENAME_DQSJB="dqsjb";???????//兌券時間表
public static String TABLENAME_FQSPB="fqspb";???????//發(fā)券商品表
public static String TABLENAME_DQSPB="dqspb";???????//兌券商品表
public static String TABLENAME_XTCSB="xtcsb";??????? ?? //系統(tǒng)參數(shù)表
public static String TABLENAME_MUSIC="t_md_query_music";???//獲取到門店的ip地址
public static String VARIABLE_NAME_HAND="發(fā)券";???????//發(fā)券
public static String VARIABLE_NAME_HAND_OUT="剔除";?????//剔除發(fā)券或者兌券
public static String VARIABLE_NAME_EXCHANGE="兌券";?????//兌券
public static int XPH_LENGTH=2;???????????????//小票號的長度為6時躯喇,起始值是2
public static String ZFFSDM="4";???????????????//支付方式代碼為4代表優(yōu)惠券支付
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;???????????????????//代表有發(fā)券規(guī)則
public static int FQLX2=0;??????????????????//代表有發(fā)券規(guī)則
public static int FQLX3=7;??????????????????//代表有發(fā)券規(guī)則
public static int FQLX4=9;??????????????????//代表有發(fā)券規(guī)則
/**
* 用于判斷sqlx惊楼,fqlx
*/
public static int FQLX5=5;??????//代表不發(fā)券
public static int FQLX9=999;?????//代表不發(fā)券
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";
/**
* 設(shè)置選擇的活動名稱個數(shù)
*/
public static int COUNT_HDBH=3;
/**
* 活動名稱
*/
public static String NAME_HDMC="重要";??//為了顯示重要的活動
/**
* 規(guī)定jsp填寫參數(shù)mdh時玖瘸,如果查詢備份服務(wù)器10.2.2.71那么需要規(guī)定mdh以小寫或者大寫B(tài)開頭
*/
public static String STRING_MDH_B="B";?
public static String STRING_MDH_b="b";?
/**
* 總部查詢時秸讹,是否需要訪問備份服務(wù)器的標(biāo)志
*/
public static String MASTER_TIPS_TRUE ="999";??//如果是999代表需要訪問備份服務(wù)器
public static String MASTER_TIPS_FALSE="888";??//如果是888代表不需要訪問備份服務(wù)器
/**
* 門店查詢時檀咙,是否需要訪問備份服務(wù)器的標(biāo)志
*/
public static String MD_TIPS_TRUE ="1";?//如果是1代表需要訪問備份服務(wù)器
public static String MD_TIPS_FALSE="0";?//如果是0代表需要訪問備份服務(wù)器
/**
* 門店不通時,需要查詢備份服務(wù)器
*/
public static String BAK_IP="10.2.2.71";??//備份數(shù)據(jù)服務(wù)器ip
// public static String BAK_IP="192.168.1.122";??????//備份數(shù)據(jù)服務(wù)器ip
/**
*路徑的全局變量
*/
public?static String GLOBALS_PATH="";?????//設(shè)置日志的全局變量
public static String GLOBAL_MP3_PATH="";?//設(shè)置mp3門店存放的全局變量
/**
* 用于判斷是否有“請選擇”字樣的變量
*/
public static String GLOBALS_JADGMENT="請選擇";
/**
* 2015-11-26
* 提示查詢小票商品最綜是否符合發(fā)券信息
*/
public static String RESULT_JSP_TRUE="符合(本地門店服務(wù)器【已生成】優(yōu)惠券!)";??//顯示符合發(fā)券璃诀,備注本地服務(wù)器已經(jīng)發(fā)券
public static String RESULT_JSP_FALSE="符合(本地門店服務(wù)器【未生成】優(yōu)惠券,【需要總部補發(fā)】!)";??//顯示符合發(fā)券弧可,備注本地服務(wù)器未發(fā)券
/**
* 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
* 固定的下發(fā)時間
*/
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下發(fā)相關(guān)
*/
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"; //監(jiān)聽器傳遞的下發(fā)xml文件名稱
public static String XML_COMMAND_NAME="command"; //監(jiān)聽器傳遞的命令參數(shù)名稱
public static String XML_EXECUTE_RESULT="yes";????????//.40的servlet接收yes的命令
/**
* 2015-12-11
* 新增參數(shù):判斷是否連接門店數(shù)據(jù)庫成功
*/
public static String CONECT_MD_RESULT="鏈接失敗";
public static String MD_TO_MASTER_SUCESS="1";??//接收mp3后給.40返回的成功標(biāo)記
public static String MD_TO_MASTER_ERROR="0";??//接收xml文件或者mp3后給.40返回的失敗標(biāo)記
/**
* 保存日志已經(jīng)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 優(yōu)惠券發(fā)券表中的sftd目前為1時,表示為通兌碼
*/
public static int PARAM_SFTD=1;
}
------LogListener 監(jiān)聽----
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(); // 得出執(zhí)行任務(wù)的時間,此處為今天的02:00:00?
//獲取時間
????timer.scheduleAtFixedRate(new TimerTask() {
??????int firstDate=0;
??????int lastDate =0;
??????@Override
??????public void run() {
????????logger.info("---【監(jiān)聽器監(jiān)聽到開始刪除日志文件】---");
//獲取日志文件夾的路徑
????????String logPath=UrlInfo.GLOBALS_PATH+"/mdlog/mdWeb/";
/**
?* 定時刪除任務(wù)
?*/
//獲取當(dāng)前日期往前推一個月的開始時間和結(jié)束時間
????????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("----監(jiān)聽器中劣欢,開始刪除往前一個月的日志文件:"+log);
//執(zhí)行刪除方法
??????????????log.delete();
????????????}
??????????}
????????}
????????logger.info("---【監(jiān)聽器監(jiān)聽到刪除日志文件結(jié)束】---");
??????}
????}, time, 24*60*60*1000);//每天執(zhí)行一次
??}
}
=firstDate&&logInt<=lastDate){
??????????????logger.info("----監(jiān)聽器中棕诵,開始刪除往前一個月的日志文件:"+log);
//執(zhí)行刪除方法
??????????????log.delete();
????????????}
??????????}
????????}
????????logger.info("---【監(jiān)聽器監(jiān)聽到刪除日志文件結(jié)束】---");
??????}
????}, time, 24*60*60*1000);//每天執(zhí)行一次
??}
}
如果喜歡請轉(zhuǎn)發(fā)+關(guān)注