2017-03-03 94 views
1

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

[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的步骤吗?我需要创建哪些文件;我需要添加什么配置;我知道我需要创建一个记录器类,但配置让我完全困惑。

---------------------------------编辑----------- -----------------------

步骤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主:

​​3210

步骤3)我已经添加了参考log4net的

步骤4)在我的班级我在哪里登录我添加了这一点:

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

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

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

我认为它与特定的平台,服务或没有关系,他们是一样的。你是否试图证明它在控制台应用程序中工作? –

回答

1

您可以使用app.config进行配置:对于具有单独文件的Windows服务是前提而不是必需品,因为服务可以观察配置文件的变化。

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

必须也做出log4net的通话中你的启动程序,as the documentation says in bold

使用属性可用于定义了应用程序的配置将被加载一个更清晰的方法。但值得注意的是,属性纯粹是被动的。他们只是信息。因此,如果使用配置属性,则必须调用log4net以允许其读取属性。对LogManager.GetLogger的简单调用将导致调用程序集上的属性被读取和处理。 因此,在应用程序启动期间,以及在任何外部程序集加载和调用之前,必须尽早进行日志记录调用。

要做到这一点,你的服务的启动代码必须包含这样一行:

LogManager.GetLogger("initialise logging system"); 

或者,您也可以通过默认加载​​的启动程序掉落的属性并调用XmlConfigurator.ConfigureAndWatch()代替,这将并观看app.config文件。同样,还有一个首选问题,即是否使用该属性或程序集属性来加载配置。

+0

把什么放在我的app.config中?程序集:log4net行?

line?如果是后者,我读了一些必须在配置文件中第一个地方。但是我的配置文件中的第一件事是.NETFramework的启动。那么我应该在.NETFramework的启动之前还是之后添加它?有没有一个例子对.NET新手有意义? – Patricia

+1

将配置文件添加到app.config文件中,程序集指令必须位于代码文件中。 log4net部分不一定是第一个,但它必须在app.config文件的顶部定义一个'configSection'。 [本页](https://gist.github.com/blachniet/2007351)显示了如何做到这一点。 – stuartd

+0

你可以看看我的编辑?我错过了一些东西,因为我没有收到任何日志。谢谢。 – Patricia

相关问题