自定义事件日志未显示
Custom Event Log not showing
目标:
要在事件查看器下的应用程序和服务日志下创建我自己的自定义日志:
代码片段:
.Net 核心 3.1
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, logging) =>
{
logging.ClearProviders();
logging.AddConfiguration(hostContext.Configuration.GetSection("Logging"));
logging.AddEventLog(
eventLogSettings =>
{
eventLogSettings.LogName = "My Log";
eventLogSettings.SourceName = "Dummy";
});
logging.AddConsole();
});
// somewhere in my code, I use ILogger to write to the log
配置
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information"
}
}
问题:
在我的开发机器上进行测试时,我在控制台上看到了日志条目,但在事件查看器中没有看到日志。如果我删除了 LogName,该日志将显示在事件查看器的应用程序日志中。
我错过了什么?
谢谢!
我在应用程序日志中找到了这个:
无法找到来自源应用程序的事件 ID 0 的描述。引发此事件的组件未安装在您的本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件。
如果事件起源于另一台计算机,则显示信息必须与事件一起保存。
活动中包含以下信息:
无法记录 .NET 应用程序事件。找不到来源,但无法搜索到部分或所有事件日志。要创建源,您需要获得读取所有事件日志的权限,以确保新的源名称是唯一的。不可访问的日志:安全。
消息资源存在,但在 string/message table
中找不到消息
分辨率:
关闭 VS 并以“管理员身份”重新打开它
另一种快速添加新应用程序作为事件源的方法,如果您收到“无法记录 .NET 应用程序事件”,只需 运行 以下具有提升权限的 PowerShell cmdlet。
New-EventLog -Source NAME_OF_APPLICATION -LogName NAME_OF_LOG
NAME_OF_APPLICATION 是您希望作为数据源的应用程序的名称,NAME_OF_LOG 是您希望事件出现在其中的日志的名称。如果NAME_OF_LOG 是现有日志,它只会将您的应用程序作为事件源添加到该日志,如果它是新日志,它会在您第一次尝试向其写入事件时创建日志。
我有一个使用 .NET Core 3.1 (3.1.404 SDK) 使用“worker”模板创建的 dotnet 应用程序
这种添加事件日志的方式不起作用(见下文)
hostBuilder.ConfigureLogging(logging =>
logging.AddEventLog(new EventLogSettings()
{
SourceName = "MySourceName",
LogName = "MyLogName"
}));
虽然这个有效:
hostBuilder.ConfigureServices((hostContext, services) => //DI
{
ConfigureTheServices(hostContext, services);
//This way to add Event Logs does work - (first create the SourceName inside LogName for WindowsEventLog using "admin" credentials
services.Configure<EventLogSettings>(settings =>
{
settings.SourceName = "MySourceName";
settings.LogName = "MyLogName";
});
});
目标:
要在事件查看器下的应用程序和服务日志下创建我自己的自定义日志:
代码片段:
.Net 核心 3.1
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, logging) =>
{
logging.ClearProviders();
logging.AddConfiguration(hostContext.Configuration.GetSection("Logging"));
logging.AddEventLog(
eventLogSettings =>
{
eventLogSettings.LogName = "My Log";
eventLogSettings.SourceName = "Dummy";
});
logging.AddConsole();
});
// somewhere in my code, I use ILogger to write to the log
配置
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information"
}
}
问题:
在我的开发机器上进行测试时,我在控制台上看到了日志条目,但在事件查看器中没有看到日志。如果我删除了 LogName,该日志将显示在事件查看器的应用程序日志中。 我错过了什么?
谢谢!
我在应用程序日志中找到了这个:
无法找到来自源应用程序的事件 ID 0 的描述。引发此事件的组件未安装在您的本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件。 如果事件起源于另一台计算机,则显示信息必须与事件一起保存。
活动中包含以下信息: 无法记录 .NET 应用程序事件。找不到来源,但无法搜索到部分或所有事件日志。要创建源,您需要获得读取所有事件日志的权限,以确保新的源名称是唯一的。不可访问的日志:安全。 消息资源存在,但在 string/message table
中找不到消息分辨率:
关闭 VS 并以“管理员身份”重新打开它
另一种快速添加新应用程序作为事件源的方法,如果您收到“无法记录 .NET 应用程序事件”,只需 运行 以下具有提升权限的 PowerShell cmdlet。
New-EventLog -Source NAME_OF_APPLICATION -LogName NAME_OF_LOG
NAME_OF_APPLICATION 是您希望作为数据源的应用程序的名称,NAME_OF_LOG 是您希望事件出现在其中的日志的名称。如果NAME_OF_LOG 是现有日志,它只会将您的应用程序作为事件源添加到该日志,如果它是新日志,它会在您第一次尝试向其写入事件时创建日志。
我有一个使用 .NET Core 3.1 (3.1.404 SDK) 使用“worker”模板创建的 dotnet 应用程序
这种添加事件日志的方式不起作用(见下文)
hostBuilder.ConfigureLogging(logging =>
logging.AddEventLog(new EventLogSettings()
{
SourceName = "MySourceName",
LogName = "MyLogName"
}));
虽然这个有效:
hostBuilder.ConfigureServices((hostContext, services) => //DI
{
ConfigureTheServices(hostContext, services);
//This way to add Event Logs does work - (first create the SourceName inside LogName for WindowsEventLog using "admin" credentials
services.Configure<EventLogSettings>(settings =>
{
settings.SourceName = "MySourceName";
settings.LogName = "MyLogName";
});
});