Android:写日志文件的库?
Posted
技术标签:
【中文标题】Android:写日志文件的库?【英文标题】:Android: a library to write log on file? 【发布时间】:2021-03-13 04:56:12 【问题描述】:每次应用程序重新启动或日志文件数量足够时,我都必须写入日志文件并将其发送到服务器。 经过互联网研究:我找到了 Timber 和 java.util.logging.Logger。 我想创建一个自定义的 Timber 树并使用 Logger 来保存登录文件。 是否有图书馆已经以更好的方式做到了这一点? :D 也许是小日志?
这是我的 poc:
private const val SIZE_LIMIT = 10000
private const val NB_FILE_LIMIT = 3
object TimberLogImplementation : TimberLog
override fun init(context: Context)
val path: String = File(context.getExternalFilesDir("MyLog"),"log").absolutePath
val TAG = "FileLoggerTree"
val fileHandler: FileHandler
val logger: Logger = MyLogger(TAG)
logger.level = Level.ALL
if (logger.handlers.isEmpty())
fileHandler = FileHandler(path, SIZE_LIMIT, NB_FILE_LIMIT, false)
fileHandler.formatter = SimpleFormatter()
logger.addHandler(fileHandler)
else
fileHandler = logger.handlers[0] as FileHandler
val fileLoggerTree = FileLoggerTree(logger)
Timber.plant(fileLoggerTree)
class FileLoggerTree(
private val logger: Logger
) : Timber.Tree()
override fun log(priority: Int, tag: String?, message: String, t: Throwable?)
logger.log(fromPriorityToLevel(priority), message)
private fun fromPriorityToLevel(priority: Int): Level
return when (priority)
Log.VERBOSE -> Level.FINER
Log.DEBUG -> Level.FINE
Log.INFO -> Level.INFO
Log.WARN -> Level.WARNING
Log.ERROR -> Level.SEVERE
Log.ASSERT -> Level.SEVERE
else -> Level.FINEST
class MyLogger(name: String): Logger(name, null)
但是不知道是不是超大了
【问题讨论】:
在 android 上使用 tinylog 将日志写入文件非常简单。在这里,您可以找到一个示例:github.com/pmwmedia/tinylog-android-example。将日志发送到服务器不是开箱即用的,但可以通过创建自定义编写器来实现:tinylog.org/v2/extending/#custom-writer 【参考方案1】:试试这个自定义类,
public class ErrorLogWriter
private static String FolderName = "folderName";
private static String logFileName = "filename.txt";
public static void appendLog(String formName, int lineNumber, String error)
try
File logFolder = new File("Directory path", FolderName);
if (!logFolder.exists())
logFolder.mkdirs();
File logFile = new File(logFolder, logFileName);
if (!logFile.exists())
logFile.createNewFile();
//BufferedWriter for performance, true to set append to file flag
BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
Calendar calendar = Calendar.getInstance();
buf.append(new SimpleDateFormat(Constants.DATE_FORMAT_TO_SAVE, Locale.getDefault()).format( calendar.getTime()));
buf.append(" - ");
buf.append(formName);
buf.append(" - ");
buf.append(String.valueOf(lineNumber));
buf.append(" - ");
buf.append(error);
buf.newLine();
buf.close();
catch (IOException e)
e.printStackTrace();
【讨论】:
谢谢 :) 我已经有这样的课程,我正在寻找以异步方式处理写入的东西【参考方案2】:这是一个具有FileLoggerTree
的 Timber 扩展库:
https://github.com/bastienpaulfr/Treessence
【讨论】:
以上是关于Android:写日志文件的库?的主要内容,如果未能解决你的问题,请参考以下文章