首页 > 代码库 > 通用的日志记录器(java)

通用的日志记录器(java)

线程安全的java日志记录器

 

 

  1 import java.io.BufferedWriter;
  2 import java.io.File;
  3 import java.io.FileWriter;
  4 import java.io.IOException;
  5 import java.text.SimpleDateFormat;
  6 import java.util.Date;
  7 import java.util.concurrent.atomic.AtomicReference;
  8 
  9 
 10 
 11 /**
 12  * 
 13  * @author zhangshuang
 14  *
 15  */
 16 public class SyncFile {
 17     private static String FILENAME ="";
 18     
 19     private static String FILEDIR="";
 20     
 21     private static final AtomicReference<SyncFile> instance = new AtomicReference<SyncFile>();
 22     
 23     private String currentDate = SyncFile.getCurrentDate();
 24     
 25     private File file = null;
 26     
 27     private FileWriter fw = null;
 28     
 29     private BufferedWriter bw = null;
 30     
 31     private SyncFile(String dir, String name) {
 32         SyncFile.FILEDIR = dir;
 33         SyncFile.FILENAME = name ;
 34         while(dir.endsWith("/")) {
 35             dir = dir.substring(0, dir.length() - 1);
 36         }
 37         mkDir(dir);
 38         String filePath = dir + "/" + name + "." + currentDate ;
 39         file = new File(filePath);
 40         try {
 41             if(!file . exists()) {
 42                 file.createNewFile();
 43             }
 44             fw = new FileWriter(file, true);
 45             bw = new BufferedWriter(fw);
 46         } catch (Exception e) {
 47             e.printStackTrace();
 48         }
 49         
 50     }
 51     
 52     public static SyncFile getInstance(String dir, String name) {
 53         if( instance .get() == null ) {
 54             instance .compareAndSet(null, new SyncFile(dir, name));
 55         }
 56         return instance.get();
 57     }
 58     
 59     public static SyncFile getInstance() {
 60         if( instance .get() == null ) {
 61             instance.compareAndSet(null, new SyncFile(FILEDIR, FILENAME));
 62         }
 63         return instance.get();
 64     }
 65     
 66     public synchronized void write (String line) {
 67         openBuffer() ;
 68         
 69         line = line.endsWith("\n") ? line : line + "\n"; 
 70         try {
 71             if(line != null && line.trim() != ""){
 72                 bw.write(line);
 73                 bw.flush();
 74             }
 75         } catch (IOException e) {
 76             e.printStackTrace();
 77         } 
 78     }
 79     
 80     private static void mkDir( String dir) {
 81         File file = new File(dir);
 82         mkDir(file);
 83     }
 84     
 85     /**
 86      * <p>递归创建不存在的目录
 87      * @param file
 88      */
 89     private static void mkDir(File file){
 90         if(file.getParentFile().exists()){
 91             file.mkdir();
 92         }else{
 93             mkDir(file.getParentFile());
 94             file.mkdir();
 95         }
 96     }
 97     
 98     public static String getCurrentDate() {
 99         return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
100     }
101     
102     private void openBuffer() {
103         
104         if(!currentDate.equals(SyncFile.getCurrentDate()) || fw == null ||bw == null) {
105             if (!currentDate.equals(SyncFile.getCurrentDate())){
106                 currentDate = SyncFile.getCurrentDate();
107                 file = new File(FILEDIR + "/" + FILENAME + "." + currentDate);
108             }
109             close ();
110             try {
111                 fw = new FileWriter(file , true);
112                 bw = new BufferedWriter(fw);
113             } catch (IOException e) {
114                 e.printStackTrace();
115             }
116         }
117         
118     }
119     
120     public void close() {
121         try {
122             if (bw != null) {
123                 bw.close();
124                 bw = null;
125             }
126                 
127             if (fw != null) {
128                 fw.close();
129                 fw = null;
130             }
131         } catch (IOException e) {
132             e.printStackTrace();
133         }
134     }
135     
136     public static void main(String[] args) {
137 //        String a = "/data/logs/////";
138 //        while (a.endsWith("/")) {
139 //            a = a.substring(0 , a.length()-1);
140 //            System.out.println(a);
141 //        }
142 //        System.out.println("ok" + a);
143         mkDir("c:/2");
144     }
145     
146     
147 }