在目标 VS 上安装时,在 VSIX 扩展中使用的 WPF-Log4Net 没有输出日志
WPF-Log4Net used inside VSIX extension did not output log when installed at target VS
Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时不会记录。
我有一个 WPF 解决方案。我下载了 log4net dll,添加了 log4net.config 并将 "Copy to Output Directory" 值设置为 "Copy always"。
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 和 referenced/created VSPackage.cs 中的一个实例。 =31=]
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 中提到的位置。在线搜索并尝试了不同的路径,但仍然没有记录。我错过了什么吗?
经过分析,问题是 log4net 在 visual studio 扩展中使用时没有记录。
此
中描述了解决方案
正如 Gifty 在评论中所写:
Thank you. XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
This line was taking my local solution path for log4net instead of the extension installed path so I changed that line to var log4netconfigpath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + @"\log4net.config";
and changed the log4net.config file properties BuildAction-Content and Include in VSIX-true now its working as expected. Thank you dsdel for redirecting me to that post :)
Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时不会记录。
我有一个 WPF 解决方案。我下载了 log4net dll,添加了 log4net.config 并将 "Copy to Output Directory" 值设置为 "Copy always"。
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 和 referenced/created VSPackage.cs 中的一个实例。 =31=]
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 中提到的位置。在线搜索并尝试了不同的路径,但仍然没有记录。我错过了什么吗?
经过分析,问题是 log4net 在 visual studio 扩展中使用时没有记录。
此
正如 Gifty 在评论中所写:
Thank you. XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
This line was taking my local solution path for log4net instead of the extension installed path so I changed that line to var log4netconfigpath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + @"\log4net.config";
and changed the log4net.config file properties BuildAction-Content and Include in VSIX-true now its working as expected. Thank you dsdel for redirecting me to that post :)