我的Delphi应用程序如何轻松写入Windows事件日志?
TEventLogger和ReportEvent有什么区别?我如何使用ReportEvent函数?
我正在使用log4net进行日志记录(呃!).使用EventLogAppender,我可以配置我的应用程序名称,以便我的事件将显示在Application /"My Application Name"事件日志中.但是,我想将事件记录到"其他事件日志"/"我的应用程序名称".我该如何配置?
当前配置:
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
<applicationName value="My application Name" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
对于EventLogInstaller,代码如下所示:
eventLogInstaller.Log = "Some other event log"; // Default "Application"
eventLogInstaller.Source = "My application name";
Run Code Online (Sandbox Code Playgroud) 我正在试图弄清楚如何管理我的事件ID.到目前为止,我已经手动将每个事件id放在每个方法中,并按顺序编号的方法中的每个步骤.这不允许我有效地过滤事件日志中的事件.为了在事件日志中使用过滤器,似乎每个记录的事件都必须具有自己的唯一ID.
我可以将它们全部存储在一个表中,并将描述链接到它们,但随后我的代码执行,我正在记录"魔术"毫无意义的事件代码.
我进行了谷歌搜索,但我似乎对用于解决此问题的正确关键字感到茫然.
提前致谢
我在C#中找到了一个如何将新事件添加到事件查看器的示例.但是,我需要一个用C++(而不是.NET)编写的示例,它在"应用程序"部分下为事件查看器创建新事件.
我最近在部署Windows服务时遇到了问题.四台计算机没有造成任何问题,但在第五台计算机上由于异常而导致启动服务的任何尝试都失败了.异常堆栈跟踪被写入事件日志,因此我应该很容易确定原因:
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("Starting service", EventLogEntryType.Information);
try
{
//...
base.OnStart(args);
}
catch (Exception ex)
{
EventLog.WriteEntry("Service can not start. Stack trace:" + ex.StackTrace, EventLogEntryType.Error);
Stop();
return;
}
EventLog.WriteEntry("Service started", EventLogEntryType.Information);
}
Run Code Online (Sandbox Code Playgroud)
但是,唉,没有任何信息写入日志.我终于将它追溯到正在编写的第一个日志条目.它引发了一个异常,因为应用程序事件日志已满,包含最近的条目,并且配置为仅覆盖超过7天的条目.
考虑到我无法更改应用程序事件日志的配置,写入事件日志的最佳做法是什么?
我应该总是放入EventLog.WriteEntry一个try块,如果是,我应该如何处理异常(将它写入事件日志可能是一个坏主意),我应该检查我的OnStart方法中的事件日志状态,还是你有更好的建议?
使用PowerShell检索有关事件的信息时消息列被修剪并且太短:
索引时间类型源事件ID消息
----- ---- ---- ------ ------- -------
2 Sep 18 12:50 Info yaddayadda 0分类: Controllers.BasketController ...
1 Sep 18 12:50 Info yaddayadda 0类:Controllers.BasketController ...
有可能看到完整的消息吗?
我无法使用NLog写入事件日志.我已经能够写入控制台和文件.我在NLog中打开了异常,并且没有收到NLog的反馈.
这是我的NLog.config:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="true">
<targets>
<target name="console" xsi:type="Console" layout="${message}" />
<target xsi:type="EventLog" name="eventlog" layout="${message}" log="Application" source="aaaTest"/>
<target xsi:type="File" fileName="log.txt" name="file"/>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="eventlog,console,file" />
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
在事件查看器中,我正在查看"事件查看器(本地)">"Windows日志">"应用程序".但是,我在日志中看不到"aaaTest"(我定义的源代码)的实例.
如何使用powershell来拖尾特定的Windows事件日志?可能吗?
为什么我应该使用事件跟踪Windows(ETW)而不是标准的.NET EventLog类,反之亦然?知道我们将使用相当多的性能计数器会影响决策吗?
到目前为止我所知道的:
我试图找出adb shell中getevent命令的输出格式.
例如,输出如下所示:
adb shell getevent -t | grep event1
-t标志提供时间戳,grep用于仅将消息过滤到触摸屏的事件.
22779-197145:/ dev/input/event1:0003 003a 00400001
22779-197999:/ dev/input/event1:0003 0039 82c30a97
22779-218477:/ dev/input/event1:0003 003a 00390001
22779-219301:/ dev/input/event1:0003 0039 82c30aa4
22779-230623:/ dev/input/event1:0003 003a 002f0001
22779-231416:/ dev/input/event1:0003 0039 82c10aae
22779-242769:/ dev/input/event1:0003 003a 00190001
22779-243623:/ dev/input/event1:0003 0039 82c60ac1
22779-253328:/ dev/input/event1:0003 003a 00000002
22779-254213:/ dev/input/event1:0003 0039 82da0ae4
22779-415590:/ dev/input/event1:0003 003a 00000000
22779-416444:/ dev/input/event1:0003 0039 800b1549
问题是我不知道如何处理这些信息.虽然秒最后一个字段在两个代码之间交替(已建议对应于X和Y值),但最后一个字段似乎包含巨大或非常小的数字.
此外,时间戳对我来说也很陌生.我想知道冲刺后的部分是否是纳秒?
有谁知道我在哪里可以找到这些东西的格式?