注意包名,就知道我把这个类放在哪里了
LogManager.java
package android.os;
import java.io.File;
import android.os.Environment;
/**
* add by TrillGates
*/
public class LogManager  {
	
	private static final String MAIN_DIR = Environment.getExternalStorageDirectory() + "/sob/power/LogUtil";
	private static final String LOG_FILE = MAIN_DIR + "/log.txt";
	
    private static volatile LogManager mInstance;
    private String logFilePath = null;
    private LogManager() {
		init(LOG_FILE);
    }
    public static LogManager getInstance() {
        if (mInstance == null) {
            synchronized (LogManager.class) {
                if (mInstance == null) {
                    mInstance = new LogManager();
                }
            }
        }
        return mInstance;
    }
    public void init(String logFilePath) {
		if(this.logFilePath==null){
			this.logFilePath = logFilePath;
			createLogFile();
		}
    }
    private boolean createLogFile() {
        boolean ret = false;
        File file = new File(logFilePath);
        try {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            ret = file.createNewFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret;
    }
    String getLogFilePath() {
        return logFilePath;
    }
}
LogUtil.java
package android.os;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Properties;
/**
* add by TrillGates
*/
public class LogUtil {
    private static final int VERBOSE = 0;
    private static final int DEBUG = 1;
    private static final int INFO = 2;
    private static final int WARNING = 3;
    private static final int ERROR = 4;
    private static final int NO_LOG = 5;
    private static final String LOG_FILE = LogManager.getInstance().getLogFilePath();
    private static LogUtil mInstance = null;
    private static int LOG_LEVEL = VERBOSE;
    private static boolean logFileEnable = true;
    private static LogUtil getInstance() {
        if (mInstance == null) {
            synchronized (LogUtil.class) {
                if (mInstance == null) {
                    mInstance = new LogUtil();
                }
            }
        }
        return mInstance;
    }
    // verbose
    public static void v(String tag, String msg) {
        if (VERBOSE < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        Log.v(tag, msg);
        write("VERBOSE", getInstance().getPrefixName(), msg);
    }
    public static void v(String msg) {
        if (DEBUG < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        v(getInstance().getPrefixName(), msg);
    }
    // debug
    public static void d(String tag, String msg) {
        if (DEBUG < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        Log.d(tag, msg);
        write("DEBUG", getInstance().getPrefixName(), msg);
    }
    public static void d(String msg) {
        if (DEBUG < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        d(getInstance().getPrefixName(), msg);
    }
    // info
    public static void i(String tag, String msg) {
        if (INFO < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        Log.i(tag, msg);
        write("INFO", getInstance().getPrefixName(), msg);
    }
    public static void i(String msg) {
        if (DEBUG < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        i(getInstance().getPrefixName(), msg);
    }
    // warning
    public static void w(String tag, String msg) {
        if (WARNING < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        Log.w(tag, msg);
        write("WARNING", getInstance().getPrefixName(), msg);
    }
    public static void w(String msg) {
        if (DEBUG < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        w(getInstance().getPrefixName(), msg);
    }
    public static void w(String tag, String msg, Throwable tr) {
        if (WARNING < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        Log.w(tag, msg, tr);
        write("WARNING", getInstance().getPrefixName(), msg);
    }
    // error
    public static void e(String tag, String msg) {
        if (ERROR < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        Log.e(tag, msg);
        write("ERROR", getInstance().getPrefixName(), msg);
    }
    public static void e(String msg) {
        if (DEBUG < LOG_LEVEL)
            return;
        if (msg == null)
            return;
        e(getInstance().getPrefixName(), msg);
    }
    /**
     * 写到文件中的log的前缀,如果因为混淆之类的原因而取不到,就返回"[ minify ]"
     *
     * @return prefix
     */
    private String getPrefixName() {
        StackTraceElement[] sts = Thread.currentThread().getStackTrace();
        if (sts == null || sts.length == 0) {
            return "[ minify ]";
        }
        try {
            for (StackTraceElement st : sts) {
                if (st.isNativeMethod()) {
                    continue;
                }
                if (st.getClassName().equals(Thread.class.getName())) {
                    continue;
                }
                if (st.getClassName().equals(this.getClass().getName())) {
                    continue;
                }
                if (st.getFileName() != null) {
                    return "[ " + Thread.currentThread().getName() +
                            ": " + st.getFileName() + ":" + st.getLineNumber() +
                            " " + st.getMethodName() + " ]";
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "[ minify ]";
    }
    /**
     * 追加文件:使用FileWriter
     *
     * @param level   等级
     * @param prefix  前缀
     * @param content 内容
     */
    private static void write(String level, String prefix, String content) {
        if (!logFileEnable)
            return;
        try {
            // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
            FileWriter writer = new FileWriter(LOG_FILE, true);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
            String time = sdf.format(new Date());
            writer.write(time + ": " + level + "/" + prefix + ": " + content + "\n");
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
以上代码,来自网络,稍加修改即可变成适合自己使用的。
使用方式:
直接初始化出输出Log的路径
LogManager.getInstance();
LogUtils里的输出路径是通过这个获取的
String LOG_FILE = LogManager.getInstance().getLogFilePath();
所以,这样子就可以输出到指定的文件上了。
LogUtils直接使用即可。
注意导包,详情使用,请查看我们的AOSP视频课程。



 拉大锯  回复 @断点-含光君
 拉大锯  回复 @断点-含光君 




























