【问题标题】:How can I get the log filename through code?如何通过代码获取日志文件名?
【发布时间】:2017-01-03 21:29:43
【问题描述】:

如何在代码中获取日志文件名? (所以我可以将它打印到控制台)

我的日志文件在 app.config 中是这样定义的:

<appender name="RollingLogFileAppender"
   type="log4net.Appender.RollingFileAppender">
      <file value="logfile" />
    ...

【问题讨论】:

    标签: c# log4net app-config


    【解决方案1】:

    你看看你的LogManager.GetAllRepositories。在存储库中,您可以查看 ILoggerRepository.GetAppenders 中的所有附加程序。如果 appender 是 RollingFileAppender 类型,则检查其 File 属性,或者如果您愿意,可以通过 Name 检查 appender。

    话虽如此,在你的代码中做这样的事情非常不好。如果在部署时更改了配置并且您期望的 appender 不再存在怎么办?

    【讨论】:

    • 好吧,我可以检查空值。以某种方式阅读 app.config 怎么样?
    • 参见msdn.microsoft.com/en-us/library/… 的示例,了解如何阅读您自己的配置部分。不过,我会推荐它。
    • 为了方便起见,我想打印到日志文件所在的控制台。您有什么建议的方法吗?
    • 我的意思是 log4net 允许 any appender。如果是文件附加程序就可以了,您可以搜索 LogManager 并显示 File 属性,如我的帖子中所示。但是如果是一个附加程序你不知道存在,例如。我公司在bugcollect.com/downloads 提供的附加程序?任何人都可以将此类和 appender 添加到您的 application.config 并删除您的 RollingFileAppender,那么您要打印什么?
    • 我认为可以合理地假设,如果有人会做出这样的改变,就会发生测试,并且取决于RollingFileAppender 的损坏代码将被修复/删除。说 anyone 可以添加和删除附加程序是不正确的。总而言之,不合理的恐惧,恕我直言。
    【解决方案2】:

    查看此文件的文件属性。

    Log 是 ILog 的实例

    ((log4net.Repository.Hierarchy.DefaultLoggerFactory.LoggerImpl)Log.Logger).Appenders.OfType().FirstOrDefault().File

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      相关资源
      最近更新 更多