トップ回答者
WCF Loggingのファイル名について

質問
-
WCFログ記録について質問させて頂きます。
現在WCFサービスでログの記録を有効にしており、ファイル名も指定していますが、GUIDのファイル名が生成されてしまいます。
このGUIDのファイル名が生成される原因と対処法についてご教示頂きたいのです。
configの内容は以下になります。
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add initializeData="log.svclog"type="System.Diagnostics.XmlWriterTraceListener"
name="SystemServiceModelListener"traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
<filter type="" />
</add>
</listeners>有識者の方がいらしたら、アドバイスをお願い致します。
以上、宜しくお願い致します。
回答
-
標準のファイル出力系トレースリスナ(XmlWriterTraceListenerやTextWriterTraceListener)は、書き込み対象のファイルをオープンできなかった場合(例えば別bのプロセスが書き込み共有不可で使用中などの場合)、GUIDをファイル名に付加することで現在のプロセスがファイル出力できるようにします。
おそらく別のプロセスでファイルを開いているか、あるいはWCFをIISでホストしているなら、Webガーデンなどでマルチプロセスで動作しているとか、アプリ再起動時のワーカープロセス切り替えで一時的に競合したためとか、まあ原因はいろいろ考えられますが、とにかく同じファイルを開いている何かがないかを確認してみてください。
- 回答としてマーク skyndow 2013年8月21日 1:34
すべての返信
-
アドバイスありがとうございます。
情報が欠落していて申し訳ありませんでした。
詳細な構成は以下になります。
<system.diagnostics>
<sources>
<source propagateActivity="true" name="System.ServiceModel" switchValue="Warning">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add initializeData="log.svclog" type="System.Diagnostics.XmlWriterTraceListener"
name="SystemServiceModelListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Error">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelMessageLoggingListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="message.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelMessageLoggingListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
<filter type="" />
</add>
</sharedListeners>
<switches>
<add name="ConnectionPoolPerformanceCounterDetail" value="4" />
</switches>
<trace autoflush="true" />
</system.diagnostics>>トレースの構成を参照したり、そこで提案されている構成エディター ツール (SvcConfigEditor.exe)を使用>してはどうでしょうか?
上記の構成は、構成エディターツールで生成したものになります。
上記の構成で思い当たる点がありましたら、アドバイスをお願い致します。
-
標準のファイル出力系トレースリスナ(XmlWriterTraceListenerやTextWriterTraceListener)は、書き込み対象のファイルをオープンできなかった場合(例えば別bのプロセスが書き込み共有不可で使用中などの場合)、GUIDをファイル名に付加することで現在のプロセスがファイル出力できるようにします。
おそらく別のプロセスでファイルを開いているか、あるいはWCFをIISでホストしているなら、Webガーデンなどでマルチプロセスで動作しているとか、アプリ再起動時のワーカープロセス切り替えで一時的に競合したためとか、まあ原因はいろいろ考えられますが、とにかく同じファイルを開いている何かがないかを確認してみてください。
- 回答としてマーク skyndow 2013年8月21日 1:34
-
>標準のファイル出力系トレースリスナ(XmlWriterTraceListenerやTextWriterTraceListener)は、書き込み>対象のファイルをオープンできなかった場合(例えば別bのプロセスが書き込み共有不可で使用中などの場合)、GUIDをファイル名に付加することで現在のプロセスがファイル出力できるようにします。
ご回答ありがとうございます。
ファイルをオープン出来なかった場合に、GUIDのファイル名が生成されるのですね!
であれば心当たりがあります。IISでホストしている為、マルチプロセスで動作していますので
その部分でファイル読み込みの競合が発生していると思われます。
原因が特定出来ました!ありがとうございます。