将android logcat输出到sd卡

我想实现以下目标,但到目前为止,没有运气

>当android应用程序首次启动时,在SD卡中打开一个文件.
>将logcat输出流式传输到文件.
>当应用程序退出时,停止logcat流式传输.

在我的ApplicationClass中扩展了Application onCreate()方法,我这样做了

wwLogManager.openLogFile();

这是openLogFile()中的代码

private static final String LOGCAT_COMMAND = "logcat -v time -f ";
        String timestamp = Long.toString(System.currentTimeMillis());
        String logFileName = BuildConstants.LOG_LOCATION + "_" + timestamp + ".log";                    
        mLogFile = new File(Environment.getExternalStorageDirectory() + logFileName);
        mLogFile.createNewFile();
        String cmd = LOGCAT_COMMAND + mLogFile.getAbsolutePath();
        Runtime.getRuntime().exec(cmd);

我确实在SD卡中获取了日志文件,但这些文件中的日志输出没有我在活动中放置的Log.i()调用的任何痕迹.我在这里使用的logcat命令是否正确?谢谢!

解决方法

如果我误解了你的目标,我很抱歉,但也许你可以使用 java.util.logging API而不是使用Logcat或Android Logging机制.

与Android日志记录API一样,java.util.logging API允许您轻松地在各种级别记录消息,例如FINE,FINER,WARN,SEVERE等.

但标准日志记录API也具有其他优势.例如,您可以使用FileHandler轻松创建日志文件.事实上,FileHandler具有内置的日志轮换机制,因此您不必担心(如此多)清理日志文件.您还可以创建Loggers的层次结构;因此,例如,如果您有两个Logger,com.example.foo和com.example.foo.bar,则更改前者的日志记录级别也会更改后者的日志记录级别.如果在不同的类中创建两个Logger,这甚至可以工作!此外,通过指定日志记录配置文件,可以在运行时更改日志记录行为最后,您可以通过实现自己的Formatter自定义日志的格式(或者只使用SimpleFormatter来避免使用认的XML格式).

要使用标准日志记录API,您可以尝试以下方法

// Logger logger is an instance variable
    // FileHandler logHandler is an instance variable

    try {
        String logDirectory =
            Environment.getExternalStorageDirectory() + "/log_directory";

        // the %g is the number of the current log in the rotation
        String logFileName = logDirectory + "/logfile_base_name_%g.log";

        // ...
        // make sure that the log directory exists,or the next command will fail
        // 

        // create a log file at the specified location that is capped 100kB.  Keep up to 5 logs.
        logHandler = new FileHandler(logFileName,100 * 1024,5);
        // use a text-based format instead of the default XML-based format
        logHandler.setFormatter(new SimpleFormatter());
        // get the actual Logger
        logger = Logger.getLogger("com.example.foo");
        // Log to the file by associating the FileHandler with the log
        logger.addHandler(logHandler);
    }
    catch (IOException ioe) {
        // do something wise
    }

    // examples of using the logger
    logger.finest("This message is only logged at the finest level (lowest/most-verbose level)");
    logger.config("This is an config-level message (middle level)");
    logger.severe("This is a severe-level message (highest/least-verbose level)");

Android日志记录机制当然简单方便.但是,它不是可定制的,并且必须使用标记进行日志过滤,这很容易变得难以处理.通过使用java.uitl.logging API,您可以避免处理大量标记,但可以轻松地将日志文件限制为应用程序的特定部分,从而更好地控制日志的位置和外观,甚至可以在运行时自定义日志记录行为.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...