我在C#中使用
此致 亚历
答案 0 :(得分:17)
试试这个(应该没问题!):
<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)
答案 1 :(得分:10)
谢谢大家。 我们创建了SortByFolderFileAppender,它继承自RollingFileAppender
最终结果示例: 某处\日志\ 20100305 \客户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>
答案 2 :(得分:1)
我相信,您可以根据FileAppender
类创建自己的appender。您可能需要覆盖OpenFile
方法以在正确的位置创建文件。
答案 3 :(得分:1)
您可以使用rollinglogfileappender创建按日期命名的文件,并在午夜开始新文件。然后编写一个脚本,将它们移动到00.01的正确地图。
至于在一天内记录所有文件,每个文件最多1 MB,这是一个例子:
<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>
答案 4 :(得分:1)
使用SortByFolderFileAppender从上面的答案构建。
这是我们使用日期文件名的滚动日期解决问题的方法。我将staticLogFileName更改为true,因此将整个文件名传递给OpenFile方法。
如果文件名以“.log”结尾,则无需附加任何内容。我猜测发生了某种锁定,我希望log4net再次尝试使用相同的文件名,希望以前的锁已被释放。
虽然,我不确定如果文件被锁定并且不会放弃它,这最终是否会导致对OpenFile的无限调用。我们确实使用生产者消费者模式创建了一个Web服务,以便将系统中所有应用程序的所有应用程序记录在一个位置,这些应用程序目前正在增长
我们不需要将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>