【问题标题】:How to change log file names in Log4net at run time using C#如何使用 C# 在运行时更改 Log4net 中的日志文件名
【发布时间】:2012-05-24 08:08:51
【问题描述】:

我正在使用 Log4Net 在日志文件中写入日志并将其存储在本地临时文件夹位置 (C:\temp..)。现在我想在运行时更改文本(日志)文件名,所以我对我的配置文件以及我的应用程序也做了一些代码更改。但是无法在本地临时文件夹上更改文件名,并且日志也没有写入文本文件。

你能请任何人告诉我这个问题的解决方案或告诉我一些其他的例子来解决这个问题吗?

这里我的代码是:

我的配置文件(Web.Config)设置:

<appender name="RollingPatternFileAppender"  type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="%property{LogFileName}.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100MB" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} %-5level : [%logger] - %message %newline" />
    </layout>
</appender>
<logger name="SPM.SERVER">
    <level value="DEBUG" />
    <appender-ref ref="RollingPatternFileAppender" />
</logger>

我的申请代码是:

ILog logger = LogManager.GetLogger("SPM.SERVER");
log4net.ThreadContext.Properties["LogFileName"] = "MyLog";
logger.Debug("Load Data",ex);
XmlConfigurator.Configure();

这段代码没有在文件中写入日志,也没有更改文件名。任何人都请纠正我在这段代码中做错了什么,或者告诉我一些其他的例子来实现这个解决方案。

【问题讨论】:

  • @AndreasNiedermair:我无法打开那个网站。
  • 你想通过什么来更改文件名? Log4net 非常灵活,您可以使用不同的附加程序。为什么需要 c#?
  • @nunespascal:我是这个 Log4net 概念的新手。你能帮我这个实现我必须使用哪种类型的附加程序?您能否就您的观点实施再多解释一下?

标签: c# web-config log4net


【解决方案1】:

log4net 允许您拥有多个附加程序。您可以将每个配置为仅收听一组特定的消息。

看看这组非常棒的documentation。它有很多关于如何做事的例子。

这是一个相当粗略的例子:

<log4net>
  <appender name="A1" type="log4net.Appender.RollingFileAppender">
    <file value="Errors" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <staticLogFileName value="false" />
    <param name="DatePattern" value="dd.MM.yyyy'.txt'" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="A2" type="log4net.Appender.RollingFileAppender">
    <evaluator type="log4net.Core.LevelEvaluator">
      <threshold value="DEBUG"/>
    </evaluator>
    <filter type="log4net.Filter.StringMatchFilter">
      <stringToMatch value="Some special message" />
      <acceptOnMatch value="true" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <file value="Debug" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <staticLogFileName value="false" />
    <param name="DatePattern" value="dd.MM.yyyy'.txt'" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <appender-ref ref="A1" />
    <appender-ref ref="A2" />
  </root>
</log4net>

【讨论】:

  • 感谢您的代码。我在我的配置设置中更改了您的代码如何在我的应用程序中继续,以及如何在 Web.config 文件和我的应用程序上分配文件位置和文件名。你能告诉我吗?
  • 文件属性就是这样做的。 我使用了相对路径,但您也可以使用绝对路径。滚动文件追加器根据您指定的模式添加文件名的其余部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多