手写日志框架

话不多少,直接上代码

日志实现类
 

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;


/**
 * 日志系统的抽象类,用于记录日志信息。不同级别的日志记录到不同的日志文件中。
 * 日志文件的的格式为:logs/yyyy-MM-dd/info、warn、error、debug.txt
 *   */ public  class Log {     private static final String LOG_FLOADER="Logs";     private static final String INFO="INFO";     private static final String WARN="WARN";     private static final String ERROR="ERROR";     private static final String DEBUG="DEBUG";     private static Log logger = null;     static{         logger = new Log();     }     private Log(){}     /**      * 单例模式获取日志实体      * @return      */     public static synchronized Log getLogger(){         if(null == logger)             logger = new Log();         return logger;     }           public static void main(String[] args) {     }     /**      * 记录日志      * @param log 日志信息      * @param floaderName 文件夹名称      * @param fileName 文件名      * @param level 日志级别      * @throws IOException 可能产生IO异常,如读写错误      */     public synchronized void log(String log,String floaderName,String fileName,String level) throws IOException{         if(!checkFile(floaderName,fileName)){//如果文件夹和文件都存在             makeFile(floaderName,fileName);         }                  //记录日志文件         FileOutputStream fo = null;         try{             fo = new FileOutputStream(LOG_FLOADER+"/"+floaderName+"/"+fileName,true);             fo.write((log+"\n").getBytes());             fo.flush();             if(ERROR.equals(level)){                 System.err.println(log);             }else{                 System.out.println(log);             }         } catch (FileNotFoundException e) {             throw e;         } catch (IOException e) {             throw e;         }finally{             if(null != fo){                 try {                     fo.flush();                     fo.close();                 } catch (IOException e) {                     System.out.println("关闭文件:"+LOG_FLOADER+"/"+floaderName+"/"+fileName+" 失败!");                 }             }         }     }                    /**      * 按照指定的文件夹名和文件名创建文件      * @param floaderName 文件夹名      * @param fileName 文件名      */     private void makeFile(String floaderName, String fileName) {         if(null == floaderName || null == fileName){             System.err.println("文件夹或文件名为空!");             return;         }         File root = new File(LOG_FLOADER);         try{             if(!root.isDirectory()){                 if(!root.mkdir()){                     if(!root.mkdir()){//多次创建失败,返回系统退出                         System.err.println("无法创建日志文件的根目录:"+LOG_FLOADER+"/。程序退出!");                         System.exit(0);                     }                 }             }         }catch(SecurityException  e){             System.err.println("创建日志文件出错(权限不足)."+e.getMessage());              System.err.println("程序退出!");             System.exit(0);         }         File floader = new File(LOG_FLOADER+"/"+floaderName);         if(root.isDirectory()){//root目录创建成功,创建yyyy-MM-dd文件夹             if(!floader.isDirectory()){                 try{                     if(!floader.mkdir()){                         if(!floader.mkdir()){                             System.err.println("无法创建日志文件夹:"+LOG_FLOADER+"/"+floaderName+"/。程序退出!");                             System.exit(0);                         }                     }                 }catch(SecurityException  e){                     System.err.println("创建日志文件夹出错(权限不足)."+e.getMessage());                      System.err.println("程序退出!");                     System.exit(0);                 }             }         }         //文件夹创建成功则创建文件         File file = new File(LOG_FLOADER+"/"+floaderName+"/"+fileName);         if(floader.isDirectory()){             if(!file.isFile()){//文件不存在                 try{                     if(!file.createNewFile()){                         if(!file.createNewFile()){                             System.err.println("无法创建日志文件:"+LOG_FLOADER+"/"+floaderName+"/。程序退出!");                             System.exit(0);                         }                     }                 }catch(SecurityException  e){                     System.err.println("创建日志文件出错(权限不足)."+e.getMessage());                      System.err.println("程序退出!");                     System.exit(0);                 } catch (IOException e) {                     System.err.println("创建日志文件出错."+e.getMessage());                      System.err.println("程序退出!");                     System.exit(0);                 }                              }         }         if(file.exists()){             return ;         }     }     /**      * 判断文件是否存在      * @param dirName 文件夹名      * @param fileName 文件名      * @return 都存在则返回true,否则返回false      */     private boolean checkFile(String dirName, String fileName) {         File directory = new File(LOG_FLOADER+"/"+dirName);         if(directory.isDirectory()){//文件加存在             //判断文件是否存在             File file = new File(LOG_FLOADER+"/"+dirName+"/"+fileName);             if(file.isFile()){                 return true;             }         }         return false;     }     /**      * 记录普通的信息日志到普通日志文件下.日志文件格式为:yyyy-MM-dd-INFRO.txt      * @param log 日志信息      */     public  void info(String log){         String dirName = getFloaderName("yyyy-MM-dd");         String fileName = getFileName("yyyy-MM-dd")+"-INFRO.txt";         String sf = String.format("[%tT] %s-%s %s ", new Date(),Thread.currentThread().getName(),"INFO",log);         try {             log(sf,dirName,fileName,INFO);         } catch (IOException e) {             System.err.println("INFO模式写文件失败."+e.getMessage()+":"+e.getCause());         }     }     /**      * 记录普通日志      * @param log 日志信息      * @param e 异常信息类      */     public  void info(String log,Throwable e){         log += "."+e.getMessage()+":"+e.getCause();         info(log);     }          public  void warn(String log){         String dirName = getFloaderName("yyyy-MM-dd");         String fileName = getFileName("yyyy-MM-dd")+"-WARN.txt";         String sf = String.format("[%tT] %s-%s %s ", new Date(),Thread.currentThread().getName(),"WARN",log);         try {             log(sf,dirName,fileName,WARN);         } catch (IOException e) {             System.err.println("WARN模式写文件失败."+e.getMessage()+":"+e.getCause());         }     }     /**      * 记录警告级别日志      * @param log      * @param e      */     public  void warn(String log,Throwable e){         log += "."+e.getMessage()+":"+e.getCause();         warn(log);     }     /**      * 记录错误级别日志      * @param log      */     public  void error(String log){         String dirName = getFloaderName("yyyy-MM-dd");         String fileName = getFileName("yyyy-MM-dd")+"-ERROR.txt";         String sf = String.format("[%tT] %s-%s %s ", new Date(),Thread.currentThread().getName(),"ERROR",log);         try {             log(sf,dirName,fileName,ERROR);         } catch (IOException e) {             System.err.println("ERROR模式写文件失败."+e.getMessage()+":"+e.getCause());         }     }          public  void error(String log,Throwable e){         log += "."+e.getMessage()+":"+e.getCause();         error(log);     }          public  void debug(String log){         String dirName = getFloaderName("yyyy-MM-dd");         String fileName = getFileName("yyyy-MM-dd")+"-DEBUG.txt";         String sf = String.format("[%tT] %s-%s %s ", new Date(),Thread.currentThread().getName(),"DEBUG",log);         try {             log(sf,dirName,fileName,DEBUG);         } catch (IOException e) {             System.err.println("DEBUG模式写文件失败."+e.getMessage()+":"+e.getCause());         }     }          public  void debug(String log,Throwable e){         log += "."+e.getMessage()+":"+e.getCause();         debug(log);     }               /**      * 获取制定格式的文件夹名字      * @param string 日期格式,必须符合JAVA规范      * @return      */     public   synchronized String getFloaderName(String string) {         try{             SimpleDateFormat sf = new SimpleDateFormat(string);             Date date = new Date();             return sf.format(date);         }catch(IllegalArgumentException e){             System.err.println("不符合JAVA规范的参数!采取默认参数格式:yyyy-MM-dd");             getFloaderName("yyyy-MM-dd");         }         return null;     }     /**      * 获取文件名字      * @param string 日期格式,必须符合JAVA规范      * @return      */     public  synchronized String getFileName(String string) {         try{             SimpleDateFormat sf = new SimpleDateFormat(string);             Date date = new Date();             return sf.format(date);         }catch(IllegalArgumentException e){             System.err.println("不符合JAVA规范的参数!采取默认参数格式:yyyy-MM-dd");             getFloaderName("yyyy-MM-dd");         }         return null;     } }

调用类

public  class TestLog {

    private static final Log logger = Log.getLogger();
    
    public void testLog(){
        logger.info("测试打印日志");
    }
}


 

 

你可能感兴趣的:(工作总结)