2016-08-01 5 views
0

私はNLogのメモリターゲットとファイルのターゲットを持っているが、私はその後、このNLogメモリターゲットエラー

target = (MemoryTarget)NLog.LogManager.Configuration.FindTargetByName("memory"); 

のようなコンストラクタでMemoryTargetを取得し、この

<?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" 
    xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 
    autoReload="true" 
    throwExceptions="true" 
    internalLogLevel="Off" internalLogFile="D:\temp\nlog-internal.log"> 

<targets> 
    <target name="logfile" xsi:type="File" fileName="file.txt" /> 
    <target name="memory" xsi:type="Memory" layout="${level}|${time}|${message}"/> 
</targets> 

<rules> 
    <logger name="*" minlevel="Info" writeTo="logfile" /> 
    <logger name="*" minlevel="Info" writeTo="memory" /> 
</rules> 
</nlog> 

ように設定され、私は、ターゲットのアクセスログ(まだコンストラクタ内にあります)にはいくつかのメッセージがあります。しかし、N個のメッセージの後、NLogはメモリターゲットへのメッセージの書き込みを停止します。さらに、私が始めてやったようにターゲットを名前で取得しようとすると、nullが返されます。また、いくつかの時間が過ぎると、nlogの周りにはOutOfMemoryExceptionが発生します。ファイルのターゲットは正常に動作します。 MemoryTargetを修正してログを作成せず、自分自身を削除する方法はありますか?

UPD:NLogの内部デバッグログを見て、ある時点でターゲットが消去されることに気付きました。私は、NLogの設定と別のものとのDLLを持つ私のメインプログラムを持っています。しかし、彼らは同じであり、互いに争うべきではありません。内部ログはここにありますhttp://pastebin.com/M885xmBi

答えて

0

したがって、問題は基本的にNLog Configsの競合です。私はそれらにNLogの機能を持つプロジェクトとdllとしてそのプロジェクトを使用するwpfアプリケーションを持っていました。彼らの設定が同じNLogであっても、最初の設定を読み込んでターゲットを設定すると、2番目の設定を読み込みましたが、apperently failed(NLogの内部ログに例外はありません)とすべてのターゲットを削除しました。 dllプロジェクトから設定を削除すると問題が解決しました

+0

nlogユーザに循環バッファを保存するか、すべてを保存しますか? – Thomas

+0

@Thomas正直なところ私はストレージのランタイム状態を知らない。その情報が必要な場合は、ソースコードを確認する必要があります –