首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行android应用程序时将消息放入日志文件

在运行android应用程序时将消息放入日志文件
EN

Stack Overflow用户
提问于 2014-10-23 14:41:57
回答 1查看 64关注 0票数 0

我有一份申请。我想在SD卡中创建一个日志文件,同时启动我的安卓应用程序,并想写入错误,警告,信息到file.How它可以做到吗?如果有人知道请帮帮我..

EN

回答 1

Stack Overflow用户

发布于 2014-10-23 15:15:14

我是这样做的:你可以把这段代码放到start活动或应用程序类中

代码语言:javascript
复制
final String filePath = mediaFileService.getExternalCrashDir()
            + "LOG" + new Date().toString() + ".txt";
Runtime.getRuntime().exec(new String[]{
                "logcat", "-f", filePath, "ActivityManager:I", "LOG" + ":V",
                "*:S"
        });

创建特定的日志类并将其用于日志记录

代码语言:javascript
复制
public class L {

interface Logger {
    public int print(String tag, String msg);
}

private static final int MAX_STRING_SIZE = 2000;
private static final Logger verboseLogger = new Logger() {
    @Override
    public int print(final String tag, final String msg) {
        return Log.v(tag, msg);
    }
};
private static final Logger debugLogger = new Logger() {
    @Override
    public int print(final String tag, final String msg) {
        return Log.d(tag, msg);
    }
};
private static final Logger infoLogger = new Logger() {
    @Override
    public int print(final String tag, final String msg) {
        return Log.i(tag, msg);
    }
};
private static final Logger warnLogger = new Logger() {
    @Override
    public int print(final String tag, final String msg) {
        return Log.w(tag, msg);
    }
};
private static final Logger errorLogger = new Logger() {
    @Override
    public int print(final String tag, final String msg) {
        return Log.w(tag, msg);
    }
};

private static void printWithLogger(String s, Logger l) {
    if (s.length() > MAX_STRING_SIZE || s.contains("\n")) {
        long stringId = Math.abs(UUID.randomUUID().getMostSignificantBits());
        ArrayList<String> lines = new ArrayList<String>();
        for (String innerLine : s.split("\n")) {
            int aCursor = 0;
            while (innerLine.length() - aCursor >= MAX_STRING_SIZE) {
                lines.add(innerLine.substring(aCursor, aCursor + MAX_STRING_SIZE));
                aCursor += MAX_STRING_SIZE;
            }
            lines.add(innerLine.substring(aCursor));
        }
        int totalPartsCount = lines.size();
        for (int i = 1; i <= lines.size(); i++) {
            l.print("LOG", String.format("LongString_%s[%d/%d] %s", stringId, i, totalPartsCount,
                    lines.get(i - 1)));
        }
    } else {
        l.print("LOG", s);
    }
}

private static String format(String tag, String msg) {
    if (tag != null && tag.length() > 0) {
        return tag + " " + msg;
    } else {
        return msg;
    }
}

public static void v(String tag, String msg) {
    printWithLogger(format(tag, msg), verboseLogger);
}

public static void v(String tag, String msg, Throwable tr) {
    printWithLogger(format(tag, msg), verboseLogger);
    printWithLogger(Log.getStackTraceString(tr), verboseLogger);
}

public static void d(String tag, String msg) {
    printWithLogger(format(tag, msg), debugLogger);
}

public static void d(String tag, String msg, Throwable tr) {
    printWithLogger(format(tag, msg), debugLogger);
    printWithLogger(Log.getStackTraceString(tr), debugLogger);
}

public static void i(String tag, String msg) {
    printWithLogger(format(tag, msg), infoLogger);
}

public static void i(String tag, String msg, Throwable tr) {
    printWithLogger(format(tag, msg), infoLogger);
    printWithLogger(Log.getStackTraceString(tr), infoLogger);
}

public static void w(String tag, String msg) {
    printWithLogger(format(tag, msg), warnLogger);
}

public static void w(String tag, String msg, Throwable tr) {
    printWithLogger(format(tag, msg), warnLogger);
    printWithLogger(Log.getStackTraceString(tr), warnLogger);
}

public static void w(String tag, Throwable tr) {
    printWithLogger(Log.getStackTraceString(tr), warnLogger);
}

public static void e(String tag, String msg) {
    printWithLogger(format(tag, msg), errorLogger);
}

public static void e(String tag, String msg, Throwable tr) {
    printWithLogger(format(tag, msg), errorLogger);
    printWithLogger(Log.getStackTraceString(tr), errorLogger);
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26522560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档