Используемая версия SQL Server:
Код: Выделить всё
Microsoft SQL Server 2019 (RTM-GDR) (KB5046859) - 15.0.2130.3 (X64)
Oct 18 2024 15:25:23
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Windows 10 Pro 10.0 (Build 19045: ) (Hypervisor)
Я использовал следующие ссылки:
- https://github.com /NLog/NLog.Web/tree/master/examples Примечание. У NLOG есть документация только для .NET 7, а не для .NET 8.
- https://www.toshalinfotech.com/Blogs/ID ... om-Web-API
- https ://code-maze.com/writing-logs-to-sql-server-using-nlog/
Код: Выделить всё
Program.cs:
using NLog;
using NLog.Web;
namespace Api
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
var logger = NLog.LogManager.Setup()
.LoadConfigurationFromXml("nlog.config")
.GetCurrentClassLogger();
try
{
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Logging.ClearProviders();
builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);
builder.Host.UseNLog();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.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();
}
}
}
}
Код: Выделить всё
nlog.config:
commandText="insert into dbo.Log (Logged, Level, Message, Logger, Exception)
values (@Logged,@Level,@Message,@Logger,@Exception);"
Код: Выделить всё
HomeController:
using Microsoft.AspNetCore.Mvc;
namespace Api.Controllers
{
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
private readonly ILogger _logger;
public HomeController(ILogger logger)
{
_logger = logger;
}
[HttpGet(Name = "GetHome")]
public string Get()
{
_logger.LogInformation("GetHome was called");
return "Success";
}
}
}
Код: Выделить всё
Logfile.txt
< /p>
Моя таблица базы данных:

Код T-SQL для создания таблицы журналов:
Код: Выделить всё
-- Note I allowed nulls in all columns except the identity
-- to ensure that the non null constraint was not causing the issue.
CREATE TABLE [dbo].[Log]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[MachineName] [nvarchar](50) NULL,
[Logged] [datetime] NULL,
[Level] [nvarchar](50) NULL,
[Message] [nvarchar](max) NULL,
[Logger] [nvarchar](250) 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, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Подробнее здесь: https://stackoverflow.com/questions/792 ... rver-table
Мобильная версия