xml 如何配置 RollingFileAppender 以使用 log4net 按日期和大小滚动?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/243572/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do I configure a RollingFileAppender to roll by date and size with log4net?
提问by Ryan Taylor
I am configure log4net to use a composite RollingFileAppender so that the current file is always named logfile.logand all subsequent files are named logfile-YYYY.MM.dd.seq.logwhere seqis the sequence number if a log exceeds a certain size within a single day. Unfortunately, I have had very little success in configuring such a setup.
我将 log4net 配置为使用复合 RollingFileAppender,以便当前文件始终命名为logfile.log,所有后续文件均命名为logfile-YYYY.MM.dd.seq.log,其中seq是日志超过特定大小时的序列号一天之内。不幸的是,我在配置这样的设置方面几乎没有成功。
Edit:
编辑:
My current configuration is pasted below. It has been updated based on several answers which gets me close enough for my needs. This generates files of the format: logfile_YYYY.MM.dd.log.seq
我当前的配置粘贴在下面。它已根据几个答案进行了更新,这使我足够接近我的需求。这会生成以下格式的文件:logfile_YYYY.MM.dd.log.seq
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\logfile"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="_yyyy.MM.dd".log""/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="75KB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
</log4net>
One interesting note, setting
一个有趣的笔记,设置
<staticLogFileName value="false"/>
to true causes the logger to not write any files.
为 true 会导致记录器不写入任何文件。
采纳答案by paul
We use the following (in Log4J):
我们使用以下内容(在 Log4J 中):
<appender name="roller" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="Applog.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n"/>
</layout>
</appender>
This gives us Applog.log.yyyy-MM-ddfiles
这给了我们Applog.log.yyyy-MM-dd文件
回答by Leandro López
According to log4net RollingFileAppender source code:
根据 log4net RollingFileAppender 源代码:
protected string GetNextOutputFileName(string fileName)
{
if (!m_staticLogFileName)
{
fileName = fileName.Trim();
if (m_rollDate)
{
fileName = fileName + m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo);
}
if (m_countDirection >= 0)
{
fileName = fileName + '.' + m_curSizeRollBackups;
}
}
return fileName;
}
So I'm guessing it's not possible to generate a log file with the name you need. I think it's something like logfileYYYY-MM-dd.n.logor similar.
所以我猜想用你需要的名字生成日志文件是不可能的。我认为它是类似logfileYYYY-MM-dd.n.log或相似的。
回答by Junrui
Try set this property to true:
尝试将此属性设置为 true:
preserveLogFileNameExtension value="true"
保留日志文件名扩展值=“真”
I believe this trick will help you! However, preserveLogFileNameExtension property needs the latest version of log4net, you can find it here: logging.apache.org/log4net/download.html
相信这个技巧会帮到你!但是,preserveLogFileNameExtension 属性需要最新版本的 log4net,您可以在这里找到它:logging.apache.org/log4net/download.html

