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

Maui应用中如何自定义MetroLog日志文件名(含登录用户名)

实现带登录用户名的MetroLog日志文件名

要实现自定义包含登录用户名的日志文件名,你需要通过自定义文件名生成器来覆盖MetroLog默认的命名逻辑,具体步骤如下:

1. 自定义文件名生成器类

创建一个实现MetroLog.Targets.IFileNameGenerator接口的类,在其中编写带用户名的文件名生成逻辑:

using MetroLog;
using MetroLog.Targets;
using System;

public class UsernameFileNameGenerator : IFileNameGenerator
{
    // 用于获取当前登录用户名的委托(支持后续动态更新)
    private readonly Func<string> _getCurrentUsername;

    public UsernameFileNameGenerator(Func<string> getCurrentUsername)
    {
        _getCurrentUsername = getCurrentUsername ?? (() => "unknown");
    }

    public string GenerateFileName(LogLevel level)
    {
        // 获取用户名并转为小写,为空时用默认值
        var username = _getCurrentUsername()?.ToLower() ?? "unknown";
        // 生成日期部分
        var datePart = DateTime.Now.ToString("yyyyMMdd");
        // 返回最终文件名格式
        return $"Log - {datePart}-{username}";
    }
}

2. 在日志配置中使用自定义生成器

修改MauiProgram.cs中的日志配置代码,将自定义生成器注入到StreamingFileLogger的选项中:

// 假设你有全局的登录状态管理,这里用委托动态获取用户名
// 替换为你实际获取当前登录用户名的逻辑(比如从本地存储、全局变量读取)
Func<string> getUsername = () => App.GlobalLoggedInUsername;

builder.Logging
.AddStreamingFileLogger(options =>
{
    options.MinLevel = Microsoft.Extensions.Logging.LogLevel.Information;
    options.MaxLevel = Microsoft.Extensions.Logging.LogLevel.Critical;
    options.FolderPath = Android.OS.Environment.ExternalStorageDirectory + "/Android/data/com.companyname.salestracking/files/Logs";
    // 配置自定义文件名生成器
    options.FileNameGenerator = new UsernameFileNameGenerator(getUsername);
});

关键注意事项

  • 动态更新用户名:如果用户名是用户登录后才确定的,使用委托方式可以在登录成功后更新全局用户名变量,后续生成的日志文件会自动使用最新用户名。
  • 空值处理:添加了用户名空值默认值unknown,避免文件名格式错误。
  • 命名空间引用:确保代码中引用了MetroLog和MetroLog.Targets命名空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:10:37