/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.exchange.utility; import android.content.Context; import android.os.Environment; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; public class FileLogger { private static FileLogger LOGGER = null; private static FileWriter sLogWriter = null; public static String LOG_FILE_NAME = Environment.getExternalStorageDirectory() + "/emaillog.txt"; public synchronized static FileLogger getLogger (Context c) { LOGGER = new FileLogger(); return LOGGER; } private FileLogger() { try { sLogWriter = new FileWriter(LOG_FILE_NAME, true); } catch (IOException e) { // Doesn't matter } } static public synchronized void close() { if (sLogWriter != null) { try { sLogWriter.close(); } catch (IOException e) { // Doesn't matter } sLogWriter = null; } } static public synchronized void log(Exception e) { if (sLogWriter != null) { log("Exception", "Stack trace follows..."); PrintWriter pw = new PrintWriter(sLogWriter); e.printStackTrace(pw); pw.flush(); } } @SuppressWarnings("deprecation") static public synchronized void log(String prefix, String str) { if (LOGGER == null) { LOGGER = new FileLogger(); log("Logger", "\r\n\r\n --- New Log ---"); } Date d = new Date(); int hr = d.getHours(); int min = d.getMinutes(); int sec = d.getSeconds(); // I don't use DateFormat here because (in my experience), it's much slower StringBuffer sb = new StringBuffer(256); sb.append('['); sb.append(hr); sb.append(':'); if (min < 10) sb.append('0'); sb.append(min); sb.append(':'); if (sec < 10) { sb.append('0'); } sb.append(sec); sb.append("] "); if (prefix != null) { sb.append(prefix); sb.append("| "); } sb.append(str); sb.append("\r\n"); String s = sb.toString(); if (sLogWriter != null) { try { sLogWriter.write(s); sLogWriter.flush(); } catch (IOException e) { // Something might have happened to the sdcard if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { // If the card is mounted and we can create the writer, retry LOGGER = new FileLogger(); if (sLogWriter != null) { try { log("FileLogger", "Exception writing log; recreating..."); log(prefix, str); } catch (Exception e1) { // Nothing to do at this point } } } } } } }