• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.exchange.utility;
18 
19 import android.os.Environment;
20 
21 import java.io.FileWriter;
22 import java.io.IOException;
23 import java.io.PrintWriter;
24 import java.util.Date;
25 
26 public class FileLogger {
27     private static FileLogger LOGGER = null;
28     private static FileWriter sLogWriter = null;
29     public static String LOG_FILE_NAME =
30         Environment.getExternalStorageDirectory() + "/emaillog.txt";
31 
getLogger()32     public synchronized static FileLogger getLogger() {
33         LOGGER = new FileLogger();
34         return LOGGER;
35     }
36 
FileLogger()37     private FileLogger() {
38         try {
39             sLogWriter = new FileWriter(LOG_FILE_NAME, true);
40         } catch (IOException e) {
41             // Doesn't matter
42         }
43     }
44 
close()45     static public synchronized void close() {
46         if (sLogWriter != null) {
47             try {
48                 sLogWriter.close();
49             } catch (IOException e) {
50                 // Doesn't matter
51             }
52             sLogWriter = null;
53         }
54     }
55 
log(Exception e)56     static public synchronized void log(Exception e) {
57         if (sLogWriter != null) {
58             log("Exception", "Stack trace follows...");
59             PrintWriter pw = new PrintWriter(sLogWriter);
60             e.printStackTrace(pw);
61             pw.flush();
62         }
63     }
64 
65     @SuppressWarnings("deprecation")
log(String prefix, String str)66     static public synchronized void log(String prefix, String str) {
67         if (LOGGER == null) {
68             LOGGER = new FileLogger();
69             log("Logger", "\r\n\r\n --- New Log ---");
70         }
71         Date d = new Date();
72         int hr = d.getHours();
73         int min = d.getMinutes();
74         int sec = d.getSeconds();
75 
76         // I don't use DateFormat here because (in my experience), it's much slower
77         StringBuffer sb = new StringBuffer(256);
78         sb.append('[');
79         sb.append(hr);
80         sb.append(':');
81         if (min < 10)
82             sb.append('0');
83         sb.append(min);
84         sb.append(':');
85         if (sec < 10) {
86             sb.append('0');
87         }
88         sb.append(sec);
89         sb.append("] ");
90         if (prefix != null) {
91             sb.append(prefix);
92             sb.append("| ");
93         }
94         sb.append(str);
95         sb.append("\r\n");
96         String s = sb.toString();
97 
98         if (sLogWriter != null) {
99             try {
100                 sLogWriter.write(s);
101                 sLogWriter.flush();
102             } catch (IOException e) {
103                 // Something might have happened to the sdcard
104                 if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
105                     // If the card is mounted and we can create the writer, retry
106                     LOGGER = new FileLogger();
107                     if (sLogWriter != null) {
108                         try {
109                             log("FileLogger", "Exception writing log; recreating...");
110                             log(prefix, str);
111                         } catch (Exception e1) {
112                             // Nothing to do at this point
113                         }
114                     }
115                 }
116             }
117         }
118     }
119 }
120