gpt4 book ai didi

android - Logback-android 和 ACRA

转载 作者:太空狗 更新时间:2023-10-29 15:15:09 28 4
gpt4 key购买 nike

我正在尝试设置我的应用程序,以便我可以使用 logback-android 写入日志,然后使用 ACRA 将它们发送到 Google 文档.我认为这是可能的,但我遇到的一个问题是在何处写入日志。

这两个库都需要一个硬编码的文件名,所以我不能使用 getStorageDirectory()。所以,我的第一个问题是,如果不指定完整路径,日志会写到哪里?我是否必须指定完整路径并将其硬编码到 /data/data/com.example/...

这是我的配置:

<!-- Logback configuration. -->
<logback>
<configuration>
<appender
name="FILE"
class="ch.qos.logback.core.FileAppender" >
<file>applog.log</file>
<encoder>
<pattern>[%method] %msg%n</pattern>
</encoder>
</appender>
<appender
name="LOGCAT"
class="ch.qos.logback.classic.android.LogcatAppender" >
<tagEncoder>
<pattern>%logger{0}</pattern>
</tagEncoder>

<encoder>
<pattern>[%method] %msg%n</pattern>
</encoder>
</appender>

<root level="debug" >
<appender-ref ref="FILE" />
<appender-ref ref="LOGCAT" />
</root>
</configuration>
</logback>

对于 acra:

@ReportsCrashes(formKey = "dDB4dVRlTjVWa05T..........................",
applicationLogFile = "applog.log",
applicationLogFileLines = 150)

但这会产生如下错误,很明显我确实需要一个绝对路径。我应该使用什么?

java.io.FileNotFoundException: /applog.log: open failed: EROFS (Read-only file system)

最后一个稍微不相关的问题,我希望能够打印对象地址,比如 [%object::%method] 会显示 [MyActivity@33c0d9d::onCreate] 或类似的东西。有什么办法吗?

最佳答案

这不是解决方案,而是替代方案。

如果您有自己的日志记录层,您可以将最后 50/100/500 条日志消息存储在循环缓冲区中,并在发生崩溃时将其提供给 ACRA。

循环缓冲区实现示例:

public static final class LogRingBuffer {
public static final int CAPACITY = 150;
private String[] buffer = new String[CAPACITY];
private int position = 0;
private boolean full = false;
public synchronized void append(String message) {cost of sync
buffer[position] = message;
position = (position+1)%CAPACITY;
if (position==0) {
full = true;
}
}

public synchronized int size() {
return full?CAPACITY:position;
}

public synchronized String get(int i) {
return buffer[(position - i - 1 + CAPACITY) % CAPACITY];
}
}

然后您必须提供日志内容作为自定义数据字段:

int bcSize = Log.logBuffer.size();
for(int i=0; i<bcSize; ++i)
reporter.addCustomData(String.format("LOG%03d", i), Log.logBuffer.get(i));

后一个应该在你自己的异常处理程序中实现,它应该围绕 ACRAs 异常处理程序......

我承认,这并不简单,但可以为您节省一些磁盘 I/O 和 logback-android 的使用...

关于android - Logback-android 和 ACRA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360323/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com