Windows Mobile 6.1を搭載したモバイルデバイスで実行されているアプリケーションにログを追加しようとしています。 �.NET Compact framework 3.5。 NLogを使用します。
NLogディストリビューションの適切なバージョンがインストールされています。
ただし、ログファイルは作成されていません。
これが私の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="logfile" xsi:type="File" fileName=".\Neolant.ASRM.Terminal.log" layout="${longdate}|${level}|${message}|${exception}" autoFlush="true"/>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
</nlog>
そして、私が使っていたテストコードは次のとおりです。
public static void Main()
{
try
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
var logger = NLog.LogManager.GetLogger("UpperLevel");
logger.Info("test test test.");
try
{
throw new Exception("Unexpected!");
}
catch (Exception e)
{
var logger = NLog.LogManager.GetLogger("UpperLevel");
logger.WarnException("An exception occured.", e);
}
throw new Exception("Suddenly!");
}
finally
{
NLog.LogManager.Flush();
}
}
private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
var logger = NLog.LogManager.GetLogger("UpperLevel");
logger.FatalException("Application closed due to exception.", unhandledExceptionEventArgs.ExceptionObject as Exception);
NLog.LogManager.Flush();
}
ログファイルは作成されていましたが、アプリケーションディレクトリにはありませんでした。
$ {basedir} レイアウトレンダラーをファイル名の一部として使用すると、解決策であることが判明しました。
ログファイルがビルドディレクトリにコピーされていないことが判明したため、この問題が発生しました。 NLogのgithubページに答えがありました。 (読みやすくするために段落を少し再フォーマットしました。) https://github.com/NLog/NLog/wiki/Logging-troubleshooting
NLogは構成ファイルを見つけることができません。これは、NLog.configファイルがビルドアクション=なし、または出力ディレクトリにコピー= Visual Studioでコピーしないで構成されている場合に発生する可能性があります。
ビルドアクション=コンテンツを設定し、「出力ディレクトリにコピー=新しい場合はコピーして修正)
回答としてマークされた応答がそれほど明確でない場合は、例を確認できます
<targets>
<target xsi:type="Console" name="console"
layout="${longdate}|${level}|${message}" />
<target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt"
layout="${longdate}
Trace: ${stacktrace}
${message}" />
<target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt"
layout="${shortdate} | ${message}" />
</targets>
ここから取得 NLogのAppDataの場所を使用
nlogトラブルシューティングガイドから
Nlog.configファイルのプロパティを確認してください:出力ディレクトリへのコピーは常にコピーする必要があります
画像リンクをご覧ください https://i.stack.imgur.com/AlUG5.png
私の場合、ルールをチャームのように定義してからルールを逃しました
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
<!-- add your logging rules here -->
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
Nlogトラブルシューティングガイドから:
https://github.com/NLog/NLog/wiki/Logging-troubleshooting
構成ファイルが間違いなく見つかっていることがわかっている場合は、NLog.configファイルのセクションを一時的に次のものに置き換えて試してください。
このルールは、作成したすべてのロガーと一致し、機能する場合は、「ベースディレクトリ」にlog.txtファイルを配置します。これは、テスト用の「=」ディレクトリです instance例デバッグモードで実行している場合、bin> debugフォルダーにlog.txtが表示されます。 (これはトラブルシューティングガイドではあまり明確に説明されていません)。
これが機能する場合、問題はルールにあることがわかります。
<nlog throwExceptions="true">
<targets>
<target name="file" type="File" fileName="${basedir}/log.txt" />
</targets>
<rules>
<logger name="*" minLevel="Trace" writeTo="file" />
</rules>
</nlog>
ターゲットではname = "file"のみが機能することがわかりました-他の値は機能しませんでした
また、上記のthrowExceptions = "true"を追加すると、デバッグ時に有用なエラーメッセージを確実に取得できます。
私も同じ問題に直面し、最終的にそれを解決しました。 NLogを実装したいWebアプリケーションがありました。 NLogを実装するには、次の手順を見つけてください。
手順1:-NuGetパッケージマネージャーに移動し、次のパッケージをインストールします。
ステップ2:-Web.configを開き、次の行を追加します
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="D:\projects\NlogWeb\nlog-internal.log">
<targets>
<target name="console" xsi:type="ColoredConsole" layout="${message}" />
<!--Write logs to File-->
<target name="file" xsi:type="File" fileName="D:\projects\NlogWeb\ErrorLogFile.log" layout="--------------------- ${level}(${longdate})${machinename}-------------------- ${newline}
Exception Type:${exception:format=Type}${newline}
Exception Message:${exception:format=Message}${newline}
Stack Trace:${exception:format=Stack Trace}${newline}
Additional Info:${message}${newline}" >
</target>
</targets>
<rules>
<logger name="*" minlevel="trace" writeTo="file" />
</rules>
</nlog>
ステップ3:-これで、.csファイルで呼び出す最後の構成。
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace NlogWeb
{
public partial class Home : System.Web.UI.Page
{
private static Logger logger = LogManager.GetCurrentClassLogger();
protected void Page_Load(object sender, EventArgs e)
{
try
{
throw new Exception("Divide By Zero Exception", new DivideByZeroException());
}
catch (Exception ex)
{
logger.Error(ex.Message);
}
}
}
}
終わりました。コードを実行して、ログを楽しんでください。