.net - Windows 服务的 Log4net

标签 .net c#-4.0 app-config

这是我第一次使用 Log4net。它没有显示任何错误,但没有写入文件。我在我的 AppConfig 文件中添加了以下内容:

<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
    </configSections>

 <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>
      </layout>
    </appender>

    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\CE\FileControllerLog.txt"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>-->
        <param name="ConversionPattern" value="%d %m%n"/>
      </layout>
      <appendToFile value="true"/>
      <rollingStyle value="Composite"/>
      <maxSizeRollBackups value="2"/>
      <maximumFileSize value="10MB"/>
      <staticLogFileName value="true"/>
    </appender>
    <logger name="FileControllerLog">
      <level value="INFO"/>
      <appender-ref ref="LogFileAppender" />
      <appender-ref ref="ConsoleAppender"/>
    </logger>
[assembly: log4net.Config.XmlConfigurator(Watch = true)] //added in assembly info file

在代码中:

ILog logger = log4net.LogManager.GetLogger("FileControllerLog");
logger.Info("Method starts");

它没有记录。

最佳答案

试试这个:

 <log4net>
    <root>
      <level value="Error" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="<FilePath>" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="14" />
      <countDirection value="1" />
      <maximumFileSize value="4096KB" />
      <lockingModel type="log4net.Appender.FileAppender.MinimalLock" />
      <staticLogFileName value="true" />
      <PreserveLogFileNameExtension value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newlineDate[%date] ThreadID[%thread] Level[%-5level] Logger[%logger]] - %message%newline" />
      </layout>
    </appender>
  </log4net>

除此之外,在配置部分应该有一个 Log4Net 条目,示例:

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

在您的 Logger 类中有 ILog 变量,并在构造函数中像这样配置记录器:

private ILog log;

public Log4NetLogger()
{
    log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    log4net.Config.XmlConfigurator.Configure();
}

关于.net - Windows 服务的 Log4net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874999/

相关文章:

c# - 在创建新行后设置选中的 ultragrid 行

.net - 到 MSMQ 还是不到 MSMQ? (或 SQL 表作为队列)

c# - iTextSharp GetFieldPositions 到 SetSimpleColumn

c# - 使用电子邮件 ID 从 Active Directory 中查找用户名

c# - 如何确定配置部分或元素是从 app.config 还是从 machine.config 加载的?

c#-4.0 - Entity Framework - Code First 不加载引用的对象

c# - 如何从 C# 中的 app.config 获取一些元素?

c# - 我可以判断按下的Ctrl键是左Ctrl键还是右Ctrl键吗?

.net - 关闭.Net应用程序的应用程序设置上的DefaultSettingValueAttribute创建

c# - 在运行时设置服务 URL