在C#服务应用程序中配置log4net的步骤

时间:2017-03-03 00:29:45

标签: c# windows service log4net-configuration

我对如何在Windows服务项目中配置log4net感到非常困惑。除此之外,我是Visual Studio配置的新手。所以,我已经创建了这个Windows服务应用程序,我想向它添加log4net。所有说明都不同,一个答案说包括以下的汇编信息行。另一个答案是将其添加到AssemblyInfo.cs(在App_Code文件夹中)。那么这是否意味着我需要在我的sources文件夹中添加一个名为AssemblyInfo.cs的类,然后在构造函数中添加这一行? 我不知道这意味着什么!

[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

我已将appSettings添加到我的app.config文件中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings> 
</configuration>

我是否还需要创建log4net.config文件?

我试图按照this questions的说明操作,但是没有足够的信息对我有意义。我花了几个小时寻找有意义的指令。有人可以告诉我(高级别)为Windows服务应用程序配置log4net的步骤吗?我需要创建哪些文件;我需要添加哪些配置;我知道我需要创建一个记录器类,但配置让我完全糊涂了。

--------------------------------- EDIT ---------- ------------------------

步骤1)我的app.config如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

    <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
    </configSections>

    <log4net>
      <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log.log" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="5" />
        <maximumFileSize value="100KB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date %level %logger - %message %exception%newline" />
        </layout>
      </appender>
      <root>
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
      </root>
    </log4net>

</configuration>

步骤2)我已添加了Program.cs main:

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace MyAppService
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            log4net.Config.XmlConfigurator.Configure();

步骤3)我添加了对log4net的引用

第4步)在我正在登录的课程中,我添加了这个:

private static ILog logger = LogManager.GetLogger(typeof(Reader));

步骤4)我添加了这样的日志记录语句:

logger.Info("Data Read Completed Successfully.");

1 个答案:

答案 0 :(得分:1)

您可以使用app.config进行配置:对于具有单独文件的Windows服务是首选项而不是必需项,因为服务可以查看配置文件以进行更改。

关于任何地方的汇编指令,你可以将它添加到任何文件中,只要它在启动项目中 - 你的服务 - 尽管习惯上将它们添加到现有的AssemblyInfo.cs文件中。

必须也会在启动例程as the documentation says in bold中调用Log4net:

  

使用属性可以更清晰地定义应用程序配置的加载位置。但值得注意的是,属性纯粹是被动的。它们仅供参考。因此,如果使用配置属性,则必须调用log4net以允许它读取属性。对LogManager.GetLogger的简单调用将导致读取和处理调用程序集上的属性。 因此,必须在应用程序启动期间尽早进行日志记录调用,当然在加载和调用任何外部程序集之前。

为此,您的服务启动代码必须包含如下行:

LogManager.GetLogger("initialise logging system");

或者,您可以删除属性,只需在启动程序中调用XmlConfigurator.ConfigureAndWatch(),默认情况下会加载并观察app.config文件。同样,优先考虑是使用它还是使用程序集属性来加载配置。