Создать свой журнал событий windows

Как вы знаете, большинство «нормальных» приложений записывают свои события в журнал событий Windows (Application Event Log). Это отличное место для централизованного хранения и просмотра событий приложений, однако зачастую при возникновении необходимости журналировать события от определенного приложения в данном журнале, мы можем столкнуться с тем, что из-за большого количества и чрезмерной подробности событий, работать со стандартным журналом приложений Windows становится очень неудобно. В данном случае было бы удобно создать собственный журнал событий для данного приложения, и для него настраивать различные параметры, такие как размер журнала, фильтры и т.д., а стандартный журнал Application можно использовать как обычно, не засоряя его ненужной информацией. В ОС семейства Windows присутствует функция, позволяющая создать собственный журнал событий.

Сначала создадим новый файл журнала. Сделать это можно при помощи реестра. Запустите редактор реестра regedit и перейдите в ветку:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog

Щелкните правой кнопкой по узлу Eventlog и создайте новый ключ (New > Key)

Имя ключа в этом случае будет являться и именем нового журнала. По умолчанию новый журнал (файл .evt) создается тут:

C:\WINDOWS\System32\Config\New Key #1.evt

Его можно переименовать, изменив строковый параметр в реестре по своему усмотрению.

Далее нужно добавить источники (Sources) событий для нового журнала. Создайте новый ключ типа Multi-String с именем “Sources”, в качестве параметров укажите имена всех приложений, который будут использовать данный журнал (каждое приложение с новой строки).

Cобственный журнал событий Windows

Затем нужно перенести ассоциации ваших приложений из стандартного журнала Application в ваш новый журнал. Разверните ветку “Application”, находящуюся по адресу:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application

И скопируйте все ветки, которые относятся к интересуемым Вами приложениям в новый ветку реестра нового журналa:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\CustomLog

Т.к. команда скопировать/вставить в редакторе реестра не работает, их можно пересоздать вручную (если их немного), или же можно осуществить перенос при помощи процедуры экспорта/импорта веток реестра с ручным редактирование .reg файла. Убедитесь, что после переноса вы удалили ключи реестра ваших приложений из ветки Application, иначе Windows не поймет, что нужно писать события в новый журнал. В том случае, если вы используете новый источник событий для журнала, нужно будет создать параметр типа DWORD с именем CustomSource и значением равным 1:

Как создать свой собственный журнал событий в Windows

В моем примере, я создал собственное приложение .NET 2.0, причем я хочу, чтобы оно записывало события в созданный нами журнал. Для этого я создам новый ключ реестра EventMessageFile и укажу в нем путь к библиотеке журналирования.NET 2.0:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll

Затем нужно перезагрузить Windows, а после загрузки системы вы увидите новый журнал событий в разделе Event Viewer-а. В том случае, если ваше приложение по какой-либо причине не пишет событий в новый журнал, можно протестировать его работу вручную, откройте командую строку и перейдите в каталог:

CD C:\WINDOWS\system32

Затем наберите:

eventcreate /l CustomLog /t Information /so Application1 /id 1 /d "Test message"

В том случае, если вы все сделали правильно должно появиться окно, сообщающее о том, что событие было успешно записан в журнал, либо сообщение об ошибки и причины ее появления.

Update:

Небольшое обновление статьи по письмам читателей:

Вышеприведенная инструкция по созданию собственного журнала ориентирована на серверные ОС семейства Microsoft. Более общий способ, который должен работать в большинстве Windows следующий (отличаются пути в реестре и ключи):

Создаем новый раздел в реестре (имя раздела — имя создаваемого журнала), путь к созданному будет таким:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\NewEventLog , в котором нужно создать следующие ключи:

  • «AutoBackupLogFiles» — тип DWORD, создавать или нет резервные копии журнала (0 — не создавать)
  • «MaxSize» -тип DWORD, максимальны размер журнала в байтах, значение должно быть кратным 64Кб
  • «Retention» — тип DWORD, время хранения записей в случае переполнения журнала.
  • «File» — тип REG_EXPAND_SZ, строка, в которой содержится путь к логу журнала на жестком диске, например %SystemRoot%\System32\config\NewEventLog.evt)
  • «Sources»- тип REG_MULTI_SZ, здесь указан список источников событий, чьи логи должны попадать в этот журнал, каждый источник с новой строки

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о создании и использовании нового журнала событий посредством Windows PowerShell.

Использование PowerShell для создания нового журнала событий

