import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
 
import org.apache.commons.lang3.time.DateFormatUtils;
 
import android.os.Environment;
import android.util.Log;
 
public class Logger {
        private static int LOGLEVEL = 6;
        private static int VERBISE = 1;
        private static int DEBUG = 2;
        private static int INFO = 3;
        private static int WARN = 4;
        private static int ERROR = 5;
 
        // 根据需要将Log存放到SD卡中
        private static String path;
        private static File file;
        private static FileOutputStream outputStream;
        private static String pattern = "yyyy-MM-dd HH:mm:ss";
 
        static {
                if (Utils.checkSD()) {
                        File externalStorageDirectory = Environment
                                        .getExternalStorageDirectory();
                        path = externalStorageDirectory.getAbsolutePath() + "/Log/";
                        File directory = new File(path);
                        if (!directory.exists()) {
                                directory.mkdirs();
                        }
                        file = new File(new File(path), "Log.txt");
                        try {
                                outputStream = new FileOutputStream(file, true);
                        } catch (FileNotFoundException e) {
                                e.printStackTrace();
                        }
                }
        }
 
        public static void v(String tag, String msg) {
                if (LOGLEVEL > VERBISE) {
                        Log.v(tag, msg);
                }
        }
 
        public static void d(String tag, String msg) {
                if (LOGLEVEL > DEBUG) {
                        Log.d(tag, msg);
                }
        }
 
        public static void i(String tag, String msg) {
                if (LOGLEVEL > INFO) {
                        Log.i(tag, msg);
                }
        }
 
        public static void w(String tag, String msg) {
                if (LOGLEVEL > WARN) {
                        Log.w(tag, msg);
                }
        }
 
        public static void e(String tag, String msg) {
                if (LOGLEVEL > ERROR) {
                        Log.e(tag, msg);
                }
        }
 
        /**
         * 将错误信息保存到SD卡中去!可选的操作!
         *
         * @param msg
         * 传递的String类型
         */
        public static void save2Sd(String msg) {
                Date date = new Date();
                String time = DateFormatUtils.format(date, pattern);
                save(time, msg);
        }
 
        /**
         * 将错误信息保存到SD卡中去!可选的操作!
         *
         * @param e
         * 传递的是Exception类型
         */
        public static void save2Sd(Exception e) {
                Date date = new Date();
                String time = DateFormatUtils.format(date, pattern);
                StringWriter writer = new StringWriter();
                PrintWriter pw = new PrintWriter(writer);
                e.printStackTrace(pw);
                String msg = writer.toString();
                save(time, msg);
        }
 
        /**
         * 保存的核心方法
         * @param time 保存的时间
         * @param msg 保存的信息
         */
        private static void save(String time, String msg) {
                if (Utils.checkSD()) {
                        if (outputStream != null) {
                                try {
                                        outputStream.write(time.getBytes());
                                        outputStream.write("\r\n".getBytes());
                                        outputStream.write(msg.getBytes());
                                        outputStream.write("\r\n".getBytes());
                                        outputStream.flush();
                                } catch (IOException ex) {
                                        ex.printStackTrace();
                                }
                        } else {
                                android.util.Log.i("SDCAEDTAG", "file is null");
                        }
                }
        }
}