问题描述
在系统出错时通过log4net写日志的类,但在写WriteEventLog()写日志的方法中,CurrentSessionInfo的内容永远是“AnonymousUserAndSystemSessionisNull”,请问为什么会这样呢?publicclassEventLog{#region私有构造函数,单件模式,防止被实例化///<summary>///私有构造函数,单件模式,防止被实例化///</summary>privateEventLog(){}#endregion#region是否启用日志事件跟踪///<summary>///是否启用日志事件跟踪///</summary>protectedstaticboolEnableEvent{get{returnConfigInfo.WEB_SYSTEM_ENABLEEVENTLOG;}}#endregion#region事件信息体结构///<summary>///事件信息体结构///</summary>privatestructEventBody{#region当前会话信息属性///<summary>///当前会话信息属性///</summary>publicstringCurrentSessionInfo{get{StringBuilderSessionInfo=newStringBuilder();if(HttpContext.Current!=null&&HttpContext.Current.Session!=null){for(inti=0;i<HttpContext.Current.Session.Count;i++){SessionInfo.Append("rntSession[").Append(HttpContext.Current.Session.Keys[i]).Append("]=").Append(TypeParseHelper.StringParse(NetHelper.CurrentContext.Session[i]));}}if(SessionInfo.Length==0){return"AnonymousUserAndSystemSessionisNull!";}else{returnSessionInfo.ToString();}}}#endregion#region远程主机IP地址///<summary>///远程主机IP地址///</summary>publicstringUserHostAddress{get{returnNetHelper.GetIP();}}#endregion#region出错页面地址///<summary>///出错页面地址///</summary>publicstringErrorPage{get{returnRequestHelper.GetUrl();}}#endregion#region页面来源地址///<summary>///页面来源地址///</summary>publicstringReferrerPage{get{returnRequestHelper.GetUrlReferrer();}}#endregion#region相关变量///<summary>///事件等级变量///</summary>publicEventLevelEnumEventLevel;///<summary>///事件源变量///</summary>publicEventSourceEnumEventSource;///<summary>///事件标题变量///</summary>publicstringEventTitle;#endregion}#endregion#region初始化log4net///<summary>///初始化log4net///</summary>publicstaticvoidInitializelog4net(){//log4net.Config.DOMConfigurator.Configure();log4net.Config.XmlConfigurator.Configure();}#endregion#region写事件方法///<summary>///写事件方法///</summary>///<paramname="objEventBody">事件信息体</param>///<paramname="oExp">事件</param>publicstaticvoidWriteEventLog(EventBodyobjEventBody,ExceptionoExp){if(!EnableEvent)return;//事件信息初始化StringBuilderstrEventMessage=newStringBuilder();strEventMessage.Append("<b>内容标题:</b>").Append(objEventBody.EventTitle).Append("rn<br>");strEventMessage.Append("<b>远程主机:</b>").Append(objEventBody.UserHostAddress).Append("rn<br>");strEventMessage.Append("<b>会话信息:</b>").Append(objEventBody.CurrentSessionInfo).Append("rn<br>");log4net.ILoglog=log4net.LogManager.GetLogger("Kinyu");switch((EventLogEntryType)objEventBody.EventLevel){caseEventLogEntryType.Error:log.Error(strEventMessage,oExp);break;caseEventLogEntryType.FailureAudit:log.Error(strEventMessage,oExp);break;caseEventLogEntryType.Information:log.Info(strEventMessage,oExp);break;caseEventLogEntryType.SuccessAudit:log.Info(strEventMessage,oExp);break;default:log.Warn(strEventMessage,oExp);break;}}#endregion}
解决方案
解决方案二:
(HttpContext.Current!=null&&HttpContext.Current.Session!=null这句是否为空了
解决方案三:
HttpContext.Current.Session为空,但是实际上系统还可以正常使用,用户的信息也可以从session里获取的。
解决方案四:
是否静态方法有关呢?