Одна из замечательных вещей, которые можно делать с помощью Windows PowerShell – это создание собственного журнала событий. Здесь я говорю о классическом журнале событий (примеры таких журналов – это System, Security и Applcation). Windows PowerShell позволяет свободно читать, записывать, архивировать и очищать такие виды журналов.

Создаем журнал событий

Для создания нового журнала событий я воспользуюсь командлетом New-EventLog. Для этого мне понадобятся три вещи:

1. Открыть консоль Windows PowerShell с административными правами – в противном случае при попытке создания нового журнала будет возвращено сообщение об ошибке.
2. Имя создаваемого журнала.
3. Также мне будет нужно указать источник событий нового журнала.

Следующая команда создает новый классический журнал событий с именем ScriptingGuys и указывает источник событий с именем scripts.

New-EventLog -LogName ScriptingGuys -Source scripts

При запуске команды на экран не выводится никакой информации. Чтобы убедиться, что команда отработала должным образом, я воспользуюсь командлетом Get-EventLog с параметром –List.

C:\> Get-EventLog -List



Max(K) Retain OverflowAction    Entries Log
------ ------ --------------    ------- ---
20,480      0 OverwriteAsNeeded  18,504 Application
20,480      0 OverwriteAsNeeded       0 HardwareEvents
   512      7 OverwriteOlder          0 Internet Explorer
20,480      0 OverwriteAsNeeded       0 Key Management Service
10,240      0 OverwriteAsNeeded       4 Lenovo-Customer Feedback
   512      7 OverwriteOlder          2 Lenovo-Lenovo Patch Utility/Admin
   128      0 OverwriteAsNeeded      30 OAlerts
   512      7 OverwriteOlder          0 ScriptingGuys
                                        Security
20,480      0 OverwriteAsNeeded  21,437 System
15,360      0 OverwriteAsNeeded  10,059 Windows PowerShell

Конфигурируем новый журнал событий

Одна из вещей, которую я заметил при проверке создания журнала, это то, что его размер установлен в 512 KB, а срок сохранения событий равен 7 дням. Мне же нужно, чтобы размер журнала не превышал 64 KB, и события очищались по мере заполнения журнала. Мне казалось, что для этого подошел бы командлет Set-EventLog, однако командлета с таким именем не оказалось. Нужный командлет – Limit-EventLog. Просматривая файл справки, я заметил, что он обладает только одним набором параметров. Мне нужно установить параметр –OverflowAction в OverWriteAsNeeded, поэтому я предположил, что –RetentionDays нужно установить в 0. Я попробовал запустить следующую команду, но, как видите, появилось сообщение об ошибке.

C:\> Limit-EventLog -OverflowAction OverWriteAsNeeded -RetentionDays 0 -MaximumSize 64KB
Limit-EventLog : Cannot validate argument on parameter 'RetentionDays'. The 0 argument
is less than the minimum allowed range of 1. Supply an argument that is greater than
or equal to 1 and then try the command again.
At line:1 char:65
+ Limit-EventLog -OverflowAction OverWriteAsNeeded -RetentionDays 0 -MaximumSize
+ ~
+ CategoryInfo : InvalidData: (:) [Limit-EventLog], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.LimitEventLogCommand

Тогда я попробовал запустить команду без параметра –RetentionDays, и это сработало.

Limit-EventLog -OverflowAction OverWriteAsNeeded -MaximumSize 64KB -LogName scriptingguys

Теперь я воспользуюсь командлетом Get-EventLog, чтобы убедиться, что изменения внесены. Вывод команды указывает на то, что внесение изменений произошло успешно.

C:\> Get-EventLog -list | ? log -eq scriptingguys
Max(K) Retain OverflowAction    Entries Log
------ ------ --------------    ------- ---
    64      0 OverwriteAsNeeded 0       ScriptingGuys

Я не могу обратиться к пустому журналу событий

Довольно интересно, что я не могу обратиться к журналу, не содержащему записей. Я пытаюсь получить содержимое журнала посредством командлета Get-EventLog и получаю следующую ошибку.

C:\> Get-EventLog -LogName scriptingguys
Get-EventLog : No matches found
At line:1 char:1
+ Get-EventLog -LogName scriptingguys
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:) [Get-EventLog], ArgumentException
+ FullyQualifiedErrorId : GetEventLogNoEntriesFound,Microsoft.PowerShell.Commands.GetEventLogCommand

Запись в журнал событий

