首页 新闻 会员 周边

log4net,既要按日期分割日志文件,又要按文件大小分割。

0
悬赏园豆:10 [待解决问题]

按照日期来分割日志的配置是这样:

<!--按日期分割日志文件 一天一个-->
<appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" >
<!--是否续写-->
<param name="AppendToFile" value="true" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
<param name="StaticLogFileName" value="true" />
<!--保存路径-->
<param name="File" value="C:\Log\\" />
<param name="DatePattern" value="yyyy-MM-dd.LOG" />
<param name="StaticLogFileName" value="false" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
</layout>
</appender>

 

按日志容量分割日志文件的配置是这样:

<!--按日志容量分割日志文件 10KB一个-->
<appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" >
<!--是否续写-->
<param name="AppendToFile" value="true" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
<param name="StaticLogFileName" value="true" />
<!--按照文件的大小进行变换日志文件-->
<param name="RollingStyle" value="Size" />
<param name="File" value="LogData\\log.txt" />
<!--单个文件最大数量 好像只有在 RollingStyle=Size分割时有效-->
<param name="MaximumFileSize" value="20KB"/>
<!--保留的log文件数量 超过此数量后 自动删除之前的 好像只有在 按Size分割时有效-->
<param name="MaxSizeRollBackups" value="2" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
</layout>
</appender>

 

但是,我需求是,按照日期来写日志,并且每天当中,还要按照文件大小分割日志。

比如:

2013-7-15.txt

2013-7-15.txt.1

2013-7-15.txt.2

2013-7-15.txt.3

每个日志大小都不大于1000KB。

怎么还要加哪些属性?

dotnetgeek的主页 dotnetgeek | 菜鸟二级 | 园豆:482
提问于:2013-07-15 15:11
< >
分享
所有回答(3)
0

参考Log4net同时按照日期和大小生成RollingFile和访问Sybase数据库配置(原创)

<rollingStyle value="Composite" /> 
<datePattern value=".yyyy_MM_dd" /> 
<maxSizeRollBackups value="10" /> 
<maximumFileSize value="10000" /> 
<staticLogFileName value="false" /> 
dudu | 园豆:30994 (高人七级) | 2013-07-15 18:24

dudu,用了你这种方法,官方的意思也是这样,但是,程序的效果是,文件名还是没有以时间命名,一定要写成以下这种形式的才可以。

就是要以<param name="key" value="value" />这种形式,目前我还不知道为什么,一定要这样子写。

 

<param name="file" value="C:\DateAndSizeLog\JwtWebLog" />
<param name="AppendToFile" value="true" />
<!--最小锁定模型以允许多个进程可以写入同一个文件,设置后会有性能问题,一般不用设置-->
<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
<param name="StaticLogFileName" value="true" />
<param name="DatePattern" value="yyyy-MM-dd'.txt'" />
<param name="StaticLogFileName" value="false" />
<param name="MaximumFileSize" value="10KB" />
<param name="MaxSizeRollBackups" value="-1" />
<param name="RollingStyle" value="Composite" />

支持(0) 反对(0) dotnetgeek | 园豆:482 (菜鸟二级) | 2013-07-16 09:54

@dotnetgeek: 如果想知道真正的原因,需要看log4net的源代码

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-07-16 10:05

@dudu:  怎么我经过写Demo试验之后,发现很多文章都是错误的,比如:

<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />

我设置了之后,2个进程也无法同时写入一个文件。。

支持(0) 反对(0) dotnetgeek | 园豆:482 (菜鸟二级) | 2013-07-16 11:11

@dotnetgeek: 建议通过博客分享出来,经过实践检验的知识更具价值

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-07-16 11:13

@dudu: dudu,我试验出来了。

<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />

在使用RollingFileAppender的方式不支持多进程同時写一個日志文件;

使用FileAppender才可以;

官方网站的示例代码也是使用FileAppender的,而且官方也有FAQ,但是国内转载的文章,都把LockingModel用在RollingFileAppender上了。迟点我会写博客的。

支持(0) 反对(0) dotnetgeek | 园豆:482 (菜鸟二级) | 2013-07-16 15:14

