私はC#を使用しています
よろしくアレックス
これを試してください(大丈夫です!):
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\\" />
<appendToFile value="true" />
<DatePattern value="yyyy\\\\MM\\\\dd'.inf.log'" />
<rollingStyle value="Date" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Header] " />
<footer value="[Footer] " />
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %message%newline" />
</layout>
</appender>
'logs\2010\04\02.inf.log'という名前のログファイルが作成されます(日付を2010-04-02とします)
皆さん、ありがとうございました。 RollingFileAppenderから継承するSortByFolderFileAppenderを作成しました
最終結果の例:somewhere\Logs\20100305\Client-104615.0
namespace CustomLogging
{
public class SortByFolderFileAppender : log4net.Appender.RollingFileAppender
{
protected override void OpenFile(string fileName, bool append)
{
//Inject folder [yyyyMMdd] before the file name
string baseDirectory = Path.GetDirectoryName(fileName);
string fileNameOnly = Path.GetFileName(fileName);
string newDirectory = Path.Combine(baseDirectory, DateTime.Now.ToString("yyyyMMdd"));
string newFileName = Path.Combine(newDirectory, fileNameOnly);
base.OpenFile(newFileName, append);
}
}
}
<appender name="SortByFolderFileAppender" type="CustomLogging.SortByFolderFileAppender">
<file type="log4net.Util.PatternString" value="Logs\Client"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="-HHmmss"/>
<maxSizeRollBackups value="40"/>
<maximumFileSize value="1MB"/>
<countDirection value="1"/>
<encoding value="utf-8"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff}|%-5level|%message%newline"/>
</layout>
</appender>
FileAppender
クラスに基づいて、独自のアペンダーを作成できると思います。正しい場所にファイルを作成するには、OpenFile
メソッドをオーバーライドする必要がある場合があります。
日付で名前が付けられたファイルを作成し、深夜に新しいファイルを開始するrollinglogfileappenderを使用できます。次に、それらを00.01の正しいマップに移動するスクリプトを記述します。
1日の間にすべてのファイルを1ファイルあたり最大1MBでログに記録する場合の例を次に示します。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Logging\\MWLog"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="-yyyyMMdd"/>
<maxSizeRollBackups value="-1"/>
<maximumFileSize value="1MB"/>
<countDirection value="1"/>
<encoding value="utf-8"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff}|%-5level|%message%newline"/>
</layout>
</appender>
SortByFolderFileAppenderを使用して、上記の回答からビルドします。
これが、ログファイル名のローリング日付を使用して問題を解決した方法です。 staticLogFileNameをtrueに変更して、ファイル名全体がOpenFileメソッドに渡されるようにしました。
ファイル名が「.log」で終わる場合は、何も追加する必要はありません。なんらかのロックが発生したと思います。以前のロックが解除されていることを期待して、log4netで同じファイル名をもう一度使用してみてください。
ただし、ファイルがロックされていて手放さない場合に、これによってOpenFileが無限に呼び出される可能性があるかどうかはわかりません。生産者/消費者パターンを使用してWebサービスを作成し、システム内のすべてのアプリケーションからすべてを1つの場所に記録しました。これは、現在10であり、成長しています。
Log4netを他のアプリケーションに含める必要はありませんが、すべてのアプリケーションがWebサービスへのロギングに使用できるWebクライアントクラスを作成する必要がありました。
ファイル名の結果は「Logs\Client\2017\11\08.log」であり、明らかに毎日変更されます。
protected override void OpenFile( string fileName, bool append )
{
// append "\yyyy\mm\dd.log" to create the correct filename.
if ( !fileName.EndsWith( ".log") )
fileName = $@"{fileName}\{DateTime.Now:yyyy\\MM\\dd}.log";
base.OpenFile( fileName, append );
}
上からの構成の変更。
<appender name="xxxRollingFileAppender" type="namespace.xxxRollingFileAppender">
<file value="Logs\Client"/>
<staticLogFileName value="true"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="40"/>
<maximumFileSize value="1MB"/>
<encoding value="utf-8"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff}|%-5level|%message%newline"/>
</layout>
</appender>