C# 4.0 事件未在windows事件中生成

C# 4.0 事件未在windows事件中生成,c#-4.0,log4net,log4net-configuration,log4net-appender,C# 4.0,Log4net,Log4net Configuration,Log4net Appender,我使用log4net进行日志记录,我有两个appender一个是文件,另一个是事件日志appender。 我已经参考了这个链接 我的问题是日志是在文件中生成的,而不是在windows事件中生成的 我的代码是: 代码端是: public class LogManager { private static readonly ILog eventLogger = log4net.LogManager.GetLogger("EventLogAppender"); private st

我使用log4net进行日志记录,我有两个appender一个是文件,另一个是事件日志appender。 我已经参考了这个链接

我的问题是日志是在文件中生成的,而不是在windows事件中生成的

我的代码是:


代码端是:

public class LogManager
{
    private static readonly ILog eventLogger = log4net.LogManager.GetLogger("EventLogAppender");
    private static readonly ILog fileLogger = LogManager.GetLogger("FileLogger");

    public void Error(Exception ex)
    {
        eventLogger.Logger.Log(eventLogger.GetType(), Level.Error, ex.Source, ex);
    }
    public void Info(string message)
    {
        LoggingEventData e = new LoggingEventData()
         {
             Level = Level.Fatal,
             Message = message
         };
        eventLogger.Logger.Log(new LoggingEvent(e));
        fileLogger.Logger.Log(new LoggingEvent(e));
    }
}
我使用应用程序_错误来表示全局级别的错误

 protected void Application_Error(object sender, EventArgs e)
    {
        var httpContext = ((MvcApplication)sender).Context;
        var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
        var currentController = " ";
        var currentAction = " ";

        if (currentRouteData != null)
        {
            if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString()))
            {
                currentController = currentRouteData.Values["controller"].ToString();
            }
            if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString()))
            {
                currentAction = currentRouteData.Values["action"].ToString();
            }
        }

        var ex = Server.GetLastError();
        var controller = new ErrorController();
        var routeData = new RouteData();
        var action = "Index";

        if (ex is HttpException)
        {
            var httpEx = ex as HttpException;

            switch (httpEx.GetHttpCode())
            {
                case 404:
                    action = "NotFound";
                    break;
                case 401:
                    action = " UnAuthorized";
                    break;
                // others if any
                default:
                    action = "Index";
                    break;
            }
        }
        new LogManager().Error(ex);
        httpContext.ClearError();
        httpContext.Response.Clear();
        httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500;
        httpContext.Response.TrySkipIisCustomErrors = true;
        routeData.Values["controller"] = "Error";
        routeData.Values["action"] = action;
        controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction);
        ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));
    }

如果我错了,请说明为什么windows事件中未记录错误和信息

我认为您在代码中未正确引用
EventLogger

ILog eventLogger = log4net.LogManager.GetLogger("EventLogAppender");
应改为:

ILog eventLogger = log4net.LogManager.GetLogger("EventLogger");

这应该是记录器名称还是追加器名称?它应该是记录器名称。appender是从记录器配置中引用的。是否需要在appender节点的配置中提供应用程序名称?如果是,那么它应该是名称空间?我已经根据您上面提到的更改了代码,仍然没有生成日志。这是否需要管理员权限?我没有管理员权限,但我的visual studio是在管理员权限下运行的。您可以指定应用程序名称-它可以是任何名称。但是如果您不指定,那么我认为它默认为
AppDomain.FriendlyName
。但我建议您不要依赖于默认设置,而是指定一些应用程序名称。现在,此applicationName对应于事件日志中的事件源。管理员权限仅用于创建此事件源-这是一次性活动。将日志条目写入该源不需要管理员权限。见此: