親愛なる開発者の皆様、こんにちは。
NLog で奇妙な問題が発生しまし
た。クラッシュしましたが、ログにユーザー アクティビティのトレースが見つかりませんでした。
ロギングが機能していないと思います...
権限の問題などを検索しようとしましたが、すべて問題ないようです
問題が発生した場合にログをデバッグしたいので、次の
コードを作成して、何も作成できなかった場合にユーザーに通知します。
public static class Log
{
static Log()
{
try
{
AppLogger = LogManager.GetLogger("Megatec.EngineeringMatrix.AppLogger");
ChangeLogger = LogManager.GetLogger("Megatec.EngineeringMatrix.ChangeLogger");
DRCLogger = LogManager.GetLogger("Megatec.EngineeringMatrix.DRCLogger");
if((AppLogger == null) || (ChangeLogger == null) || (DRCLogger == null))
throw new NLogConfigurationException("Configuration does not specify correct loggers");
writeStartupLogEntry();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), @"Failed to load `Megatec.EngineeringMatrix` Loggers.");
throw;
}
}
public static readonly Logger AppLogger;
public static readonly Logger ChangeLogger;
public static readonly Logger DRCLogger;
次の構成ファイルを使用します。
<?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" throwExceptions="true">
<targets>
<target xsi:type="File" name="AppLogFile" createDirs="true" fileName="c:/log?s/${processname}/${logger}_${shortdate}.log"
layout=">> ${time} ${uppercase:${level}} ${callsite} ${message} ${exception:format=tostring}" />
<target xsi:type="File" name="ChangeLogFile" createDirs="true" fileName="c:/log?s/${processname}/${logger}_${shortdate}.log"
layout=">> ${date} ${message} ${exception:format=tostring}" />
<target xsi:type="File" name="DRCLogFile" createDirs="true" fileName="c:/logs/${processname}/${logger}_${shortdate}.log"
layout=">> ${date} ${message} ${exception:format=tostring}" />
</targets>
<rules>
<logger name="Megatec.EngineeringMatrix.AppLogger" minlevel="Trace" writeTo="AppLogFile" />
<logger name="Megatec.EngineeringMatrix.ChangeLogger" minlevel="Trace" writeTo="ChangeLogFile" />
<logger name="Megatec.EngineeringMatrix.DRCLogger" minlevel="Trace" writeTo="DRCLogFile" />
</rules>
</nlog>
明らかc:\lo?gs
に、ディレクトリを作成できないため、BAAD構成を作成しました。
それでも、私はメッセージを受け取りません
MessageBox.Show(ex.ToString(), @"Failed to load 'Megatec.EngineeringMatrix'
そしてAppLogger.Info()
例外をスキップします...
ログに何も書いていませんが、アプリはそれを認識していません...
デバッグでは、例外をキャッチして、NLog によって処理されていることを確認できます。
コードからそれをキャッチするにはどうすればよいですか?