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:写日志文件的库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android上生成Log文件

如何查看log日志文件呢?

Android日志框架Logger

快速php日志,写内容到文件,把日志写到log文件

day10_日志文件

php写日志php将日志写入文件