windows service使用log4net 記錄日志


    最近寫了個定時郵件推送的服務,當利用lognet4記錄日志時,發現日志並沒有記錄。后來明白windows 服務一般默認是在C:\Windows\System 或是C:\Windows\System32,而我們自己的服務程序一般是放在其他的目錄,這樣log4net.config文件中的配置路徑將無法正確解析。所以就無法記錄日志。本來我的lognet4文件與服務文件位於同一目錄,后來我就把lognet4.config文件放在了程序exe所在的目錄。

    1.  我的lognet4.config文件配置內容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
	</configSections>
  
  <log4net>
    <logger name="sendEmailrError">
      <level value="ALL"/>
      <!--ALL DEBUG INFO WARN ERROR FATAL OFF-->
      <appender-ref ref="RollingLogFileAppender"/> 
    </logger>

    <!--<logger name="ugmrob2bLoggerInfo">
      <level value="ALL"/>
      --><!--ALL DEBUG INFO WARN ERROR FATAL OFF--><!--
      <appender-ref ref="LoggerInfo"/>
    </logger>-->
    
    <appender name="LoggerInfo" type="log4net.Appender.RollingFileAppender"> 
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--存放日志的路徑-->
      <param name="File" value="E:/Log/LogInfo/"/>
      <!--日志文件中追加-->
      <param name="AppendToFile" value="true"/>
      <!--日期文件是否固定不變-->
      <param name="StaticLogFileName" value="false"/>
      <!--最多保存多少天的記錄-->
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaximumFileSize" value="5MB"/>
      <!--日志名稱-->
      <param name="DatePattern" value="yyyy-MM-dd".log""/>
      <!--日志根據日期滾動-->
      <param name="RollingStyle" value="Date"/>
      
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n異常時間: %d%n記錄器: %c%n異常信息: %m%n異常位置:[%t] %-5p [%l]%n"/>
      </layout>
    </appender>
    
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--存放日志的路徑-->
      <param name="File" value="E:/Log/LogError/"/>
      <!--日志文件中追加-->
      <param name="AppendToFile" value="true"/>
      <!--日期文件是否固定不變-->
      <param name="StaticLogFileName" value="false"/>
      <!--最多保存多少天的記錄-->
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaximumFileSize" value="5MB"/>
      <!--日志名稱-->
      <param name="DatePattern" value="yyyy-MM-dd".log""/>
      <!--日志根據日期滾動-->
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--<param name="ConversionPattern" value="%n異常時間: %d%n記錄器: %c%n異常信息: %m%n異常位置:[%t] %-5p [%l]%n"/>-->
        <conversionPattern value="%n記錄時間:%date 線程ID:[%thread] 日志級別:%-5level  %n錯誤描述:%message%newline" />
        
      </layout>
      <!--<filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG"/>
        <param name="LevelMax" value="FATAL"/>
      </filter>-->
    </appender>
    
  </log4net>
  
</configuration>

 2. 緊接着在Main入口函數解析lognet4.config文件。

  static class Program
    {
        /// <summary>
        /// 應用程序的主入口點。
        /// </summary>
        static void Main()
        {
            string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
            string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
            string configFilePath = assemblyDirPath + "\\log4net.config";
            XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));

            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new SendEmailService() 
            };
            ServiceBase.Run(ServicesToRun);
        }
    }

 3.  實例ILog,開始記錄日志,其中sendEmailrError為lognet4.config文件中logger的name名稱。

log4net.ILog log = log4net.LogManager.GetLogger("sendEmailrError");
log.Error("錯誤信息");

  

    


免責聲明!

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



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