【问题标题】:Passing log4net ConfigurationFile to a new AppDomain将 log4net 配置文件传递给新的 AppDomain
【发布时间】:2016-03-04 08:05:43
【问题描述】:

我需要做的是抓住:

<param name="File" value=".\MyExe.exe.log"/>

值,但是当我尝试使用以下内容访问附加程序时:-

var rootAppender = ((Hierarchy)LogManager.GetRepository())
    .Root.Appenders.OfType<RollingFileAppender>()
    .FirstOrDefault();
var myFilePath = rootAppender != null ? rootAppender.File : string.Empty;

我发现我得到的都是空的。那么如何访问我的路径呢?

这是我的 log4net 配置部分:-

<log4net threshold="All">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\MyExe.exe.log"/>
      <param name="AppendToFile" value="true"/>
      <param name="ImmediateFlush" value="true"/>
      <param name="RollingStyle" value="size"/>
      <param name="MaxSizeRollBackups" value="5"/>
      <param name="MaximumFileSize" value="1MB"/>

      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
      </layout>

      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    </appender>

    <logger name="MYLOGGER">
      <level value="All"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </logger>

  </log4net>

谢谢

【问题讨论】:

    标签: log4net appdomain appdomainsetup


    【解决方案1】:

    您找不到文件名的原因是您正在查询根记录器 - 但您的配置中没有定义根记录器,并且默认根没有任何附加程序链接到它。

    您需要运行此代码,而不是使用您定义的记录器来获取文件名:

    var loggerAppender = LogManager.GetLogger("MYLOGGER").Logger.Repository
                                   .GetAppenders()
                                   .OfType<RollingFileAppender>()
                                   .FirstOrDefault();
    
    var myFilePath = loggerAppender != null ? loggerAppender.File : string.Empty;
    

    【讨论】:

    • 出于某种原因,我认为我必须从 Root 开始。这很好用,谢谢。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2017-12-25
    • 2021-10-16
    相关资源
    最近更新 更多