我有 Azure 应用服务。在 Visual Studio 2019 中,我可以执行以下操作来从中获取事件日志:
在 Visual Studio 2022 中,没有云资源管理器。他们建议我们改用 Azure 存储资源管理器。我无法在存储资源管理器中找到事件日志文件。
有谁知道如何在没有 Visual Studio 2019 的情况下从 GUI 或命令行获取它?
我有一个 powershell 脚本,我想将其添加到事件日志中。
当我输入 Write-Eventlog 命令时,我收到一条错误消息。
Write-EventLog -Logname autosnapshot -Source 'D:\script autoSnapshots.ps1' -EventId 8000 -Entrytype Information -Message 'Creates Snapshots and deletes snapshots older than 1 day'
Run Code Online (Sandbox Code Playgroud)
我虽然语法是正确的,但收到一条错误消息。
Write-EventLog: The term 'Write-EventLog' is not recognized as a name of a cmdlet, function, script file, or executable program.
Run Code Online (Sandbox Code Playgroud)
检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。
有人知道我做错了什么吗?
任何帮助表示赞赏。
我正在尝试为我的cmd行应用程序创建一个事件记录器.但是,当它第一次尝试创建日志时,我收到此错误.
找不到源,但无法搜索部分或全部事件日志.无法访问的日志:安全性.
所以我发现这是因为Windows 7和一些新的安全性.所以现在我必须给.exe管理员权限.
有没有解决方法,所以它不需要管理员权限?我不知道如果他们必须满足于使用管理员权限运行我的应用程序,人们是否会感觉太好.
我打算稍后将它放在Windows 2008机器上,所以我猜它会遇到同样的问题.
我编写了一个C#windows服务,可以将消息写入自定义EventLog或任意数量的文件.这些消息都标记有一些优先级(因此,例如,只有ERROR和WARNING存储在EventLog中,但如果需要,可以将更多内容存储到文件中).
我现在要做的是创建一个GUI,可以监听这些消息并实时显示它们.允许用户观看当前的消息(在任何他们想要的优先级),而不需要的一切存储到文件中.我认为这是某种形式的挂钩到服务的一个单独的程序,但我不能确定从哪里开始.
这是我第一次真正的Windows服务,所以我似乎缺少一些关键字找出如何做到这一点?是否有任何代码样本,教程,参考文献等,为如何做这样的事情?
更新
很多有用的答案,我喜欢它,有很多方法可以解决问题!我想我将实现一个基于WCF的自托管解决方案.我仍然非常关注细节,因为我正在努力了解WCF(我相信它对我来说在其他项目中非常有用)...但到目前为止,我发现这里的视频是最多的有用的介绍方法.
我试图按照这个演练.
我正在使用Visual Studio 2010 Premium.
我在服务器资源管理器或事件查看器中看到的唯一事件是"服务已成功启动".并且"服务已成功停止".
这是服务代码:
namespace MyNewService
{
public partial class MyNewService : ServiceBase
{
public MyNewService()
{
InitializeComponent();
if (!EventLog.SourceExists("MySource"))
{
EventLog.CreateEventSource("MySource", "MyNewLog");
}
eventLog1.Source = "MySource";
eventLog1.Log = "MyNewLog";
}
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart");
}
protected override void OnStop()
{
eventLog1.WriteEntry("In onStop.");
}
}
}
Run Code Online (Sandbox Code Playgroud) 到目前为止,我的所有应用程序都只记录到文件.它对我来说很好,我从来没有遇到任何问题.
我的一位朋友建议我也可以使用Windows事件日志,但我不确定.我一直认为事件日志只适用于一些非常重要的消息,如果可以避免,我不应该写入.
我什么时候可以/我应该写入窗口事件日志?
我有一个我在多个ClickOnce应用程序中使用的库.如果这个库出错,我想把错误写入windows EventLog.
我发现了一篇知识库文章,但似乎需要管理员权限来搜索源代码.特别是在尝试搜索Security事件日志时会发生窒息.
有没有办法解决这个问题并在ClickOnce应用程序中写入事件日志?我看到一个人试图写一个已知来源,但他们似乎无法找到一直可用的来源.
编辑:
根据这里的答案,我创建了一个程序,该程序包含在我的应用程序中,我可以在第一次运行时运行以设置可以获得管理员权限的事件源.但是一旦创建了源代码,我似乎仍然无法写入它.
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
if (!EventLog.SourceExists("ATE"))
{
EventLog.CreateEventSource("ATE", "Application");
}
}
Run Code Online (Sandbox Code Playgroud)
是否正确创建了一个源(相当于Yannick Blondeau提供的注册表编辑).当我在非提升的应用程序中写入源时,我收到一个新的错误,但它仍然无法正常工作.新错误是:
Cannot open log for source 'ATE'. You may not have write access.
编辑2:
我现在一直试图让它通过CustomSD键上的注册表编辑工作.我尝试添加(A ;; 0x7 ;;; AU)为经过身份验证的用户提供完全访问权限,但似乎没有任何效果.
我EventLog在我的应用程序中创建了一个对象,我用来记录到我自己的日志,创建如下:
if (!System.Diagnostics.EventLog.SourceExists("MyApplication")) {
System.Diagnostics.EventLog.CreateEventSource(
"MySource", "MyApplication");
}
eventLog.Source = "MySource";
eventLog.Log = "MyApplication";
Run Code Online (Sandbox Code Playgroud)
我记录这样的条目:
eventLog.WriteEntry("some log line");
Run Code Online (Sandbox Code Playgroud)
检查eventLog对象时,它说Log设置为"MyApplication"。但是,日志记录始终转到 Windows 应用程序日志。我还必须说,在我将另一个源注册到同一日志之前,代码一直有效。该“新”源正确记录。
更新查看注册表时,正确创建了源(作为日志的子项)
可能有什么问题?
我的 C# 应用程序订阅 Windows 事件日志消息:
var subscriptionQuery = new EventLogQuery(Settings.Default.LogPath, PathType.LogName, Settings.Default.LogQuery);
_watcher = new EventLogWatcher(subscriptionQuery);
_watcher.EventRecordWritten += EventLogEventRead;
Run Code Online (Sandbox Code Playgroud)
当消息发生时,EventLogEventRead处理程序接收一个System.Diagnostics.Eventing.Reader.EventLogRecord包含事件数据的对象。此信息包括EventProperty对象的集合。问题是:EventProperty只定义了一个值,而不是属性的名称。但是,当我在 Windows 事件日志查看器中打开相同的事件时,它会显示带有名称的属性。现在的问题是:如何获取事件属性名称?
我想在Golang中推送订阅 Windows事件日志
我应该如何传递回调函数?
EVT_SUBSCRIBE_CALLBACK是函数的指针,如
typedef DWORD ( WINAPI *EVT_SUBSCRIBE_CALLBACK)(
EVT_SUBSCRIBE_NOTIFY_ACTION Action,
PVOID UserContext,
EVT_HANDLE Event
);
Run Code Online (Sandbox Code Playgroud)
所以,我的变体看起来像这样:
func logCallback() syscall.Handle {
cb := func(_ uintptr, _ uintptr, _ uintptr) uint64 {
fmt.Printf("callback called %v", data)
return 0
}
ptr := syscall.NewCallback(cb)
return syscall.Handle(ptr) // type syscall.Handle uintptr
}
Run Code Online (Sandbox Code Playgroud)
我成功订阅处理程序没有错误,但它仍然无法正常工作.有什么想法吗?我应该先在哪里看?