我对如何在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.");
答案 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文件。同样,优先考虑是使用它还是使用程序集属性来加载配置。