Я пытаюсь интегрировать ведение журнала в БД в .NET Core. Я могу настроить NLog и протоколировать сообщения на SQL Server. Это было довольно легко. Но когда я попытался переключить DB на PostgreSQL, ничего не записывается.. Регистрация .NET Core в PostgreSQL DB с использованием NLog
Ниже приведен код в startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory = NpgsqlLogManager.LoggerFactory;
loggerFactory.ConfigureNLog(@"NLog.config");
loggerFactory.AddNLog();
}
Линия
loggerFactory = NpgsqlLogManager.LoggerFactory;
потому, что NLog по умолчанию использует SqlClient для SQL Server. Это переключится на использование PostgreSql.
Содержание в моей 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="Warn"
internalLogFile="internal-nlog.txt">
<targets>
<!--<target xsi:type="File" name="allfile" fileName="${var:configDir}\nlog-all.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="File" name="ownFile-web" fileName="${var:configDir}\nlog-own.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}| ${message} ${exception}" />-->
<target xsi:type="Null" name="blackhole" />
<target name="database" xsi:type="Database" >
<connectionString>User ID=test;Password=pwd;Host=XXX;Port=1234;Database=DummyDB;Pooling=true;</connectionString>
<commandText>
insert into logs (
Application, Logged, Level, Message,
Logger, CallSite, Exception
) values (
@Application, @Logged, @Level, @Message,
@Logger, @Callsite, @Exception
);
</commandText>
<parameter name="@Application" layout="Test" />
<parameter name="@Logged" layout="${date}" />
<parameter name="@Logger" layout="${logger}" />
<parameter name="@Callsite" layout="${callsite}" />
<parameter name="@Exception" layout="${exception:format=tostring}" />
<parameter name="@Message" layout="${message}" />
<parameter name="@Level" layout="${level}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="database" />
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
</rules>
</nlog>
Нет Исключения регистрируются во внутренней лог-файл (внутреннего nlog.txt).
Доступ к регистратору в контроллерах.
public class TestController : Controller
{
private ILogger _logger;
public TestController(ILogger<TestController> logger)
{
_logger = logger;
}
[HttpGet]
public void Test()
{
try
{
throw new System.Exception("Random Exception");
}
catch (System.Exception ex)
{
_logger.LogError("Log Something");
}
}
}
Я что-то не хватает?
По-прежнему не повезло, я намеренно изменил имя таблицы из журналов в lgs, чтобы узнать, не выбрасывается ли какое-либо исключение во время ведения журнала. Никакое исключение не регистрируется в файле internal-NLog. Вышеупомянутое изменение имени таблицы регистрирует исключение во внутреннем nlog при использовании SQL Server. –
И что вы подразумеваете при использовании драйвера npsql из вышеприведенного URL? Я загрузил ссылку из Nuget Manager. –