【问题标题】:Using the assembly version in log4net FileAppender file name在 log4net FileAppender 文件名中使用程序集版本
【发布时间】:2015-02-13 22:14:40
【问题描述】:

我有一个如下定义的 log4net 日志文件附加程序。它工作正常。我想将exe的汇编版本作为文件名,以更好地区分正在播放的版本。因此,在下面的示例中,如果我的应用程序的程序集版本是 1.2.3.4,我想要 ClientAppLog_v1.2.3.4.txt

<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  <param name="File" value="${USERPROFILE}\MyApp Logs\ClientAppLog.txt" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="[Header]&#xD;&#xA;" />
    <param name="Footer" value="[Footer]&#xD;&#xA;" />
    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
  </layout>
</appender>

【问题讨论】:

  • 没有对 Assembly Name 或 AssemblyVersion 属性的内置支持,请参阅此处如何使用您必须编写自己的一些自定义代码来解决此问题:stackoverflow.com/a/4711419/559144
  • 谢谢。我不想经历所有这些麻烦......我可能只是在部署时手动设置文件名。谢谢!

标签: c# .net log4net


【解决方案1】:

虽然 log4net 可能不直接支持这些,但您可以使用通用 log4net 属性轻松完成此操作,该属性是在创建记录器之前设置的,或者为了安全起见,在配置 log4net 之前:

Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;

log4net.GlobalContext.Properties["LogFileName"] = version + "_logfile.txt";

log4net.Config.XmlConfigurator.Configure(…);

并在配置中将 &lt;param name="File" 替换为:

 <file type="log4net.Util.PatternString" 
       value="${USERPROFILE}\MyApp Logs\%property{LogFileName}" />

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2019-03-08
    相关资源
    最近更新 更多