- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 Visual Studio 2013 中编写了一个简单的 MS Word 插件,我希望能够记录事件,最好是 Windows 事件查看器。如果我尝试为我的应用程序创建新的事件源,我似乎会遇到权限问题。我正在寻找最简单的方法来从我的 VSTO 启用日志记录事件,并且不违反良好的编程准则。
我从关于 Event Logging for Office Solutions 的 MSDN 文档中看到那:
You can use the event viewer in Windows to see exception messages that are captured by the Visual Studio Tools for Office runtime when you install or uninstall Office solutions. You can use these messages from the event logger to resolve installation and deployment problems.
这些事件是使用 VSTO 4.0
源记录的。我可以使用 VSTO 4.0
源记录来 self 自己的加载项的错误吗,或者这会被视为不好的做法吗?
编辑:从 Eugene Astafiev 的回答和我在其他地方读到的内容来看,这似乎是一个糟糕的方法,因为 VSTO 4.0
源代码只应该处理AddIns 的管理,而不是 AddIns 本身。 Answers to other questions还建议不要使用“通用”资源。
作为替代方案,我可以包括一个简单的 Bootstrap 应用程序,它在安装期间创建源代码,但我看不到如何使用 Visual Studio 中“属性”>“发布”下的“安装设置”添加我自己的先决条件。可以吗?还有另一种方法吗?我宁愿不必创建 InstallShield Windows Installer因为在其他方面,默认创建的安装程序对我来说效果很好。创建一个完整的安装程序只是为了让事件日志正常工作似乎有点矫枉过正。
编辑:到目前为止,似乎没有“简单”的方法来做到这一点,尽管按照链接的说明创建安装程序并不太复杂。
第三种选择是使用 log4net 或类似的日志记录框架,并配置一个 File Appender 来记录到一个文件。
最初我不太热衷于实现文件日志记录,因为 a) 我的应用程序不会非常频繁地记录日志,并且 b) 我想避免将日志文件分散在难以找到的各个位置。
编辑:这是我目前采用的选项,因为它需要最少的配置,并且如果我的日志记录要求将来发生变化,它也可以适应。
最佳答案
设置 log4net 来处理简单(或复杂)的日志记录要求相对简单。 log4net Tutorial CodeProject 上提供了有用的引用。
App.config
如果您还没有文件(右键单击您的项目,选择添加 > 新项目...,然后从 Visual C# 项目中选择应用程序配置文件)。编辑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>
日志文件将保存到用户的漫游 AppData ( %appdata%
) 文件夹,最多保留 5 个滚动日志文件,每个文件不超过 5MB。
将以下行添加到 ThisAddIn_Startup()
在 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
以及 log4net 提供的其他方法。
您可能会收到架构警告消息,因为 log4net 不包含架构,然后 Visual Studio 无法验证配置部分。在这种情况下,从 http://csharptest.net/downloads/schema/log4net.xsd 下载模式文件。到某个可以访问的地方。所在地C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas
has been suggested别处。
选择您的 App.config
在 Visual Studio 中创建文件,然后单击进入编辑器。您应该得到一个 XML 菜单项。从那里,选择 Schemas... 并从保存它的位置添加 log4net.xsd 文件。
请注意,您还可以使用 log4net 来 log to the Event Viewer但是您会遇到与最初问题中提出的相同的权限问题。
关于c# - 支持从 VSTO 加载项进行日志记录的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28541528/
这是真的: log(A) + log(B) = log(A * B) [0] 这也是真的吗? O(log(A)) + O(log(B)) = O(log(A * B)) [1] 据我了解 O(f
0 引言 我常以为 配置 INFO 日志级别时, 应用程序代码中日志器(logger) debug 级的日志代码,不会被执行(比如,实验1中的printTestLog函数)。但今天线上的问题,
日志 日志是构建工具的主要界面。如果日志太多,真正的警告和问题容易被隐藏。另一方面,如果出了错,你需要找出相关的信息。Gradle 定义了6个日志级别,如表 18.1,“日志级别”所示。除了那些您通
日志 关键进程日志如下…(将 替换为启动服务的用户,将 替换为计算机名称) NameNode: $ HADOOP_HOME / logs / hadoop- -namenode- .log Da
我正在探索项目的 git 历史 FFMpeg .我在提交之间对每个文件执行了更改 517573a67088b5c7a25c18373434e3448892ee93和 80bb65fafab1d2f5f
我不知道如何在 loggly 中使用正则表达式进行搜索。例如,使用表达式 /24nonstop.+7554/ 记录我想查找的内容. { "level_name": "WARNING", "ex
有没有办法为 API 调用打开日志记录? 我们有一个第三方应用程序在使用我们的商店时遇到问题,希望获得一些调试信息。 ~我已经搜索了 bt 一无所获。 我正在使用 1.7 最佳答案 在一段受控的时间内
我正在尝试获取 SVN 中所有副本/移动/等的固定路径的日志历史记录(如果可能的话,递归地)。实际上,我试图避免 peg revisions ,并将日志应用于路径而不是对象。 svn 手册提出了这个问
如何在命令行中运行 NAnt 脚本并在日志文件中获取每个任务的时间? using nant task or NAnt -buildfile:testscript.build testnanttarg
是否有任何默认方式来记录哪些用户代理访问了您的服务器?我需要编制一份访问我们网站的浏览器列表,以便我们知道我们最能支持什么。 谢谢! 最佳答案 日志CGI.HTTP_USER_AGENT ,也许在 A
我在我的应用程序中使用 Spring 发送电子邮件。 我想在发送电子邮件时记录 imap 服务器操作。 我尝试按如下方式在我的 applicationContext.xml 中实现日志:
我已经运行一个 pod 一个多星期了,从开始到现在没有重启过。但是,我仍然无法查看自它启动以来的日志,它只提供最近两天的日志。容器是否有任何日志轮换策略以及如何根据大小或日期控制轮换? 我尝试了以下命
背景: 我正在设置我的第一个 flex 堆栈,尽管我将开始简单,但是我想确保我从良好的体系结构开始。我最终希望有以下解决方案:托管指标,服务器日志(expressjs APM),单页应用程序监视(AP
常规的 hg log 命令给出每个变更集至少 4 行的输出。例如 changeset: 238:03a214f2a1cf user: My Name date: Th
我在我的项目中使用 Spring iBatis 框架。然后使用 logback 进行记录。然后,在检查日志文件时,我可以看到系统正在使用的数据库...出于安全目的我想隐藏它 这是示例日志.. 12:2
我想使用 hg log 生成一个简短的变更日志,涵盖最新版本的变更。发行版标有“v”前缀,例如“v0.9.1”或“v1.0”。是否可以使用 revsets 选择以“v”开头的最后两个标签之间的范围,不
我是 PHP 的新手,所以如果有一个简单的答案,请原谅我。我在 stackoverflow 中搜索过任何类似的问题,但找不到任何帮助。 我正在开发一个现有的基于 php 的应用程序,我只需要能够将对象
我有一个名为 Radius 的程序可以验证用户登录。运行在CentOS服务器上 日志在/var/log/radius.log 中 它们如下 Mon Jul 24 22:17:08 2017 : Aut
我最近从使用“日志”切换到“日志”。 到目前为止,还不错,但我缺少一项关键功能——在运行时更改最低级别的能力。 在“logging',我可以调用 myLogger.setLevel(logging.I
假设我们有速度关键的系统(例如统计/分析、套接字编程等),我们如何设计跟踪和日志。 更具体地说,日志和跟踪通常会降低性能(即使我们有关闭机制或冗长的扩展机制)。在这种情况下,是否有任何关于如何“放置”
我是一名优秀的程序员,十分优秀!