当前位置: 首页 > 知识库问答 >
问题:

写入Windows应用程序事件日志

邹禄
2023-03-14

是否有写入此事件日志的方法:

或者至少是其他一些Windows默认日志,在那里我不必注册事件源?

共有3个答案

刘高峯
2023-03-14

您可以使用EventLog类,如关于如何:写入应用程序事件日志(Visual C#)的说明:

var appLog = new EventLog("Application");
appLog.Source = "MySource";
appLog.WriteEntry("Test log message");

但是,您需要使用管理权限配置此源“MySource”:

使用WriteEvent和WriteEntry将事件写入事件日志。您必须指定一个事件源来写入事件;您必须在使用源写入第一个条目之前创建和配置事件源。

屠兴旺
2023-03-14

如MSDN(例如https://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog(v=vs.110). aspx)中所述,检查不存在的源并创建源需要管理员权限。

但是可以在没有的情况下使用源“应用程序”。在我在Windows 2012 Server r2下的测试中,我使用“应用程序”源获得了以下日志条目:

找不到源应用程序中事件ID xxxx的说明。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件。如果事件源于另一台计算机,则显示信息必须与事件一起保存。事件包含以下信息:{my event entry message}消息资源存在,但在字符串/消息表中找不到该消息

我定义了以下方法来创建源:

    private string CreateEventSource(string currentAppName)
    {
        string eventSource = currentAppName;
        bool sourceExists;
        try
        {
            // searching the source throws a security exception ONLY if not exists!
            sourceExists = EventLog.SourceExists(eventSource);
            if (!sourceExists)
            {   // no exception until yet means the user as admin privilege
                EventLog.CreateEventSource(eventSource, "Application");
            }
        }
        catch (SecurityException)
        {
            eventSource = "Application";
        }

        return eventSource;
    }

我用currentAppName=AppDomain来调用它。CurrentDomain。友好名称

也许可以使用EventLogPermission类来代替这个try/catch,但我们不确定是否可以避免这个catch。

也可以在外部创建源,例如在提升的Powershell中:

New-EventLog -LogName Application -Source MyApp

然后,在上述方法中使用“MyApp”将不会生成异常,并且可以使用该源创建事件日志。

闾丘鸣
2023-03-14

是的,有一种方法可以写入您正在查找的事件日志。您不需要创建新的源,只需使用现有的源,它通常与事件日志的名称相同,而且在某些情况下(如事件日志应用程序),可以在没有管理权限的情况下访问*。

*其他无法直接访问的情况是安全事件日志,例如,它只能由操作系统访问。

我使用以下代码直接写入事件日志应用程序:

using (EventLog eventLog = new EventLog("Application")) 
{
    eventLog.Source = "Application"; 
    eventLog.WriteEntry("Log message example", EventLogEntryType.Information, 101, 1); 
}

如您所见,EventLog源代码与EventLog的名称相同。原因可以在事件源@Windows开发中心中找到(我用粗体标出了引用源名称的部分):

Eventlog键中的每个日志都包含称为事件源的子键。事件源是记录事件的软件的名称。它通常是应用程序的名称或应用程序的子组件的名称(如果应用程序很大)。最多可以向注册表添加16384个事件源。

 类似资料:
  • 本文向大家介绍Powershell使用WINDOWS事件日志记录程序日志,包括了Powershell使用WINDOWS事件日志记录程序日志的使用技巧和注意事项,需要的朋友参考一下 通常,人们使用基于文件的日志。这样做没有什么问题,但是使用WINDOWS提供系统内部日志会更加简单。 如果你有管理权限,你可以随时创建一个新的日志: 该命令创造了一个名为Mylog的日志,这个事件源自”JobDUE”,”

  • 我们目前正在将几个Grails(2.4.4)应用程序部署到一个Tomcat7服务器上,并且已经完全按照这里所描述的tomcat-SLF4j-logback配置了日志记录。 我们希望通过一个logback.xml文件配置所有grails应用程序,并将所有应用程序记录到一个文件中,但按照grails的application.properties中定义的应用程序名称区分日志消息: 我们的logback.

  • 问题内容: 有没有可用于Java的库来侦听用户注销和其他Windows事件?(如果它支持多个平台,那就更好了!) 我记得几年前曾读过有关此类图书馆的文章,但现在似乎找不到。我已经看到其他线程使用带有win32ts的Python来做基本上相同的事情。 如果它是免费的和/或开源的,那就更好了。 谢谢。 注意 :使用的候选解决方案无法与一起正常使用。我仍在寻找适用于javaw的解决方案。请参阅Java错

  • a.cs文件: 公共活动MyEventHandler Ontagload; 私有void btnLoad_Click(object sender,EventArgs e){if(OnTagLoad!=null){OnTagLoad(sender,e,runTimeData);}} 每当我单击Load按钮时,事件应该只触发一次。我们如何在windows窗体中实现这一点。 感谢你的帮助。

  • 我有一个应用程序,它试图将字符串序列化为资产目录下的文本文件。写入操作不会引发任何异常,尽管写入操作后文件为空(这意味着写入操作没有成功)。 我的问题是为什么不能写入文件。

  • 我正在尝试将Azure App insights service集成到service fabric App中,用于日志记录和检测。我正在本地VM上运行fabric代码。我完全遵循了这里的文档[场景2]。docs.microsoft.com上的其他资源似乎也指明了相同的步骤。[例如:https://docs.microsoft.com/en-us/Azure/service-fabric/servi