log4net 按天記錄

來源:互聯網
上載者:User

 由於最近在使用log4net紀錄檔案日誌,但是每天產生的日誌比較多,所以就需要按天來生產記錄檔,也就是說,一天有一個記錄檔,以yyyyMMdd_log.txt的格式來命名,這樣有利於日誌管理,所以對log4net進行了改進,以支援此項功能。經過修改後,我多了個配置屬性dateOn,這是一個開關,用來設定是否支援按日期產生記錄檔,true為支援,false為不支援。<appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log-file.txt"/>
        <dateOn value="true"/>
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
        </layout>
</appender>

修改的檔案有:FileAppender.cs,AppenderAttachedImpl.cs,XmlHierarchyConfigurator.cs
FileAppender.cs的修改如下:
1) 增加兩個屬性,如下:private bool m_dateOn;
        /**//// <summary>
        /// 功能:當為真時,日誌將以日期為單位來命名記錄檔
        /// </summary>
        public bool DateOn
        {
            get { return m_dateOn; }
            set { m_dateOn = value; }
        }
        private string m_logFileName;
        /**//// <summary>
        /// 記錄檔名
        /// </summary>
        public string LogFileName
        {
            get { return m_logFileName; }
            set { m_logFileName = value; }
        }

2)修改方法:ActivateOptions() 把m_fileName換成m_logFileName
3)   修改方法:Reset()  把m_fileName換成m_logFileName
AppenderAttachedImpl.cs的修改如下:
1)添加方法,如下:/**//// <summary>
        /// 產生記錄檔名
        /// </summary>
        /// <returns></returns>
        private string CreateLogName()
        {
            return DateTime.Now.ToString("yyyyMMdd");
        }

2)修改方法:AppendLoopOnAppenders(LoggingEvent loggingEvent) 在代碼:appender.DoAppend(loggingEvent);前面添加如下代碼:if(appender.Name == "FileAppender")
                    {
                        if(((FileAppender)(appender)).DateOn) //是否開啟以日期來產生記錄檔的功能
                        {
                            ((FileAppender)(appender)).LogFileName = this.CreateLogName()+"_"+((FileAppender)(appender)).File;
                        }
                        else
                        {
                            ((FileAppender)(appender)).LogFileName = ((FileAppender)(appender)).File;
                        }
                        ((FileAppender)(appender)).ActivateOptions();
                    }

XmlHierarchyConfigurator.cs的修改如下:
1)修改方法:ParseAppender(XmlElement appenderElement) 把原來的代碼:IOptionHandler optionHandler = appender as IOptionHandler;
                    if (optionHandler != null) 
                    {
                        optionHandler.ActivateOptions();
                    }

替換成如下的代碼:(過濾掉FileAppender)if(appender.Name != "FileAppender")
                {
                    IOptionHandler optionHandler = appender as IOptionHandler;
                    if (optionHandler != null) 
                    {
                        optionHandler.ActivateOptions();
                    }
                }

這樣,log4net的改進就完成了。改進後感覺挺好用的,呵呵!
以上是個人的改進心得,希望給有同樣需求的朋友有所協助!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.