我在Visual Studio 2013中编写了一个简单的MS Word AddIn,我希望能够记录事件,最好是Windows事件查看器。如果我尝试为我的应用程序创建一个新的事件源,我似乎会遇到权限问题。我正在寻找最简单的方法来启用来自我的VSTO的记录事件,这些事件不违反良好的编程指南。
我在Event Logging for Office Solutions上的MSDN文档中看到:
您可以使用Windows中的事件查看器查看其中的异常消息 您可以通过Visual Studio Tools for Office运行时捕获 安装或卸载Office解决方案。您可以使用这些消息 事件记录器,用于解决安装和部署问题。
使用VSTO 4.0
来源记录这些事件。我可以使用VSTO 4.0
来源记录来自我自己的AddIn的错误,还是认为这是不好的做法?
编辑:从Eugene Astafiev的回答以及我在别处读到的内容看来,这似乎是一个不好的方法,因为VSTO 4.0
来源只应该处理AddIns的管理,而不是AddIns本身。 Answers to other questions也建议不要使用“通用”来源。
作为替代方案,我可以包含一个简单的引导程序应用程序,它在安装过程中创建源代码,但我无法看到如何使用“属性”>“属性”下的“安装设置”添加自己的先决条件。在Visual Studio中发布。可以吗?还有另一种方法吗?我宁愿不必创建InstallShield Windows Installer,因为在其他方面,默认情况下创建的安装程序适用于我的目的。为了让事件记录工作,创建一个完整的安装程序似乎有些过分。
编辑到目前为止,似乎没有“简单”的方法可以做到这一点,尽管按照链接的说明创建安装程序并不复杂。
第三种选择是使用log4net或类似的日志记录框架并配置文件附加程序以登录文件。
最初我并不是非常热衷于实现文件记录,因为a)我的应用程序不会经常记录,而b)我想避免将日志文件分散在难以找到的各个位置。
编辑:这是我到目前为止所做的选项,因为它需要的配置最少,并且如果将来我的日志记录要求发生变化,则可以自适应。
答案 0 :(得分:14)
设置 log4net 以处理简单(或复杂)日志记录要求相对简单。 CodeProject上的log4net Tutorial提供了有用的参考。
App.config
文件,请添加App.config
文件(右键单击您的项目,选择添加&gt;新项目... 并选择应用程序来自Visual C#Items的配置文件。编辑<file />
文件,使其显示如下(在<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="RollingFileAppender"/>
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="${APPDATA}\My AddIn\MyAddin-log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
代码中正确替换MyAddIn):
%appdata%
日志文件将保存到用户漫游的 AppData (ThisAddIn_Startup()
)文件夹中,最多可保存5个滚动日志文件,每个文件不超过5MB。
将以下行添加到ThisAddIn.cs中的using log4net;
(您需要添加log4net.Config.XmlConfigurator.Configure();
指令):
private static readonly log4net.ILog log =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
将以下语句添加到需要实现日志记录的任何类中:
log.Info
然后可以使用log.Warn
,log.Error
,log.Fatal
,C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas
以及log4net提供的其他方法记录事件。
您可能会收到架构警告消息,因为log4net不包含架构,Visual Studio无法验证配置部分。在这种情况下,请将模式文件从http://csharptest.net/downloads/schema/log4net.xsd下载到可访问的位置。位置App.config
has been suggested位于其他地方。
在Visual Studio中选择您的{{1}}文件,然后单击编辑器。您应该获得 XML 菜单项。从那里,选择架构... 并添加log4net.xsd文件,保存它。
请注意,您也可以使用log4net到log to the Event Viewer,但是您将遇到初始问题中提出的相同权限问题。
答案 1 :(得分:1)
您需要区分在安装或卸载软件时可捕获的VSTO异常以及代码中处理的特定事件。 Event Logging for Office Solutions文章介绍了在安装或卸载Office解决方案时如何捕获Visual Studio Tools for Office运行时异常。
如果您需要记录加载项事件,可以使用任何基于.Net的组件和BCL。例如,请参阅What is the best way to write event log entries?。