如何在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工具访问:
针对模拟器
- 打开命令行,进入Android SDK的
platform-tools目录(默认路径:C:\Users\[你的用户名]\AppData\Local\Android\Sdk\platform-tools) - 执行
adb devices,确认模拟器在设备列表中 - 进入模拟器shell:
adb shell - 导航到日志目录:
cd /data/user/0/[appcompanyname]/cache/MetroLogs - 查看文件:
ls,如果有日志文件,用cat [文件名]查看内容,或者拉到本地:adb pull /data/user/0/[appcompanyname]/cache/MetroLogs/[日志文件名] C:\你的本地文件夹路径
针对真机
- 开启真机的开发者模式和USB调试
- 用USB连接电脑,执行
adb devices确认设备连接成功 - 后续步骤和模拟器一致,用
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
相关产品推荐
相关产品推荐

