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

rud*_*den 7 c# logging vsto

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

选项1:使用VSTO 4.0源

我在MSDN文档中看到Office Solutions的事件记录:

您可以使用Windows中的事件查看器查看安装或卸载Office解决方案时Visual Studio Tools for Office运行时捕获的异常消息.您可以使用事件记录器中的这些消息来解决安装和部署问题.

使用VSTO 4.0源记录这些事件.我可以使用VSTO 4.0源来记录来自我自己的AddIn的错误,还是这被认为是不好的做法?

编辑:从Eugene Astafiev的回答和我在其他地方读到的内容看起来这将是一个糟糕的方法,因为VSTO 4.0源只应该处理AddIns的管理,而不是AddIns本身.其他问题的答案也建议不要使用"通用"来源.

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

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

编辑:到目前为止,似乎没有"简单"的方法来做到这一点,尽管通过遵循链接的指令创建安装程序并不太复杂.

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

第三种选择是使用log4net或类似的日志记录框架并配置File Appender以记录到文件.

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

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

rud*_*den 17

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

  1. 如果您愿意,可以使用NuGet软件包管理器或软件包管理器控制台将log4net安装到您的项目中.
  2. App.config如果您还没有文件,请添加文件(右键单击您的项目,选择添加>新项目...并从Visual C#项目中选择应用程序配置文件).
  3. 编辑App.config文件看起来像这样(在<file />标签中适当地替换MyAddIn ):

    <?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>
    
    Run Code Online (Sandbox Code Playgroud)

    日志文件将保存到用户的漫游AppData(%appdata%)文件夹中,最多可保存5个滚动日志文件,每个文件不超过5MB.

  4. ThisAddIn_Startup()在ThisAddIn.cs中添加以下行(您需要添加一个using log4net;指令):

    log4net.Config.XmlConfigurator.Configure();
    
    Run Code Online (Sandbox Code Playgroud)
  5. 将以下语句添加到需要实现日志记录的任何类中:

    private static readonly log4net.ILog log = 
        log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
    Run Code Online (Sandbox Code Playgroud)
  6. 事件然后,可以使用所记录的log.Info,log.Warn,log.Error,log.Fatal由log4net的提供等方法.

您可能会收到架构警告消息,因为log4net不包含架构,Visual Studio无法验证配置部分.在这种情况下,请将模式文件从http://csharptest.net/downloads/schema/log4net.xsd下载到可访问的位置.其他地方C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas 已建议使用该位置.

App.config在Visual Studio中选择文件,然后单击编辑器.你应该得到一个XML菜单项.从那里,选择Schemas ...并从保存它的位置添加log4net.xsd文件.

请注意,您也可以使用log4net 登录到事件查看器,但是您将遇到初始问题中引发的相同权限问题.