Для записи события, мне понадобится следующая информация:

1. Имя журнала событий (в нашем случае – это ScriptingGuys)
2. Источник события (scripts)
3. EventID (я начну с 1)
4. Тип записи (Information, Warning, Error)
5. Сообщение (то, что я хочу записать)

В следующем примере я добавляю в журнал событий новую запись.

Write-EventLog -LogName ScriptingGuys -Source scripts -Message "Dude, it works ... COOL!" -EventId 0 -EntryType information

Теперь я снова воспользуюсь командлетом Get-EventLog, чтобы получить только что записанное событие.

C:\> Get-EventLog -LogName scriptingguys
Index Time         EntryType   Source  InstanceID Message
----- ----         ---------   ------  ---------- -------
    1 Jan 29 10:27 Information scripts          0 Dude, it wor...

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/01/use-powershell-to-create-and-to-use-a-new-event-log.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


I’m creating an ASP.NET application that will log some stuff to Windows EventLog. To do this an event source has to be created first. This requires administrative priviledges so I cannot do it in the ASP.NET app.

Is there an existing command-line application that is bundled with Windows that can create an event log source, or must I roll out my own?

asked Jan 15, 2009 at 13:22

Vilx-'s user avatar

Try PowerShell 2.0’s EventLog cmdlets. For PowerShell 2.0 and upwards:

  • Run New-EventLog once to register the event source:

      New-EventLog -LogName Application -Source MyApp
    
  • Then use Write-EventLog to write to the log:

      Write-EventLog 
          -LogName Application 
          -Source MyApp 
          -EntryType Error 
          -Message "Immunity to iocaine powder not detected, dying now" 
          -EventId 1
    

StayOnTarget's user avatar

StayOnTarget

11.8k10 gold badges52 silver badges84 bronze badges

answered Aug 22, 2011 at 23:29

roufamatic's user avatar

roufamaticroufamatic

18.2k7 gold badges57 silver badges87 bronze badges

4

You can also use Windows PowerShell with the following command:

if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
    [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
}

Make sure to check that the source does not exist before calling CreateEventSource, otherwise it will throw an exception.

For more info:

  • http://msdn.microsoft.com/en-us/library/9t766zhb.aspx

answered Feb 19, 2010 at 22:53

Luis Rocha's user avatar

Luis RochaLuis Rocha

1,38910 silver badges7 bronze badges

eventcreate2 allows you to create custom logs, where eventcreate does not.

answered Oct 5, 2009 at 21:12

Nick Bolton's user avatar

Nick BoltonNick Bolton

38.5k70 gold badges175 silver badges243 bronze badges

If someone is interested, it is also possible to create an event source manually by adding some registry values.

Save the following lines as a .reg file, then import it to registry by double clicking it:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\YOUR_EVENT_SOURCE_NAME_GOES_HERE]
"EventMessageFile"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\EventLogMessages.dll"
"TypesSupported"=dword:00000007

This creates an event source named YOUR_EVENT_SOURCE_NAME_GOES_HERE.

answered Nov 26, 2015 at 12:14

M. Jahedbozorgan's user avatar

M. JahedbozorganM. Jahedbozorgan

6,9142 gold badges46 silver badges51 bronze badges

Or just use the command line command:

Eventcreate

answered May 22, 2009 at 16:41

However the cmd/batch version works you can run into an issue when you want to define an eventID which is higher then 1000. For event creation with an eventID of 1000+ i’ll use powershell like this:

$evt=new-object System.Diagnostics.Eventlog(“Define Logbook”)
$evt.Source=”Define Source”
$evtNumber=Define Eventnumber
$evtDescription=”Define description”
$infoevent=[System.Diagnostics.EventLogEntryType]::Define error level
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber) 

Sample:

$evt=new-object System.Diagnostics.Eventlog(“System”)
$evt.Source=”Tcpip”
$evtNumber=4227
$evtDescription=”This is a Test Event”
$infoevent=[System.Diagnostics.EventLogEntryType]::Warning
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber)

answered Sep 10, 2015 at 14:09

R. Tettero's user avatar

PowerShell 7

This answer worked great in 5.x for me but not in 7.x. After some sleuthing, I got the following working:

Import-Module Microsoft.PowerShell.Management -UseWindowsPowerShell
New-EventLog -LogName Application -Source MyApp

I stumbled upon the module to import via this SO answer. Apparently, there’s a set of modules you can import for Windows only cmdlet’s depending upon your needs. I’m still trying to figure out how you would determine which module to import based upon your cmdlet.

