繁体   English   中英

log4net在作为ClickOnce Winforms应用程序发布后未记录

[英]log4net not logging after release as ClickOnce winforms application

我用两个项目构建了一个应用程序-一个Windows Forms项目和一个包含我的自定义控件的类库。 我已经在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>

该文件的“构建操作”设置为“内容”,“复制到输出目录”设置为“始终复制”。 在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 Forms项目,就不再发生日志记录。 当我从Visual Studio附加到应用程序时,可以看到日志配置不正确-没有附加程序。 我没有办法解决这个问题。 我尝试干预配置(App.config和log4net.config都使用),并尝试添加以下行:

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

我还尝试添加此装饰器,以确保未优化日志初始化方法:

[MethodImpl(MethodImplOptions.NoInlining)]

有人可以建议如何工作吗?

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

  1. 哪里保留log4net.config文件

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

  2. 在哪里写日志文件

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

以下链接可能对您有帮助

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM