.NETコアのDBへのログを統合しようとしています。 NLogとSQL Serverへのログメッセージを設定できます。それはかなり簡単でした。しかし、PostgreSQLにDBを切り替えると、何も記録されていないようです。NLogを使用した.NETコアのPostgreSQL DBへのログ
は以下startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory = NpgsqlLogManager.LoggerFactory;
loggerFactory.ConfigureNLog(@"NLog.config");
loggerFactory.AddNLog();
}
デフォルトでNLogは、SQL Server用のSqlClientを使用しているため
loggerFactory = NpgsqlLogManager.LoggerFactory;
がある行のコードです。これは、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ファイルにも例外は記録されません。上記のテーブル名の変更は、SQL Serverを使用しているときにinternal-nlogで例外を記録しています。 –
そして、上記のURLからnpsqlドライバを使用するとどういう意味ですか?私はNuget Managerからリファレンスをダウンロードしました。 –