【发布时间】:2013-11-05 16:04:37
【问题描述】:
我计划在 Android 中为与安全相关的消息实现日志记录机制。我希望能够在 Android 源代码中使用它,例如 Log 类,例如SecuLog.log(String msg);
与普通Log有以下不同
- 没有 DEBUG、INFO 等级别...
- 输出应直接进入设备上的 File。例如,一定不需要重定向 Logcat 输出。
由于多个进程应该能够记录与安全相关的消息,因此我在 com.android.util 中使用静态 PrintWriter 实现 LoggingClass 失败了。
static {
try {
writer = new PrintWriter("data/secu.log");
} catch (FileNotFoundException e) {
Log.e(TAG, "Exception initializing SecuLog.", e);
}
}
这不起作用,因为 Android 旨在运行多个 dalvik-VM,它们都尝试访问给定文件。所以我需要某种非阻塞文件 I/O。
有没有一种方法可以重用 Android 中的任何日志记录机制而无需显式重定向 logcat 输出?
我怎样才能实现一个简单的文件记录机制,可以从其他进程调用?我应该实现一个日志记录Service吗?此服务必须是绑定服务还是已启动服务?我必须使用AIDL吗?
【问题讨论】:
-
您要记录的究竟是什么,您自己的应用程序或设备上的所有应用程序?应该只将您发送到
YourLogger.log(...)的日志消息记录到文件中,还是应该让记录器能够“捕获”来自其他地方的日志消息? -
我想从 所有 应用程序中记录,并且只记录来自 MyLogger.log(...) 的消息。
-
来自“所有”应用程序,仅在您编写的应用程序中添加
MyLogger.log(...)到?您希望所有日志消息都转到同一个文件,还是可以是不同的文件? -
我希望能够
import MyLogger并在 Android 源代码的每个 .java 文件中使用其日志记录方法,就像使用普通 Log 类一样。输出应进入一个文件。 -
这可能比你想象的要困难得多;每个应用程序都有一个独特的日志,以及一个收集和组装所有日志并按时间戳排序的查看工具怎么样?