Я использую nlog, он хорошо работает с файлом журнала, но я также хочу добавить информацию журнала в базу данных. Но это не работает для меня. Я не мог найти свою проблему. Я использую postgresql в качестве базы данных. Я использую .NET5 NLog 4.7.10
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">
<targets>
<target name="allfile" xsi:type="File"
fileName="D:\BEBKA.JobTracking.logs\${shortdate}.log"/>
<target xsi:type="Database" name="db" dbProvider="Npgsql.NpgsqlConnection, Npgsql" connectionstring="Server=127.0.0.1;Port=5432;Database=BEBKAJobTracking;User Id=postgres;Password=123;">
<commandText>
INSERT INTO public."Logs"("Type", "Method", "StatusCode", "StackTrace", "MethodName", "Message", "RequestData", "ResponseData", "Ip", "CreatedDate", "CreatedId")
VALUES (@Type, @Method, @StatusCode, @StackTrace, @MethodName, @Message, @RequestData, @ResponseData, @Ip, @CreatedDate, @CreatedId);
</commandText>
<parameter name="@Type" layout="${type}"/>
<parameter name="@Method" layout="${method}"/>
<parameter name="@StatusCode" layout="${statusCode}"/>
<parameter name="@StackTrace" layout="${stackTrace}"/>
<parameter name="@MethodName" layout="${methodName}"/>
<parameter name="@Message" layout="${message}"/>
<parameter name="@RequestData" layout="${requestData}"/>
<parameter name="@ResponseData" layout="${responseData}"/>
<parameter name="@Ip" layout="${ip}"/>
<parameter name="@CreatedDate" layout="${createdDate}"/>
<parameter name="@CreatedId" layout="${createdId}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="allfile" />
<logger name="db" minlevel="Trace" writeTo="db" />
</rules>
</nlog>
Моя служба регистратора
using BEBKA.Infrastructure.Abstractions.Core;
using BEBKA.Infrastructure.Abstractions.Loggger.Interfaces;
using NLog;
namespace BEBKA.Infrastructure.Services
{
public class LoggerService : ILoggerService
{
private static readonly ILogger logger = LogManager.GetCurrentClassLogger();
public void LogDebug(ILog log)
{
logger.Debug(log.Message);
}
public void LogDebug(string message)
{
logger.Debug(message);
}
public void LogError(ILog log)
{
logger.Error(log.Message);
}
public void LogError(string message)
{
logger.Error(message);
}
public void LogInfo(ILog log)
{
//TODO: Need Bugfix
LogEventInfo theEvent = new(LogLevel.Info, "db", log.Message);
SetLogEventInfo(theEvent, log);
logger.Log(theEvent);
//logger.Info("{message}",log.Message);
}
public void LogInfo(string message)
{
logger.Info(message);
}
public void LogWarn(ILog log)
{
logger.Warn(log.Message);
}
public void LogWarn(string message)
{
logger.Warn(message);
}
private static void SetLogEventInfo(LogEventInfo theEvent, ILog
data)
{
theEvent.Properties["Type"] = data.Type;
theEvent.Properties["Method"] = data.Method;
theEvent.Properties["StatusCode"] = data.StatusCode;
theEvent.Properties["StackTrace"] = data.StackTrace;
theEvent.Properties["MethodName"] = data.MethodName;
theEvent.Properties["Message"] = data.Message;
theEvent.Properties["RequestData"] = data.RequestData;
theEvent.Properties["ResponseData"] = data.ResponseData;
theEvent.Properties["Ip"] = data.Ip;
theEvent.Properties["CreatedDate"] = data.CreatedDate;
theEvent.Properties["CreatedId"] = data.CreatedId;
}
}
}
................................................... ................................................. ................................................. ................................................. ................................................. ..........
Возможно дубликат: coderhelper.com/questions/42202137/…
Вы проверили github.com/NLog/NLog/wiki/Internal-Logging на наличие ошибок?
См. также: github.com/NLog/NLog/issues/4512