answered Oct 13, 2022 at 20:13

spottedmahn's user avatar

spottedmahnspottedmahn

15k13 gold badges109 silver badges181 bronze badges

you can create your own custom event by using diagnostics.Event log class.
Open a windows application and on a button click do the following code.

System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "MyNewLog");

«MyNewLog» means the name you want to give to your log in event viewer.

for more information check this link
[ http://msdn.microsoft.com/en-in/library/49dwckkz%28v=vs.90%29.aspx]

answered May 31, 2014 at 14:58

3333's user avatar

33333333

431 silver badge9 bronze badges

0

  • Download source — 30.45 KB

Event.png

Fig-1 (Event viewer — Showing the new log with sample information)

Introduction

This article will give you an idea about how to create a Windows event log and write your custom message into the event log.

Background

Most of the developers are very much familiar with the Windows event log API. When developers create a Windows based application, it may be an ActiveX component, any customized DLL library, a service application, etc.; it is a very common practice to write several types of information into the event log, which is generated by that particular application runtime so we can easily keep track of all the information.

Using the Code

Before we start understanding the code, we need a little concept on System.Diagnostics namespace. We will use the namespace to manage an event log. The namespace System.Diagnostics provides a class name as “EventLog” to create and write a message into the eventlog.

Let’s take an example, our goal is to write a simple C# .NET class which will create a new log name as “myEventLog” and write a message “I will not say I have failed 1000 times; I will say that I have discovered 1000 ways that can cause failure – Thomas Edison.” as an information.

To achieve this, we need to use the following methods, properties and enum which will be found in the System.Diagnostics namespace.

Methods

  • SourceExists: Determines whether an event source is registered on the local computer or not.
  • CreateEventSource: Establishes an application as able to write event information to a particular log on the system.
    More details can be found at this link.
  • WriteEntry: Writes an entry in the event log, i.e., writes an information type entry, with the given message text, to the event log.
    More details can be found at this link.

Properties

  • Source: Gets or sets the source name to register and use when writing to the event log.
  • Log: Gets or sets the name of the log to read from or write to.

Enum

  • EventLogEntryType: Specifies the event type of an event log entry.
    More details can be found at this link.

Sample Code Example

public class ClsEventLog
  {
      public bool CreateLog(string strLogName)
      {
          bool Result = false;

          try
          {
                  System.Diagnostics.EventLog.CreateEventSource(strLogName, strLogName);
                  System.Diagnostics.EventLog SQLEventLog =
              new System.Diagnostics.EventLog();

                  SQLEventLog.Source = strLogName;
                  SQLEventLog.Log = strLogName;

                  SQLEventLog.Source = strLogName;
                  SQLEventLog.WriteEntry("The " + strLogName + " was successfully
          initialize component.", EventLogEntryType.Information);

                  Result = true;
          }
          catch
          {
              Result = false;
          }

          return Result;
      }
      public void WriteToEventLog(string strLogName
                                , string strSource
                                , string strErrDetail)
      {
          System.Diagnostics.EventLog SQLEventLog = new System.Diagnostics.EventLog();

          try
          {
              if (!System.Diagnostics.EventLog.SourceExists(strLogName))
                      this.CreateLog(strLogName);


              SQLEventLog.Source = strLogName;
              SQLEventLog.WriteEntry(Convert.ToString(strSource)
                                    + Convert.ToString(strErrDetail),
              EventLogEntryType.Information);

          }
          catch (Exception ex)
          {
              SQLEventLog.Source = strLogName;
              SQLEventLog.WriteEntry(Convert.ToString("INFORMATION: ")
                                    + Convert.ToString(ex.Message),
              EventLogEntryType.Information);
          }
          finally
          {
              SQLEventLog.Dispose();
              SQLEventLog = null;
          }
      }
  }

Conclusion

I hope that this article might be helpful to you. Enjoy!

History

  • 22nd August 2009: Initial post

На чтение 4 мин. Просмотров 17 Опубликовано

Журналы событий Windows являются огромным ресурсом, поскольку они могут не только помочь вам в устранении текущих системных проблем, но также могут предоставить вам предупреждающие знаки о потенциальных будущих проблемах. Таким образом, отслеживание событий в ваших системных записях может быть ключом к тому, чтобы ваша система работала должным образом. К сожалению, просмотр журналов событий или создание пользовательских представлений может быть трудоемким ручным процессом.

К счастью, у нас есть решение, которое позволит вам легко экспортировать и фильтровать записи журнала событий Windows, а затем отправлять их по электронной почте и/или сохранять в текстовом файле. Когда этот процесс настроен как часть запланированной задачи, вы можете получать, например, предупреждения и сообщения об ошибках по электронной почте.

Содержание

  1. Как это устроено
  2. конфигурация
  3. Примеры

Как это устроено

Наше решение работает с помощью бесплатной утилиты MyEventViewer от Nirsoft, которая позволяет легко экспортировать журналы событий Windows в файл, разделенный запятыми. На основе этого вывода мы разработали простой в настройке пакетный скрипт, который фильтрует эти результаты, а затем может отправить по электронной почте и/или сохранить отфильтрованный файл результатов. Поскольку результаты представляют собой файл, разделенный запятыми, его можно открыть в Excel (или в вашей любимой программе CSV), а затем отсортировать и отфильтровать.

конфигурация

Параметры конфигурации и параметры задокументированы в виде встроенных комментариев в сценарии, однако мы рассмотрим некоторые из них в некоторых деталях здесь.

Имя журнала событий

При указании журналов событий, из которых вы хотите захватить события, вы должны использовать полное системное имя журнала. Это не обязательно то, что вы видите в списке журналов Event Viewer.

Например, если вы хотите захватить события из журнала «Предупреждения Microsoft Office», перейдите в диалоговое окно «Свойства» журнала.

Запишите значение в поле «Полное имя», в данном случае «OAlerts». Это будет значение, которое вам нужно будет ввести в конфигурацию скрипта.

Типы событий

Значения для типов событий – это просто текст, который вы видите в столбце «Уровень» при просмотре журналов событий. Обычно это информация, предупреждение или ошибка, но разные журналы могут иметь разные значения.

Настройка запланированных задач

Типичное использование этого сценария, скорее всего, в автоматизированном процессе. Таким образом, чтобы убедиться, что между интервалом захвата и временем запуска процесса нет совпадений, вам нужно настроить запланированное задание Windows, чтобы дополнить время захвата.

Проще говоря, если ваша конфигурация настроена на захват событий за последний день, у вас должна быть запланированная задача, которая запускается один раз в день. Если ваша конфигурация настроена на захват за последний час, запланированное задание должно запускаться один раз в час. И т.п.

В качестве дополнительного примечания, чтобы приложение MyEventViewer могло получить необходимую информацию, необходимо выполнить соответствующую запланированную задачу с правами администратора на компьютере.

Примеры

Эта конфигурация будет отправлять сообщения об ошибках и предупреждениях из журналов событий системы и приложений, записанных в последний день (24 часа), на my@email.com, а также сохранять выходные данные в папке C: \ EventNotices:

  • EmailResults = 1
  • EmailTo=my@email.com
  • SaveResults = 1
  • SaveTo = C: \ EventNotices
  • TimeInterval = 3
  • TimeValue = 1
  • Бревна = System, Application
  • Типы = Ошибка, Предупреждение
  • Запланированное задание должно выполняться каждый день.

Эта конфигурация будет отправлять сообщения об ошибках по электронной почте только из журнала системных событий, записанных за последний час, на my@email.com:

  • EmailResults = 1
  • EmailTo=my@email.com
  • SaveResults = 0
  • TimeInterval = 2
  • TimeValue = 1
  • Бревна = System
  • Типы = Ошибка
  • Запланированное задание должно запускаться каждый час.

Эта конфигурация сохранит только ошибки и предупреждения из журнала событий приложений за последнюю неделю на рабочий стол пользователя JFaulkner (Windows 7) C: \ Users \ jfaulkner \ Desktop:

    • EmailResults = 0
    • SaveResults = 1
    • SaveTo = C: \ Users \ jfaulkner \ Desktop
    • TimeInterval = 3
    • TimeValue = 7
    • Бревна = Применение
    • Типы = Ошибка, Предупреждение
    • Запланированное задание должно выполняться каждую неделю.

Скачать сценарий уведомлений журнала событий с TutoryBird

Загрузите MyEventViewer от Nirsoft

Скачать Blat от Sourceforge

  • Создать установочный диск windows 10 на флешку бесплатно
  • Создать рабочий стол windows 10 комбинация клавиш
  • Создать свой vpn сервер на windows
  • Создать установочную флешку windows 10 торрент
  • Создать простой том windows 10 что это