【问题标题】:Using serilog with .NET MAUI将 serilog 与 .NET MAUI 一起使用
【发布时间】:2022-06-25 07:56:35
【问题描述】:

我有一个非常简单的 .NET MAUI 应用程序(不是 Blazor 应用程序)。我已经安装了 Seriolog 和 Serilog.Extensions.Logging(所以我可以使用 AppCenter)。我的启动代码中有以下内容来初始化 Serilog

public static MauiApp CreateMauiApp()
{
    // set up logging
    var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    path = Path.Combine(path, "debugcode.txt");

    Log.Logger = new LoggerConfiguration()
        //.MinimumLevel.Debug()
        .WriteTo.File(path)
        .WriteTo.AppCenterCrashes(restrictedToMinimumLevel: LogEventLevel.Information)
        .WriteTo.Console()
        .CreateLogger();

    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        })
        .Logging.AddSerilog(Log.Logger);


    return builder.Build();
}

这编译没有问题。我已在 main.xaml.cs 中添加了用于记录的代码(该代码只是 VisualStudio 附带的默认 .NET MAUI 测试应用程序)。最小调试行被注释掉了,但是不注释掉也没关系。

protected override void OnDisappearing()
{
    base.OnDisappearing();
    Log.CloseAndFlush();
}

void OnCounterClicked(object sender, EventArgs e)
{
    count++;

    var nums = $"Current count: {count}";

    CounterLabel.Text = nums;

    Log.Debug($"***** Current count: {nums}");

    SemanticScreenReader.Announce(CounterLabel.Text);
}

我已尝试更改调试级别,但无论如何,控制台中都没有显示任何调试信息。

【问题讨论】:

  • 我认为对于移动应用程序,您需要一个额外的 nuget,例如 Serilog.Sinks.Xamarin。另一种方法是编写自己的 Sink 并将所有内容写入System.Console.WriteLine

标签: maui .net-maui


【解决方案1】:

这是一个工作示例:

安装这些 nuget 包:

  • Serilog
  • Serilog.Extensions.Logging
  • Serilog.Sinks.File

代码:

    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();

        SetupSerilog();

        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });

        builder.Services.AddMauiBlazorWebView();
#if DEBUG
        builder.Services.AddBlazorWebViewDeveloperTools();
#endif

        builder.Logging.AddSerilog(dispose: true);

        return builder.Build();
    }

    private static void SetupSerilog()
    {
        var flushInterval = new TimeSpan(0, 0, 1);
        var file = Path.Combine(FileSystem.AppDataDirectory, "MyApp.log");

        Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
        .Enrich.FromLogContext()
        .WriteTo.File(file, flushToDiskInterval: flushInterval, encoding: System.Text.Encoding.UTF8, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 22)
        .CreateLogger();
    }

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多