log4net应该如何在应用程序中正确设置“ EventLogAppender”的“源”?

0909EM

我有一个包含多个部分的应用程序。

我在整个过程中都使用log4net记录事件,我希望这些事件具有一个与它们来自的应用程序中的WHERE相匹配的源(您知道“源”的含义)。因此,我在“应用程序和服务日志”下有一个日志,并按照您的期望设置了log4net。

在此处输入图片说明

在log4net配置中,有一个元素“ applicationName”,根据文档说明,该元素指定“将在其中存储消息的日志的名称”。

文档中的示例显示

<applicationName value="MyApp" />

Log4Net使用“ applicationName”中的值记录事件。根据log4net源代码中的文档,“应使用ApplicationName属性来区分事件”。

因此,假设LogName设置正确,我希望在事件查看器的“应用程序和服务日志”下看到我的“ LogName”,然后只需要设置applicationName即可正确获取源。但是,applicationName似乎仅是在配置中设置的...但这意味着所有事件都记录在同一源下:

在此处输入图片说明

源名称应如何设置...?是否有其他方法可以做到这一点?

0909EM

我没有找到答案,所以我下载了log4net的源代码并决定进行查找。

以下代码段在log4net中设置ApplicationName

    private static void SetEventSource(string sourceName)
    {
        var repository = LogManager.GetRepository();
        if (repository != null)
        {
            var appender = repository.GetAppenders().Where(x => x.Name == "eventLogAppender").FirstOrDefault();
            if (appender is log4net.Appender.EventLogAppender)
            {
                var eventAppender = (log4net.Appender.EventLogAppender)appender;
                eventAppender.ApplicationName = sourceName;
                eventAppender.ActivateOptions();
            }
        }
    }

我有一个“ LoggingSources”的枚举,因此当应用程序启动以确保日志源存在时,我只是遍历此过程。

    public static void ConfigureWindowsEvents()
    {
        // Create event log sources for each of our Logging types
        var loggingEvents = Enum.GetValues(typeof(LoggingSources));
        foreach (var item in loggingSources)
        {
            string source = item.ToString();

            if (!EventLog.SourceExists(source))
            {
                EventLog.CreateEventSource(source, EVENT_LOG_NAME);
            }
        }
    }

然后,当我记录一个事件时,我设置了源和事件ID

    public static void SetThreadContextAndLog(LoggingSources eventId, Action logAction)
    {
        if (logAction != null)
        {
            log4net.ThreadContext.Properties[EVENT_ID_KEY] = (int)eventId;
            try
            {
                SetEventSource(eventId.ToString());
                logAction(); 
            }
            finally
            {
                log4net.ThreadContext.Properties[EVENT_ID_KEY] = DEFAULT_EVENT_ID;
            }
        }
    }

调用方法如下...

    public static void LogEvent(LoggingSources pEvent, string pMessage, EventLogEntryType pEventType)
    {
        SetThreadContextAndLog(pEvent, () =>
        {
            if (pEventType == EventLogEntryType.Warning)
            {
                Log.Warn(pMessage);
            }
        });
    }

这导致正确设置了源ID和事件ID ...

在此处输入图片说明

这有点麻烦,但我看不到不创建自定义Appender即可更简单地设置日志源的方法...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Spring应用程序中设置数据源

来自分类Dev

如何在.net Core 3.1应用程序中注入Log4net日志记录

来自分类Dev

如何在Windows应用程序中使用Log4net登录文件

来自分类Dev

如何在Windows应用程序中使用Log4net登录文件

来自分类Dev

如何在WS应用程序中获取图像源

来自分类Dev

在XAML中正确设置绑定源

来自分类Dev

如何在WPF应用程序中使用App.config进行log4net配置

来自分类Dev

如何在iOS 8中正确设置应用程序标志值?

来自分类Dev

如何在Vue Nuxt应用程序中正确设置动态sitemap.xml路由?

来自分类Dev

如何设置图像驻留在应用程序文件夹中的Image Control的源

来自分类Dev

如何设置图像驻留在应用程序文件夹中的Image Control的源

来自分类Dev

如何使Log4Net写入控制台应用程序中的EventLog?

来自分类Dev

EventLogAppender:可疑的“修复”属性

来自分类Dev

为.Net Core 3.1应用程序配置log4net的最简单正确方法

来自分类Dev

如何在IIS中正确发布和更新ASP.NET应用程序

来自分类Dev

如何在.NET应用程序中正确检查与mysql的数据库连接?

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

如何在IIS中正确发布和更新ASP.NET应用程序

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

Rails4-如何在Rails应用程序中正确传递值?

来自分类Dev

如何在XFCE中正确集成Gnome应用程序?

来自分类Dev

如何在Typescript中正确键入应用程序状态?

来自分类Dev

如何在XFCE中正确集成Gnome应用程序?

来自分类Dev

如何在iOS应用程序中正确弹出视图?

来自分类Dev

该页面无法在我的flutter应用程序中正确加载页面(已更新)无效的参数:源不得为null

来自分类Dev

Spring MVC应用程序中如何在Hibernate中使用Jboss数据源

来自分类Dev

如何在Java Web应用程序中使用数据源测试DAO?

来自分类Dev

如何在IOS混合Xamarin应用程序中允许跨源

来自分类Dev

如何在 c++ builder 6 中从应用程序源创建 dll?

Related 相关文章

  1. 1

    如何在Spring应用程序中设置数据源

  2. 2

    如何在.net Core 3.1应用程序中注入Log4net日志记录

  3. 3

    如何在Windows应用程序中使用Log4net登录文件

  4. 4

    如何在Windows应用程序中使用Log4net登录文件

  5. 5

    如何在WS应用程序中获取图像源

  6. 6

    在XAML中正确设置绑定源

  7. 7

    如何在WPF应用程序中使用App.config进行log4net配置

  8. 8

    如何在iOS 8中正确设置应用程序标志值?

  9. 9

    如何在Vue Nuxt应用程序中正确设置动态sitemap.xml路由?

  10. 10

    如何设置图像驻留在应用程序文件夹中的Image Control的源

  11. 11

    如何设置图像驻留在应用程序文件夹中的Image Control的源

  12. 12

    如何使Log4Net写入控制台应用程序中的EventLog?

  13. 13

    EventLogAppender:可疑的“修复”属性

  14. 14

    为.Net Core 3.1应用程序配置log4net的最简单正确方法

  15. 15

    如何在IIS中正确发布和更新ASP.NET应用程序

  16. 16

    如何在.NET应用程序中正确检查与mysql的数据库连接?

  17. 17

    如何在ASP.NET MVC多层应用程序中正确进行单元测试?

  18. 18

    如何在IIS中正确发布和更新ASP.NET应用程序

  19. 19

    如何在ASP.NET MVC多层应用程序中正确进行单元测试?

  20. 20

    Rails4-如何在Rails应用程序中正确传递值?

  21. 21

    如何在XFCE中正确集成Gnome应用程序?

  22. 22

    如何在Typescript中正确键入应用程序状态?

  23. 23

    如何在XFCE中正确集成Gnome应用程序?

  24. 24

    如何在iOS应用程序中正确弹出视图?

  25. 25

    该页面无法在我的flutter应用程序中正确加载页面(已更新)无效的参数:源不得为null

  26. 26

    Spring MVC应用程序中如何在Hibernate中使用Jboss数据源

  27. 27

    如何在Java Web应用程序中使用数据源测试DAO?

  28. 28

    如何在IOS混合Xamarin应用程序中允许跨源

  29. 29

    如何在 c++ builder 6 中从应用程序源创建 dll?

热门标签

归档