EventLog WriteEntry пишет не в назначенный журнал, а в журнал приложения. - PullRequest
5 голосов
/ 20 февраля 2012

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

Мой код такой, как показано ниже:

public class WinEventLog : EventLog, ILogger
{
    private const string LOG_SourceName = "DataGen_Source";
    private const string LOG_SysLogName = "Pool_Log";

    private bool _isInitialized = false;

    public WinEventLog()
        : base()
    {
        Initialize();
    }

    public void LogMessage(MessageLevel level, string message)
    {
        WriteEntry(message, level.EventLogType());
    }

    public void LogMessage(string source, MessageLevel level, string message)
    {
        WriteEntry(source, message, level.EventLogType());
    }

    public void Initialize()
    {
        if (!_isInitialized)
        {
            this.BeginInit();
            this.EndInit();

            if (!System.Diagnostics.EventLog.SourceExists(LOG_SourceName))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    LOG_SourceName, LOG_SysLogName);
            }
            Source = LOG_SourceName;
            Log = LOG_SysLogName;
            _isInitialized = true;
        }
    }
} 

Однако регистратор не записывает в журналЯ указываю, Pool_Log, но в журнале приложений.

Есть идеи, почему это происходит?


РЕДАКТИРОВАТЬ

Я ссылался на EXACT того же компонентаиз другого проекта, и в этой ситуации он написал в правильный EventLog !!!

Я озадачен!

Спасибо

Ответы [ 4 ]

2 голосов
/ 20 февраля 2012

Вы можете попробовать следующее:

evntSource = "MySource";

evntLog = "MyLog"; //This replace Application!
evntEvent = "My Event";
if (!EventLog.SourceExists(evntSource))
    EventLog.CreateEventSource(evntSource,evntLog); 

EventLog.WriteEntry(evntSource,evntEvent);
2 голосов
/ 20 февраля 2012

похоже, что вы создаете источник, но не создаете реальный журнал, например, я бы сделал что-то вроде следующего, если бы я хотел создать SQLEventLog

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;
}

дайте мне знать, если это поможет .. похоже, вам не хватает EventLog Creation

0 голосов
/ 16 августа 2017

проверка, если источник журнала событий не длинный и не содержит специальных значащих символов, таких как. \ Или ./

В моем случае это было причиной того, что событие отправлялось в журнал приложений вместо назначенного настраиваемого журнала.

public static void EventLogWrite(string Source, string Message, short categoryID, int eventID, EventLogEntryType entryType)
{
#if !DEBUG
  if (!EventLog.SourceExists(Source))
    EventLog.CreateEventSource(Source.RefineText(), "My Log Name");

  EventLog.WriteEntry(Source.RefineText(), Message.TrimText(3000), entryType, eventID, categoryID);
#endif
}
0 голосов
/ 09 июня 2012

Ваша ошибка может быть связана с разрешениями.Проверьте разрешения для разделов реестра источника события.

Наконец, вы не должны использовать WriteEntry, вы получите исключение безопасности и другие проблемы.

По моему мнению, вы должны использовать WriteEvent вместо этого: https://security.stackexchange.com/q/15857/396

...