@dotnetgeek: 好,期待你的分享!

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-07-16 15:31
0

  <appender name="RollingLogFile" type="log4net.Appender.RollingFileAppender">

    <param name="File" value="D:/log4/"/>

    <param name="AppendToFile" value="true"/>
    <param name="RollingStyle" value="Composite"/>
    <param name="DatePattern" value="yyyy-MM-dd&quot;.txt&quot;"/>
    <param name="PreserveLogFileNameExtension" value="true"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="MaximumFileSize" value="1000KB"/>

    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%date %-5level %logger  message:%m%n"/>
    </layout>
  </appender>

steve min | 园豆:234 (菜鸟二级) | 2013-07-22 17:26
<param name="MaximumFileSize" value="1000KB"/>
直接
<param name="MaximumFileSize" value="1MB"/>
,为啥整个 1000KB

 

支持(0) 反对(0) changwei0708 | 园豆:54 (初学一级) | 2013-11-08 18:03
1
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3 <configSections>
 4   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net" />
 5 </configSections>
 6   
 7   <log4net>
 8     <!--配置日志的级别,低于此级别的就不写到日志里面去
 9       OFF、FATAL、ERROR, WARN, INFO, DEBUG, ALL
10       -->
11     <root>
12       <level value="DEBUG" />
13       <appender-ref ref="LogFileAppender" />
14       <appender-ref ref="ConsoleAppender" />
15     </root>
16     
17     <logger name="WebLogger">
18       <level value="ERROR" />
19     </logger>
20 
21     <!--输出到文件-->
22     <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
23       <param name="File" value="Log/" />
24       <param name="AppendToFile" value="true" />
25       <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
26       <param name="MaxSizeRollBackups" value="-1"/>
27       <!-- 每个文件的大小限制  -->
28       <param name="MaximumFileSize" value="10MB"/>
29       <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
30       <param name="RollingStyle" value="Composite" />
31       <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
32       <param name="StaticLogFileName" value="false" />
33       <layout type="log4net.Layout.PatternLayout,log4net">
34         <param name="Header" value="&#xD;&#xA;----------------------application startup--------------------------&#xD;&#xA;" />
35         <param name="Footer" value="&#xD;&#xA; ----------------------application shutdown--------------------------&#xD;&#xA;" />
36         <param name="ConversionPattern" value="%d [%t] %-5p %c - (%line)  %m%n" />
37       </layout>
38 
39       <filter type="log4net.Filter.LevelRangeFilter">
40         <param name="LevelMin" value="ALL" />
41         <param name="LevelMax" value="OFF" />
42       </filter>
43     </appender>
44 
45     <!--输出控制台-->
46     <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net">
47       <layout type="log4net.Layout.PatternLayout,log4net">
48         <param name="ConversionPattern" value="%d [%t] %-5p %c - (%line) %m%n" />
49       </layout>
50     </appender>
51     
52   </log4net>
53 </configuration>

直接复制过去用

changwei0708 | 园豆:54 (初学一级) | 2013-11-08 18:02

不错。谢谢了。

支持(0) 反对(0) ygfmobile | 园豆:200 (初学一级) | 2014-06-26 11:22

请教一下,我希望生成如下格式的怎么弄?

2013-7-15-01.txt

2013-7-15-02.txt

2013-7-15-03.txt

 

支持(3) 反对(0) pengbg | 园豆:13 (初学一级) | 2018-04-11 09:30

@pengbg: 这样的格式,你搞出来了吗?

支持(0) 反对(0) 谷仁儿 | 园豆:198 (初学一级) | 2018-06-26 16:30

@谷仁儿: 搞出来撒,

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name= "File" value= "App_Log/"/>
<!--编码格式-->
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--允许随时删除日志-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--固定后缀-->
<PreserveLogFileNameExtension value="true" />
<!--log保留天数-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--日志文件名是否是固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:2008-08-31.log-->
<param name= "DatePattern" value= "yyyy-MM-dd&quot;.log&quot;"/>
<!--日志根据日期和大小混合模式滚动-->
<param name= "RollingStyle" value= "Composite"/>
<!--不限制文件数-->
<param name="MaxSizeRollBackups" value="-1"/>
<!--每个文件大小限制-->
<maximumFileSize value="2MB"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="发生时间:%d %n内容: %n%m %n %n" />
</layout>
</appender>

支持(0) 反对(0) pengbg | 园豆:13 (初学一级) | 2018-06-26 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册