Log日志存放到本地文件

1.建一个写入文件的工具类

public class LogToFile {

    private static String TAG = "LogToFile";

    private static String logPath = null;//log日志存放路径
    private static String fileName = null;


    private static Date date = new Date();//因为log日志是使用日期命名的,使用静态成员变量主要是为了在整个程序运行期间只存在一个.log文件中;

    /**
     * 初始化,须在使用之前设置,最好在Application创建时调用
     *
     * @param context
     */
    public static void init(Context context) {
        logPath = getFilePath(context) + "/Logs";//获得文件储存路径,在后面加"/Logs"建立子文件夹
        fileName = logPath + "/log_" + StringUtils.getDate() + ".txt";//log日志名,使用时间命名,保证不重复
        File path = new File(logPath);
        if (!path.exists()) {
            path.mkdirs();
        }
        try {

            File file = new File(fileName);
            if (fileName.contains(StringUtils.getDate())) {
                if (file.exists()) {
                    FileWriter fileWriter = new FileWriter(file, true);
                    fileWriter.write("");
                    fileWriter.flush();
                    fileWriter.close();
                }
            } else {
                if (file.exists()) {
                    FileWriter fileWriter = new FileWriter(file);
                    fileWriter.write("");
                    fileWriter.flush();
                    fileWriter.close();
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获得文件存储路径
     *
     * @return
     */
    private static String getFilePath(Context context) {

        if (Environment.MEDIA_MOUNTED.equals(Environment.MEDIA_MOUNTED) || !Environment.isExternalStorageRemovable()) {//如果外部储存可用
            return context.getExternalFilesDir(null).getPath();//获得外部存储路径,默认路径为 /storage/emulated/0/Android/data/包名/files/Logs/log_日期
        } else {
            return context.getFilesDir().getPath();//直接存在/data/data里,非root手机是看不到的
        }
    }

    private static final char VERBOSE = 'v';

    private static final char DEBUG = 'd';

    private static final char INFO = 'i';

    private static final char WARN = 'w';

    private static final char ERROR = 'e';

    public static void v(String tag, String msg) {
        writeToFile(VERBOSE, tag, msg);
    }

    public static void d(String tag, String msg) {
        writeToFile(DEBUG, tag, msg);
    }

    public static void i(String tag, String msg) {
        writeToFile(INFO, tag, msg);
    }

    public static void w(String tag, String msg) {
        writeToFile(WARN, tag, msg);
    }

    public static void e(String tag, String msg) {
        writeToFile(ERROR, tag, msg);
    }

    /**
     * 将log信息写入文件中
     *
     * @param type
     * @param tag
     * @param msg
     */
    private static void writeToFile(char type, String tag, String msg) {

        if (null == logPath) {

            return;
        }

        String log =StringUtils.getDate()+" "+msg+"\n";//log日志内容,可以自行定制

        FileOutputStream fos = null;//FileOutputStream会自动调用底层的close()方法,不用关闭
        BufferedWriter bw = null;
        try {

            fos = new FileOutputStream(fileName, true);//这里的第二个参数代表追加还是覆盖,true为追加,flase为覆盖
            bw = new BufferedWriter(new OutputStreamWriter(fos));
            bw.write(log);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bw != null) {
                    bw.close();//关闭缓冲流
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

2.//初始化log日志
LogToFile.init(getApplicationContext());
3. //调用保存log方法
LogToFile.d(TAG,i+"");
4.用到的工具类

public class StringUtils {
    /**
     * 返回当前日期
     */
    public static String getDate() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
        String str = formatter.format(curDate);
        return str;
    }
}

另外收集崩溃日志

//记录崩溃信息
final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        //获取崩溃时的UNIX时间戳
        long timeMillis = System.currentTimeMillis();
        //将时间戳转换成人类能看懂的格式,建立一个String拼接器
        StringBuilder stringBuilder = new StringBuilder(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date(timeMillis)));
        stringBuilder.append(":\n");
        //获取错误信息
        stringBuilder.append(throwable.getMessage());
        stringBuilder.append("\n");
        //获取堆栈信息
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        throwable.printStackTrace(pw);
        stringBuilder.append(sw.toString());

        //这就是完整的错误信息了,你可以拿来上传服务器,或者做成本地文件保存等等等等
        String errorLog = stringBuilder.toString();

        String s = toUtf8(errorLog);
        LogToFile.d("TAG", s);
        //最后如何处理这个崩溃,这里使用默认的处理方式让APP停止运行
        defaultHandler.uncaughtException(thread, throwable);
    }
});
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
impdp是Oracle数据库的一个导入工具,用于将数据从一个数据库导入到另一个数据库。下面是使用impdp将本地数据导入到远程数据库的步骤: 1. 在目标数据库服务器上创建一个目录,用于存放导入数据的文件。可以使用以下命令在Oracle数据库中创建目录: CREATE DIRECTORY dir_name AS '/path/to/directory'; 2. 将本地导出的数据文件复制到目标数据库服务器的导入目录下。可以使用文件传输工具如scp或者ftp来完成文件的复制。 3. 在目标数据库服务器上启动一个终端会话,并登录到目标数据库的命令行或者SQL*Plus。 4. 使用impdp命令来执行导入操作。以下是导入命令的基本语法: impdp username/password@remote_connect_string directory=dir_name dumpfile=dumpfile_name logfile=log_file_name 其中: - username/password是目标数据库的用户名和密码; - remote_connect_string是目标数据库的连接字符串,可以是Oracle Net服务名或TNS描述符; - directory是导入目录的名称,即第一步中创建的目录名称; - dumpfile是导入数据的文件名称; - logfile是导入日志文件名称。 5. 执行导入命令后,impdp将会连接到目标数据库,读取导入数据文件,并将数据导入到数据库中。导入过程中的详细信息会记录在导入日志文件中。 以上是使用impdp将本地数据导入到远程数据库的基本步骤。根据实际情况,在导入命令中可以使用其他参数来调整导入的行为,如排除特定对象、并行导入等。可以参考相关文档或者使用 impdp help=y 命令来获取更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值