如何以编程方式获取log4net日志文件的名称模式?

Lev*_*Lev 7 c# log4net

我正在尝试编写一个C#代码,它通过log4net API 在运行时检索log4net日志文件的名称模式.

也就是说,如果在log4net.config中定义了以下appender:

<appender name="MyAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="%date{yyyy}\%date{MM}\%date{dd}\%property{Id}.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="16" />
  <maximumFileSize value="1MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%message%newline" />
  </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

我想在代码中的字符串变量中获取%date {yyyy} \%date {MM} \%date {dd} \%property {Id} .log(不将log4net.config解析为纯XML).

有没有人有想法来拉这个伎俩?

先感谢您.

Mic*_*eld 2

此模式的值将位于属于日志存储库的实例File的属性中。FileAppender

可以通过几种不同的方式来获取附加程序。

  1. 如果您已经有一个ILogger实例(例如您从 获得的实例LogManager.GetLogger()),那么它就有一个Appenders属性。这将为您提供与日志记录层次结构的特定级别关联的任何附加程序。
  2. 您还可以调用LogManager.GetRepository()以获取Heirarchy包含整个记录器和附加器层次结构的对象。该方法需要一个程序集,因此请传递GetCallingAssembly()以获取默认程序集。此类有一个GetAppenders()返回所有配置的附加程序的方法,但它不会告诉您哪些附加程序与哪些记录器关联。

从那里,只需查找正确类型的附加程序(例如FileAppenderRollingFileAppender),然后读取它的File属性。

  • 我认为这是行不通的。此时已经评估了文件属性。因此它将不再包含 `%date{yyyy}\%date{MM}\%date{dd}...` 而是 `2012\09\...`。 (2认同)