Log4Net 生成多个文件、文件名累加解决方法

Log4Net 生成多个文件、文件名累加解决方法

项目中的WCF服务里采用Log4Net用来记录异常日志,但部署后,生成的日志会出现多个累加文件,如下图:

WCF是寄宿在IIS上,包含了5个SVC服务。打开日志文件,发现记录的引发异常的Thread ID都不一样,猜测是多线程读写日志文件,

配置信息里指定文件的被占用后,重新建立了新的日志文件,删除日志文件也会出现警告信息:

解决方法:

在appender节点里添加:

<param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />

lockingModel 属性的详细信息可看 Log4Net SDK 中的描述。

很不解的是:type中 FileAppender+MinimalLock 为何要用 '+' 来做连接符,换成'.'的时候却不行。

完整Log4Net配置信息:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0"/>
    </configSections>
    <log4net>
        <!--日志对象根设置-->
        <root>
            <!--定义Level级别,若没定义,默认为Debug-->
            <level value="ERROR"/>
            <!--定义日志对象使用的appender,通过appeder-ref来注册-->
            <appender-ref ref="LogFileAppender"/>
        </root>
        <!--定义具体的logger对象 通过调用LogManager.GetLogger(“wcflog”)函数,你可以检索具有该名字的日志。如果LogManager.GetLogger(…)打开的不是预定义的日志对象,则该日志对象会继承根日志对象的属性。知道了这一点,我们可以说,其实<logger>标签并不是必须的-->
        <logger name="wcflog" additivity="true">
            <!--additivity 是否确认子日志对象继承父日志对象的appender列表,默认为True:确认-->
            <!--注意优先级,优先级低的要放在后面-->
            <level value="INFO" />
            <level value="DEBUG"/>
        </logger>
        <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"  >
            <!--配置在root注册的appender-ref具体属性-->
            <param name="File" value="log//"/>
            <param name="StaticLogFileName" value="false" />
            <param name="DatePattern" value="yyyy-MM-dd.LOG" />
            <param name="AppendToFile" value="true"/>
            <!--按照文件的大小进行变换日志文件-->
            <param name="RollingStyle" value="Date" />
            <!--单个文件最大数量-->
            <param name="MaximumFileSize" value="1000KB"/>
            <!--保留的log文件数量 超过此数量后 自动删除之前的  -->
            <param name="MaxSizeRollBackups" value="100" />
            <!--最小锁定模型以允许多个进程可以写入同一个文件-->
            <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
            <!--type属性,定义类型-->
            <layout type="log4net.Layout.PatternLayout">
                <!--定义日志会话(logger session)开始输出的文字-->
                <param name="Header" value="异常开始记录 :"/>
                <!--定义日志会话(logger session)结束输出的文字-->
                <!--<param name="Footer" value="[Footer]\r\n"/>-->
                <!--输出信息的模式: -->
                <param name="ConversionPattern" value="%n时间 : %d  线程ID:[%t] %-5p 当前对象名称:%c  - %m%n"/>
            </layout>
            <!--过滤器,只需要min和max之间的级别-->
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="DEBUG"/>
                <param name="LevelMax" value="ERROR"/>
            </filter>
        </appender>
    </log4net>
</configuration>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏racaljk

静态库(.a)与动态库(.so)的简明介绍

gcc有很多关于静态库,动态库的选项如-l,-L,-fPIC,-shared -Wl,-soname,看着很复杂容易混淆,其实静态库和动态库都是应需而生,只要有...

18750
来自专栏xiaoheike

Elasticsearch Network Settings

Elasticsearch 缺省情况下是绑定 localhost。对于本地开发服务是足够的(如果你在相同机子上启动多个节点,它还可以形成一个集群),但是你需要配...

17920
来自专栏進无尽的文章

基础篇-Mac终端指令大全

在日常开发中我们经常会用到一些Mac的指令在终端中进行操作,所以了解和熟练使用一些基本的Mac终端指令是非常有必要的,也有利于自己的职业发展,下面就简单总结下M...

13710
来自专栏linux运维学习

linux学习第六篇:相对,绝对路径、cd命令、创建删除目录以及rm命令

绝对路径和相对路径 绝对路径:从根开始的 相对路径:相对当前你所在位置的路径,不是以根开头的。 pwd:查看当然所在的路径 cd 命令 cd - :回到上一次的...

19980
来自专栏大数据平台TBDS

WAL文件过多导致hbase master无法启动

近期腾讯云某家大客户的hbase master一直无法启动,经过仔细诊断之后发现是由于hbase的WAL文件非常多(达到15TB),导致hbase在zk的...

60240
来自专栏coding

bash基础特征

11620
来自专栏桥路_大数据

使用Git+Shell自动化部署发布springboot WEB应用

39050
来自专栏技术博文

Git怎样撤销一次分支的合并Merge

出现的问题: 某一天,所有的开发文件已经在development分支上,但是这时候,线上出了一个问题,需要及时修复,于是从master分支上,拉了一个bug分支...

29360
来自专栏熊二哥

Linux快速入门02-文件系统管理

继续进入Linux文件系统的学习,加油,早日突破MS压在自己身上的那道束缚。 ? ? 文件属性基本概念:文件所有者,文件组,其他人。 ? 对上图来说,-rw-...

22680
来自专栏JetpropelledSnake

SNMP学习笔记之SNMPWALK 安装与使用详解

snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过sn...

35810

扫码关注云+社区

领取腾讯云代金券