windows service使用log4net 记录日志
程序员文章站
2022-06-14 11:54:37
最近写了个定时邮件推送的服务,当利用lognet4记录日志时,发现日志并没有记录。后来明白windows 服务一般默认是在C:\Windows\System 或是C:\Windows\System32,而我们自己的服务程序一般是放在其他的目录,这样log4net.config文件中的配置路径将无法正 ......
最近写了个定时邮件推送的服务,当利用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("错误信息");