だから私はこれとして人生を始めたカスタムトレースリスナーを持っています:
http://www.codeproject.com/Articles/30956/A-Rolling-XmlWriterTraceListener
これを変更して、Log4Net RollingFileAppender のように動作するようにしました ( http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.htmlを参照) 。
コードを実行すると、構成ファイルのカスタム属性からプロパティ/フィールド値が設定されていないことがわかりました。
実行時にオブジェクトを分析すると、Attributes プロパティ (this.Attributes) に何も含まれていないことがわかります。
これを修正する方法はありますか?
これらまたは何かを手動で入力することになっていますか?
ここにコードサンプルがあります:
[HostProtection(Synchronization = true)]
public class RollingXmlWriterTraceListener : XmlWriterTraceListener
{
public RollingXmlWriterTraceListener(string filename)
: base(filename)
{
_basicTraceFileName = filename;
LoadAttributes();
}
LoadAttributes メソッドで、次に行います...
if (Attributes.ContainsKey("maxTraceFileCount"))
{
string attributeValue = Attributes["maxTraceFileCount"];
問題は、「属性」に何も含まれていないことです。このクラスは、属性を含む構成情報を使用してフレームワーク コードからインスタンス化されます...
<sharedListeners>
<add type="emedia.Common.Wcf.RollingXmlWriterTraceListener, emedia.Common.Wcf"
name="System.ServiceModel.XmlTrace.Listener"
traceOutputOptions="None"
initializeData="C:\Logs\MyTraceFileName.svclog"
MaxTraceFileSize="1048576"
MaxTraceFileCount="10"
/>
</sharedListeners>
編集2:
XmlWriterTraceListener クラスは .Net の一部であり、Inherit の基本クラスを Attributes プロパティにします。
構成では、任意の属性を指定できるはずであり、コードで次のようなことを行います...
var attValue = Attributes["something"];
...しかし、何らかの理由でこれはnullに戻ります(属性がコレクションにありません)。