Log4Net 生成多個文件、文件名累加解決方法


問題背景:

項目中的WCF服務里采用Log4N用來記錄異常日志,但部署后,生成的日志會出現多個累加文件,如下圖:

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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM