写日志出错,请问怎回事?附有代码
okzjq 2009-01-15 01:39:12 在系统出错时通过log4net写日志的类,但在写WriteEventLog()写日志的方法中,CurrentSessionInfo的内容永远是
“Anonymous User And System Session is Null”,请问为什么会这样呢?
public class EventLog
{
#region 私有构造函数,单件模式,防止被实例化
/// <summary>
/// 私有构造函数,单件模式,防止被实例化
/// </summary>
private EventLog()
{
}
#endregion
#region 是否启用日志事件跟踪
/// <summary>
/// 是否启用日志事件跟踪
/// </summary>
protected static bool EnableEvent
{
get
{
return ConfigInfo.WEB_SYSTEM_ENABLEEVENTLOG;
}
}
#endregion
#region 事件信息体结构
/// <summary>
/// 事件信息体结构
/// </summary>
private struct EventBody
{
#region 当前会话信息属性
/// <summary>
/// 当前会话信息属性
/// </summary>
public string CurrentSessionInfo
{
get
{
StringBuilder SessionInfo = new StringBuilder();
if (HttpContext.Current != null && HttpContext.Current.Session != null)
{
for (int i = 0; i < HttpContext.Current.Session.Count; i++)
{
SessionInfo.Append("\r\n\tSession[").Append(HttpContext.Current.Session.Keys[i])
.Append("] = ").Append(TypeParseHelper.StringParse(NetHelper.CurrentContext.Session[i]));
}
}
if (SessionInfo.Length == 0)
{
return "Anonymous User And System Session is Null!";
}
else
{
return SessionInfo.ToString();
}
}
}
#endregion
#region 远程主机IP地址
/// <summary>
/// 远程主机IP地址
/// </summary>
public string UserHostAddress
{
get
{
return NetHelper.GetIP();
}
}
#endregion
#region 出错页面地址
/// <summary>
/// 出错页面地址
/// </summary>
public string ErrorPage
{
get
{
return RequestHelper.GetUrl();
}
}
#endregion
#region 页面来源地址
/// <summary>
/// 页面来源地址
/// </summary>
public string ReferrerPage
{
get
{
return RequestHelper.GetUrlReferrer();
}
}
#endregion
#region 相关变量
/// <summary>
/// 事件等级变量
/// </summary>
public EventLevelEnum EventLevel;
/// <summary>
/// 事件源变量
/// </summary>
public EventSourceEnum EventSource;
/// <summary>
/// 事件标题变量
/// </summary>
public string EventTitle;
#endregion
}
#endregion
#region 初始化log4net
/// <summary>
/// 初始化log4net
/// </summary>
public static void Initializelog4net()
{
//log4net.Config.DOMConfigurator.Configure();
log4net.Config.XmlConfigurator.Configure();
}
#endregion
#region 写事件方法
/// <summary>
/// 写事件方法
/// </summary>
/// <param name="objEventBody">事件信息体 </param>
/// <param name="oExp">事件 </param>
public static void WriteEventLog(EventBody objEventBody, Exception oExp)
{
if (!EnableEvent)
return;
//事件信息初始化
StringBuilder strEventMessage = new StringBuilder();
strEventMessage.Append(" <b>内容标题: </b>").Append(objEventBody.EventTitle).Append("\r\n <br>");
strEventMessage.Append(" <b>远程主机: </b>").Append(objEventBody.UserHostAddress).Append("\r\n <br>");
strEventMessage.Append(" <b>会话信息: </b>").Append(objEventBody.CurrentSessionInfo).Append("\r\n <br>");
log4net.ILog log = log4net.LogManager.GetLogger("Kinyu");
switch ((EventLogEntryType)objEventBody.EventLevel)
{
case EventLogEntryType.Error:
log.Error(strEventMessage, oExp);
break;
case EventLogEntryType.FailureAudit:
log.Error(strEventMessage, oExp);
break;
case EventLogEntryType.Information:
log.Info(strEventMessage, oExp);
break;
case EventLogEntryType.SuccessAudit:
log.Info(strEventMessage, oExp);
break;
default:
log.Warn(strEventMessage, oExp);
break;
}
}
#endregion
}