能否在.NET MAUI中使用Nlog?求相关配置示例
在.NET MAUI中使用NLog的方法及配置示例
一、是否支持?
当然可以,NLog官方已支持.NET MAUI环境,可通过NuGet包快速集成。
二、配置步骤及示例
1. 安装NuGet包
在项目中安装NLog.Extensions.Logging包,可通过Package Manager控制台执行:
Install-Package NLog.Extensions.Logging
2. 添加NLog配置文件
在项目根目录新建nlog.config文件,右键文件设置复制到输出目录为「始终复制」。以下是基础配置示例:
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info" internalLogFile="internal-nlog.txt"> <!-- 定义日志输出目标 --> <targets> <!-- 输出到控制台 --> <target name="console" xsi:type="Console" /> <!-- 输出到平台适配的应用数据目录文件 --> <target name="file" xsi:type="File" fileName="${specialfolder:folder=ApplicationData}/maui-app.log" layout="${longdate} ${level} ${message} ${exception}" /> </targets> <!-- 日志路由规则 --> <rules> <logger name="*" minlevel="Debug" writeTo="console,file" /> </rules> </nlog>
注:${specialfolder:folder=ApplicationData}会自动适配iOS、Android、Windows等平台的合法存储路径,避免权限问题。
3. 在MAUI程序中初始化NLog
修改MauiProgram.cs,替换默认日志提供器为NLog:
using NLog; using NLog.Extensions.Logging; namespace YourMauiAppName; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); // 初始化NLog并替换日志服务 var logger = LogManager.Setup().LoadConfigurationFromFile("nlog.config").GetCurrentClassLogger(); builder.Logging.ClearProviders(); builder.Logging.AddNLog(logger); return builder.Build(); } }
4. 在业务代码中使用NLog
可通过依赖注入ILogger,或直接使用NLog静态类:
using Microsoft.Extensions.Logging; namespace YourMauiAppName.ViewModels; public class MainViewModel { private readonly ILogger<MainViewModel> _logger; public MainViewModel(ILogger<MainViewModel> logger) { _logger = logger; _logger.LogInformation("MainViewModel 初始化完成"); } // 静态类调用示例 public void TestLogAction() { var staticLogger = LogManager.GetCurrentClassLogger(); staticLogger.Debug("这是一条Debug级日志"); staticLogger.Error(new Exception("测试异常"), "业务操作发生错误"); } }
内容的提问来源于stack exchange,提问作者Alessandro Caliaro
相关产品推荐
相关产品推荐

