c# - 将 NLog 与 Sql Server 一起使用
问题描述
我正在尝试使用 NLog 将错误记录到数据库表中,但没有记录被写入数据库。我在这里想念什么?
启动.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IHttpContextAccessor httpContextAccessor,
IOptions<MailSettings> mailConfig, IOptions<ApplicationSettings> applicationSettings, ILoggerFactory loggerFactory)
{
app.UseMvc();
GlobalDiagnosticsContext.Set("connectionString", ConnectionString.Connection);//Set the database connection string
loggerFactory.AddNLog();
}
}
然后我创建了以下数据库表
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY(1,1) NOT NULL,
[Application] [nvarchar](50) NOT NULL,
[Logged] [datetime] NOT NULL,
[Level] [nvarchar](50) NOT NULL,
[Message] [nvarchar](max) NOT NULL,
[Logger] [nvarchar](250) NULL,
[Callsite] [nvarchar](max) NULL,
[Exception] [nvarchar](max) NULL,
CONSTRAINT [PK_dbo.Log] PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
并尝试在此处记录一些错误。
public class ValuesController : ControllerBase
{
private readonly ILogger _logger;
public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
}
// GET api/values
[HttpGet]
public async Task<ActionResult<IEnumerable<string>>> GetAsync()
{
_logger.LogError("just test");
}
}
解决方案
您需要先使用 AddNLog 扩展方法app.UserMVC
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,IHttpContextAccessor httpContextAccessor,
IOptions<MailSettings> mailConfig, IOptions<ApplicationSettings> applicationSettings,ILoggerFactory loggerFactory)
{
GlobalDiagnosticsContext.Set("connectionString", ConnectionString.Connection);
loggerFactory.AddNLog();
app.UseMvc();
}
并在 Program.cs 中设置
public static class Program
{
public static void Main(string[] args)
{
GlobalDiagnosticsContext.Set("connectionString", YourConnectionString);
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
//logger.Debug("init main");
BuildWebHost(args).Run();
}
catch (Exception exception)
{
//NLog: catch setup errors
//logger.Error(exception, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog() // NLog: Setup NLog for Dependency injection
.Build();
}
推荐阅读
- assembly - Windows 堆栈上的“额外”32 个字节是什么?
- php - 每次用户使用 iOS 的 Safari 访问我的网站时,如何删除缓存文件?
- python - 如何在 Google Colab 中对齐输出(图表)?
- javascript - 返回一个带有 Observable<{string; 响应的数组 数字; 字符串;}[]>
- r - 一行接一行地写入R中的文件
- null - DM-Script:提取变量/未知结构的标记组
- python - 调用后创建带有索引的函数
- c# - 如何使用 Visual Studio 构建 OPC Foundation .NET 库
- c# - 创建最后一个孩子的对象
- visual-studio - 天蓝色管道中的“AndroidManifest 文件不存在”错误