web-dev-qa-db-ja.com

C#でイベントログを読み取る

アプリケーションのイベントログを読み込もうとしていますEventLoggingApp。問題は、私の単一のソース(EventLoggingApp)のログを読み取ることです。

このコードは、すべてのソースのログを読み取ります。何が問題ですか?何かアドバイス?

static void ReadEvenLog()
{
    string eventLogName = "Application";
    string sourceName = "EventLoggingApp";
    string machineName = "Tom";

    EventLog eventLog = new EventLog();
    eventLog.Log = eventLogName;
    eventLog.Source = sourceName;
    eventLog.MachineName = machineName;

    foreach (EventLogEntry log in eventLog.Entries)
    {
        Console.WriteLine("{0}\n",log.Source);
    }
}
18
Tom159

これを試して:

EventLog log = new EventLog("Security");
var entries = log.Entries.Cast<EventLogEntry>()
                         .Where(x => x.InstanceId == 4624)
                         .Select(x => new
                         {
                             x.MachineName,
                             x.Site,
                             x.Source,
                             x.Message
                         }).ToList();
19
Domenico

MSDNで article を確認してください。ソースごとにイベントログエントリを読み取ることはできません。重要なのはログ名だけです。代わりに、アプリケーションごとに個別のイベントログを作成したり、foreachループの各エントリのSourceプロパティを確認してエントリをフィルタリングしたりできます。

4

MSDN (1)(2) によると、Sourceはイベントログの書き込み専用です。

ログから読み取るだけの場合は、ソースを指定する必要はありません。 EventLogインスタンスのログ名とMachineName(サーバーコンピューター名)プロパティのみを指定できます。どちらの場合も、エントリメンバーには、イベントログのエントリのリストが自動的に入力されます。このリストの項目に適切なインデックスを選択して、個々のエントリを読み取ることができます。 (1)

1
atamanroman

コンソールで何を印刷しようとしていたのか本当にわかりません。それが メッセージ 印刷しようとしている各イベントログエントリのforeachループ内では、代わりに次のようにする必要があります。

Console.WriteLine(log.Message + "\n");
0
Tanvir