VSIX扩展中使用的WPF-Log4Net在目标VS上安装时没有输出日志

时间:2018-03-21 08:52:45

标签: c# wpf log4net

当Log4net在VSIX扩展中使用并安装在另一个目标VS时,它不会记录。

我有一个WPF解决方案。我下载了log4net dll,我添加了log4net.config并设置了"复制到输出目录"值为"始终复制"。

log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net debug="true">
    <root>
      <level value="INFO" />
      <appender-ref ref="TestAppender" />
    </root>
    <appender name="TestAppender" type="log4net.Appender.FileAppender">
      <!--<file value="${TMP}\myapp.txt" />-->
      <!--<file value="c:\temp\logger.txt" />-->
      <!--<file value="${USERPROFILE}\log\Log.txt" />-->
      <!--<file value="${LOCALAPPDATA}\log\log.txt" />-->
      <file value="${ALLUSERSPROFILE}\Log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="1KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>

我在AssemblyInfo.cs中添加了以下行:

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

然后是我的TestWindowControl.xaml.cs中的以下代码,并在 VSPackage.cs 中为此引用/创建了一个实例。

public partial class TestWindowControl : UserControl
        {
            private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            public TestWindowControl()
            {
                XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
                log.Info("info testing");
                log.Debug("debug testing");
                log.Error("error testing");
                log.Fatal("fatal testing");
                log.Warn("warn testing");
            }
        }

当我在我的机器(本地)上运行它时,它按预期工作但我安装此扩展并尝试 (服务器)log4net没有使用log4net.config中提到的任何位置进行日志记录 即可。在线搜索并尝试了不同的路径,但仍然没有记录。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

分析后,问题是当在visual studio扩展中使用时,log4net没有记录。

so post

中描述了解决方案

由Gifty在评论中写道:

  

谢谢。 XmlConfigurator.Configure(new System.IO.FileInfo(&#34; log4net.config&#34;));

     

这一行是我的本地解决方案路径为log4net而不是扩展安装路径所以我将该行更改为var log4netconfigpath = Directory.GetParent(Assembly.GetExecutingAssembly()。Location).FullName + @&#34; \ log4net的.config&#34 ;;

     

并更改了log4net.config文件属性BuildAction-Content并包含在VSIX-true中,现在它按预期工作。谢谢dsdel将我重定向到那个帖子:)