【问题标题】:log4net not logging after release as ClickOnce winforms applicationlog4net 作为 ClickOnce winforms 应用程序发布后未记录
【发布时间】:2018-05-11 20:15:08
【问题描述】:

我已经构建了一个包含两个项目的应用程序 - 一个 Windows 窗体项目和一个包含我的自定义控件的类库。我已在 log4net.config 文件中使用此配置将 log4net 添加到类库中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <log4net>
    <root>
      <level value="INFO" />
      <appender-ref ref="FileAppender" />
    </root>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="${TMP}\log-file.txt" />
      <appendToFile value="true" />
      <encoding value="unicodeFFFE" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>

该文件的 Build Action 设置为 Content,Copy to output directory 设置为 Copy always。在 AssemblyInfo.cs 中:

[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

我像这样使用控件中的记录器:

using System;
using System.Windows.Forms;
using log4net;

namespace ControlProject
{
    public partial class MyControl : UserControl
    {
        private readonly ILog log;

        public MyControl()
        {
            InitializeComponent();

            log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }

        private void logButton_Click(object sender, EventArgs e)
        {
            log.Info("Log something");
        }
    }
}

现在这一切都很好,并且在使用 Visual Studio 时工作正常(此配置在调试和发布模式下都工作)。但是一旦我发布了 Windows 窗体项目,日志记录就不再发生了。当我从 Visual Studio 附加到应用程序时,我可以看到日志配置不正确 - 没有附加程序。我不知道该怎么办了。我尝试干预配置(App.config,log4net.config),尝试添加这一行:

XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

我也尝试添加这个装饰器以确保日志初始化方法没有被优化:

[MethodImpl(MethodImplOptions.NoInlining)]

有人能告诉我如何让它工作吗?

【问题讨论】:

    标签: c# log4net clickonce


    【解决方案1】:

    当您通过 ClickOnce 部署 winform 应用程序时,您需要注意几件事。

    1. log4net.config 文件的保存位置

      单击一次后,该文件无法访问。您可能需要考虑将此文件放在公共文件夹(MyDocuments / AppData 等)中,并在应用程序启动时以编程方式重新配置 log4net。

    2. 在哪里写入日志文件

      日志文件也是如此。日志文件无法访问,ClickOnce 应用程序转到每个版本的新文件夹。您需要归档一个公共位置以将日志文件写入(如 MyDocuments / AppData 文件夹)。在应用程序启动时,您需要加载所有附加程序并将它们重新配置为指向新的日志位置。

    下面的链接可能对你有帮助

    https://social.msdn.microsoft.com/Forums/windows/en-US/139eb00c-c39b-47ff-9401-b67e92589d81/logging-in-clickonce-looking-for-a-general-advice?forum=winformssetup

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      相关资源
      最近更新 更多