windows service使用log4net 記錄日誌

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

    1.  個人lognet4.config文件配置內容以下:app

<?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("錯誤信息");
相關文章
相關標籤/搜索