EventLog WriteEntry不写入指定的日志,而是写入应用程序日志
本文关键字:日志 应用程序 WriteEntry EventLog | 更新日期: 2023-09-27 18:25:07
我有一个应用程序,我想在其中向事件日志写入条目记录器是通过MEF实例化的。我创建了一个派生类,以便能够在使用它之前执行日志初始化
我的代码如下:
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,而是写入应用程序日志。
知道为什么会发生这种事吗?
编辑
我引用了来自其他项目的相同组件,在这种情况下,它写入了正确的EventLog!!!
我很困惑!
感谢
看起来您正在创建源,但没有创建实际的日志。例如,如果我想创建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创建
您可以尝试以下操作:
evntSource = "MySource";
evntLog = "MyLog"; //This replace Application!
evntEvent = "My Event";
if (!EventLog.SourceExists(evntSource))
EventLog.CreateEventSource(evntSource,evntLog);
EventLog.WriteEntry(evntSource,evntEvent);
您的错误可能与权限有关。检查对事件源的注册表项的权限。
最后,你不应该使用WriteEntry,你会得到一个安全异常和其他问题。
在我看来,您应该使用WriteEvent,而不是查看:https://security.stackexchange.com/q/15857/396
检查事件日志源是否不长并且不包含特殊有意义的字符,如.''或。/
在我的案例中,这是事件进入应用程序日志而不是指定的自定义日志的原因。
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
}