You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MAUI Android应用中获取MetroLogger生成的日志?

MAUI中MetroLogger Android日志无法检索的解决方案

一、先确认日志是否实际生成

别着急找文件夹,先验证日志有没有真的写入到指定目录。可以在应用里加一段测试代码,触发日志写入并检查目录:

private async void TestLogGeneration(object sender, EventArgs e)
{
    // 获取日志实例并写入测试日志
    var logger = Logger.GetLogger("DebugTest");
    logger.Debug("这是一条测试Debug日志");
    logger.Info("这是一条测试Info日志");

    // 检查日志目录及文件
    var logDir = Path.Combine(FileSystem.CacheDirectory, "MetroLogs");
    if (Directory.Exists(logDir))
    {
        var logFiles = Directory.GetFiles(logDir);
        foreach (var file in logFiles)
        {
            Debug.WriteLine($"已找到日志文件:{file}");
            var content = await File.ReadAllTextAsync(file);
            Debug.WriteLine($"日志内容片段:{content.Substring(0, Math.Min(200, content.Length))}...");
        }
    }
    else
    {
        Debug.WriteLine("日志目录不存在,可能未生成日志");
    }
}

运行后查看输出面板,如果提示目录不存在或无文件,问题出在日志生成环节,不是找不到文件。

二、Android上获取日志文件的正确路径

你之前查找的C:\Users\[username].android\avd\pixel_5_-_api_34.avd是模拟器的系统镜像目录,应用私有数据不会直接存放在这里,需要通过ADB工具访问:

针对模拟器

  1. 打开命令行,进入Android SDK的platform-tools目录(默认路径:C:\Users\[你的用户名]\AppData\Local\Android\Sdk\platform-tools)
  2. 执行adb devices,确认模拟器在设备列表中
  3. 进入模拟器shell:adb shell
  4. 导航到日志目录:cd /data/user/0/[appcompanyname]/cache/MetroLogs
  5. 查看文件:ls,如果有日志文件,用cat [文件名]查看内容,或者拉到本地:adb pull /data/user/0/[appcompanyname]/cache/MetroLogs/[日志文件名] C:\你的本地文件夹路径

针对真机

  1. 开启真机的开发者模式和USB调试
  2. 用USB连接电脑,执行adb devices确认设备连接成功
  3. 后续步骤和模拟器一致,用adb shell进入目录或adb pull导出文件

更便捷的方式:在应用内添加日志导出功能

直接在应用里加个按钮,把日志复制到外部可访问的目录(比如Download),不用依赖ADB:

private async void ExportLogs(object sender, EventArgs e)
{
    var sourceLogDir = Path.Combine(FileSystem.CacheDirectory, "MetroLogs");
    if (!Directory.Exists(sourceLogDir))
    {
        await DisplayAlert("提示", "暂无日志文件", "确定");
        return;
    }

    // 导出到应用可访问的外部Download目录
    var targetDir = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "Download", "AppLogs");
    Directory.CreateDirectory(targetDir);

    foreach (var logFile in Directory.GetFiles(sourceLogDir))
    {
        var fileName = Path.GetFileName(logFile);
        var targetPath = Path.Combine(targetDir, fileName);
        File.Copy(logFile, targetPath, overwrite: true);
    }

    await DisplayAlert("成功", "日志已导出到Download/AppLogs目录", "确定");
}

三、检查MetroLogger配置漏洞

你的配置中AddStreamingFileLogger没有设置日志级别,默认的MinLevel可能是Information,如果你的日志是Debug级别,就不会写入文件。补充级别配置:

.AddStreamingFileLogger(
    options =>
    {
        options.RetainDays = 2;
        options.FolderPath = Path.Combine(
            FileSystem.CacheDirectory,
            "MetroLogs");
        options.MinLevel = LogLevel.Debug; // 确保Debug及以上级别日志能写入
        options.MaxLevel = LogLevel.Critical;
    });

内容的提问来源于stack exchange,提问作者Toto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:29:51