WCF 要求を受け取る Windows サービス プロセスがあります。リクエストごとに、何らかの作業を行う新しいスレッドを作成します。ホスト プロセス用に 1 つのログ ファイルを作成し、スレッド インスタンスごとに個別の一意のログ ファイルを作成したいと考えています。たとえば、ログ ファイルを「%date{yyyyMMdd}_%property{UniqueId}.log」のようなものにしたいと考えています。これが私がこれまでに持っているものです。
<appender name="ThreadAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="c:\Logs\%date{yyyyMMdd}\%date{HHmmss}_%property{FileID}.log"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<rollingStyle value="Size"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]
"/>
<footer value="[Footer]
"/>
<conversionPattern value="[%date] [%thread] [%-5level] %logger - %message%newline"/>
</layout>
</appender>
<appender name="ServiceAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\Logs\Service.log"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<rollingStyle value="Size"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]
"/>
<footer value="[Footer]
"/>
<conversionPattern value="[%date] [%thread] [%-5level] %logger - %message%newline"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="ThreadAppender"/>
</root>
<logger name="ServiceLogger" additivity="false">
<level value="INFO"/>
<appender-ref ref="ServiceAppender"/>
</logger>
次に、私のスレッドでは、 を使用しますLogicalContext.Properties["FileID"] = <some id>
。[assembly: log4net.Config.XmlConfigurator(Watch = true)]
assemblyinfo.cs ファイルにも行があります。
すべてがほぼ機能します:)。1 つの問題は、Windows サービスを開始すると、新しい %date{HHmmss}_(null).log ファイルが自動的に作成されることです。log4net がこのダミー ファイルを作成しないようにするには、何を設定する必要がありますか? また、ServiceAppender と ThreadAppender のファイル ロックを指定する必要がありますか?