支持从VSTO AddIn进行日志记录的最简单方法

时间:2015-02-16 12:32:08

标签: c# logging vsto

我在Visual Studio 2013中编写了一个简单的MS Word AddIn,我希望能够记录事件,最好是Windows事件查看器。如果我尝试为我的应用程序创建一个新的事件源,我似乎会遇到权限问题。我正在寻找最简单的方法来启用来自我的VSTO的记录事件,这些事件不违反良好的编程指南。

选项1:使用VSTO 4.0源

我在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也建议不要使用“通用”来源。

选项2:创建要包含在安装程序中的引导程序应用程序

作为替代方案,我可以包含一个简单的引导程序应用程序,它在安装过程中创建源代码,但我无法看到如何使用“属性”>“属性”下的“安装设置”添加自己的先决条件。在Visual Studio中发布。可以吗?还有另一种方法吗?我宁愿不必创建InstallShield Windows Installer,因为在其他方面,默认情况下创建的安装程序适用于我的目的。为了让事件记录工作,创建一个完整的安装程序似乎有些过分。

编辑到目前为止,似乎没有“简单”的方法可以做到这一点,尽管按照链接的说明创建安装程序并不复杂。

选项3:使用日志记录框架并记录到文件

第三种选择是使用log4net或类似的日志记录框架并配置文件附加程序以登录文件。

最初我并不是非常热衷于实现文件记录,因为a)我的应用程序不会经常记录,而b)我想避免将日志文件分散在难以找到的各个位置。

编辑:这是我到目前为止所做的选项,因为它需要的配置最少,并且如果将来我的日志记录要求发生变化,则可以自适应。

2 个答案:

答案 0 :(得分:14)

设置 log4net 以处理简单(或复杂)日志记录要求相对简单。 CodeProject上的log4net Tutorial提供了有用的参考。

  1. 如果您愿意,可以使用NuGet软件包管理器或软件包管理器控制台将log4net安装到您的项目中。
  2. 如果您还没有App.config文件,请添加App.config文件(右键单击您的项目,选择添加>新项目... 并选择应用程序来自Visual C#Items的配置文件
  3. 编辑<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。

  4. 将以下行添加到ThisAddIn.cs中的using log4net;(您需要添加log4net.Config.XmlConfigurator.Configure(); 指令):

    private static readonly log4net.ILog log = 
        log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
  5. 将以下语句添加到需要实现日志记录的任何类中:

    log.Info
  6. 然后可以使用log.Warnlog.Errorlog.FatalC:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas以及log4net提供的其他方法记录事件。

  7. 您可能会收到架构警告消息,因为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?