我正在尝试写入应用程序事件日志。以下代码在 Windows 8 下执行时没有错误(以管理员权限运行时),但在 Windows 事件查看器中查看应用程序日志时,我没有看到任何事件显示。谁能帮我弄清楚我做错了什么。我需要在 app.config 中添加一些内容吗?
using System.Diagnostics;
namespace tracetest2
{
class Program
{
static void Main(string[] args)
{
if (!EventLog.SourceExists("TestSource"))
{
EventLog.CreateEventSource("TestSource", "Application");
}
EventLog appLog = new EventLog("Application", ".", "TestSource");
appLog.EnableRaisingEvents = true;
appLog.EndInit();
Debug.WriteLine(appLog.Entries.Count);
appLog.WriteEntry("An entry to the Application event log.");
Debug.WriteLine(appLog.Entries.Count);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我搜索了我能找到的每个关键字,看看 PS7 中是否有一个 cmdlet 相当于 PS5 中的 New-EventLog?
这样的事情存在吗?
我已将Serilog.Sinks.EventLog接收器安装到一个小型后台工作服务项目中。但是,我尝试写入的日志均未显示在事件日志中。
这是我的 Main 方法的主体。指定RecurringTasks.Service为源的 已经创建(由我手动创建)。
Log.Logger = new LoggerConfiguration()
.WriteTo.EventLog(source: "RecurringTasks.Service", logName: "Application")
.CreateLogger();
Log.Logger.Information("Test message");
try
{
var host = CreateHostBuilder(Log.Logger, args).Build();
host.Run();
}
catch (Exception e)
{
Log.Fatal(e, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
Run Code Online (Sandbox Code Playgroud)
关于为什么“测试”消息没有写入事件日志的任何想法?干杯
嘿嘿,,
如何通过 Powershell 读取服务器上所有成功登录的列表?列表中应输出以下字段:TimeGenerator、UserName。我目前陷入以下脚本:我怀疑这是 Split 命令
Clear-Host
Get-EventLog -LogName Security | Where-Object {$_.EventID -eq 4624} | ForEach-Object {
$message = $_.Message
$userName = ($message -split "Kontoname: ")[1] -split "`r`n"[1]
[PSCustomObject]@{
TimeGenerated = $_.TimeGenerated
UserName = $userName
}
} | Format-Table TimeGenerated, UserName
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里,或者可能是我的 PowerShell 命令错误?
谁可以帮助我或者有一个脚本示例给我?
问候
Clear-Host
Get-EventLog -LogName Security | Where-Object {$_.EventID -eq 4624} | ForEach-Object {
$message = $_.Message
$userName = ($message -split "Kontoname: ")[1] -split "`r`n"[1]
[PSCustomObject]@{
TimeGenerated = $_.TimeGenerated
UserName = $userName
}
} | …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种(相当无痛)的方法,将一些Windows应用程序事件日志支持添加到一个小型的传统Delphi 5应用程序中.我们只是希望它在启动,关闭,无法连接到数据库等时进行记录.
我见过的几个解决方案/组件似乎暗示我们需要创建一个资源DLL,Windows事件日志查看器将在尝试读取我们的"条目"时链接到该资源DLL.虽然这似乎并不太繁琐,但我想如果/我们将来进一步开发应用程序时要记住这一点 - 我们需要保持这个DLL是最新的.
在未来的某个时刻,我们希望将应用程序转变为服务,可能是在D2007中编写的.
那么有人可以推荐一个合适的路径来将事件添加到D5中的事件日志吗?我正在寻找具体的' 我们用过这个,这是好的 '评论而不是谷歌拖网(我可以自己做!)免费或付费,真的不介意 - 但我可以迁移到D2007未来很重要.
我正在使用Windows事件日志记录一些事件.可以为Windows事件日志中的事件分配一些属性.其中一个是EventID.
现在我想使用EventId尝试对相关错误进行分组.我可以为每次调用我的日志记录方法选择一个数字,但这看起来有点单调乏味.
我希望系统自动执行此操作.它将选择一个eventId,它对于发生日志记录事件的代码中的位置是"唯一的".现在,只有65536个唯一的事件ID,因此可能存在冲突,但它们应该很少,以使EventId成为分组错误的有用方法.
一种策略是采用堆栈跟踪的哈希码,但这意味着以下代码中的第一次和第二次调用将生成相同的事件ID.
public void TestLog()
{
LogSomething("Moo");
// Do some stuff and then a 100 lines later..
LogSomething("Moo");
}
Run Code Online (Sandbox Code Playgroud)
我想使用具有GetFileLineNumber方法的StackFrame类来调用调用堆栈.此策略的问题在于它仅在使用调试符号构建时才有效.我也需要它在生产代码中工作.
有没有人有任何想法?
当写入事件日志时,我可以创建一个EventLog实例,将其作为成员变量保留,并在每次要记录消息时在其上调用WriteEntry(字符串消息).
或者,我可以只调用静态版本:EventLog.WriteEntry(字符串源,字符串消息).
我是否应该选择另一种替代方案?
在我目前的情况下,我打算有一个或两个来源的自定义日志.
我的Windows服务需要将一个事件日志的内容保存到文件中.这是由EventLogSession.ClearLog完成的.但是,我无法强制它直接将事件日志保存到CSV.保存的格式为EVTX.
EventLogSession els = new EventLogSession();
//stel de filename samen door het appdata pad te combinen met een tempfile name
string tempData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "templog.csv");
// Clears all the events and archives them to the .evtx file
els.ClearLog(eventLogName, tempData); // Backup File Path
Run Code Online (Sandbox Code Playgroud)
如何强制EventlogSession类直接保存到CSV,或者,如果这是不可能的.如何将EVTX转换为CSV(使用C#或VB.net)
谢谢!
我正在尝试根据某些条件获取和过滤Windows日志,其中一个标准是过滤依据Message.该Message物业在EventLog.GetEventLogs().Entries.Message.该问题Entries是EventLogEntryCollection和我不能运行lambda表达式(其中在其上).我也尝试将它转换为IEnumberable(List)类型,但它抛出一个异常并说无法强制转换.另一个问题是它是一个只读属性,这使得创建新EventLog对象并手动添加条目几乎是不可能的.最初我尝试的是:
List<EventLog> filteredList = EventLog.GetEventLogs().Where(
x => string.Equals(x.LogDisplayName, "Some Value")).Where(x => x.Entries.Where(...
Run Code Online (Sandbox Code Playgroud)
但显然Entries.Where()不会起作用,因为它不是IEnumberable.我已经考虑了几个小时的替代解决方案,但现在我没希望了.任何帮助是极大的赞赏.
我基于这个例子创建了我的事件源.我的事件源看起来像这样:
[EventSource(Name = "Samples-EventSourceDemos-EventLog")]
public sealed class MinimalEventSource : EventSource
{
public static MinimalEventSource Log = new MinimalEventSource();
[Event(1, Message = "{0} -> {1}", Channel = EventChannel.Admin)]
public void Load(long baseAddress, string imageName)
{
WriteEvent(1, baseAddress, imageName);
}
}
Run Code Online (Sandbox Code Playgroud)
该示例使用代码来模拟安装/卸载过程.从其他一些SO问题中,我看到了另一个使用事件消息文件安装事件源的示例.
但它缺少一些很好的例子,说明如何安装/注册由清单定义的EventSource.我正在调查使用CustomAction做类似的事情:
wevtutil.exe im <EtwManifestManFile> /rf:"EtwManifestDllFile" /mf:"EtwManifestDllFile"
但是想知道你有什么建议吗?