【问题标题】:Using PostSharp with TraceAttribute for logging with HttpContext's SessionID使用带有 TraceAttribute 的 PostSharp 使用 HttpContext 的 SessionID 进行日志记录
【发布时间】:2012-09-28 14:21:36
【问题描述】:

我在每个类上使用 PostSharp 和 TraceAttribute,以便写入日志文件。一个新要求是能够在每个日志条目前添加SessionID

PostSharp 似乎无法以这种方式工作。我尝试了两种对我有意义的方法,但都不起作用。

试试#1

我在TraceAttribute 构造函数中添加了一个字符串参数,以供OnEntryOnExitOnException 方法传入和使用。

private readonly string _sessionID;

public TraceAttribute(string sessionID)
{
    _sessionID = sessionID;
    logger = new Logger();
}

public override void OnExit(MethodExecutionArgs args)
{
    logger.LogMethodExit(string.Format("Session {0} Exiting {1}.{2}", _sessionID, args.Method.DeclaringType.FullName, args.Method.Name));
}

我的控制器最初是用 [Trace] 属性装饰的,我修改为这种方法...

[Trace(HttpContext.Session.SessionID)]

这不起作用,因为 HttpContext 在静态上下文中不可用。

所以这个想法是不可能的。

尝试#2

所以我的下一个尝试是简单地为TraceAttribute 中的每个方法在本地创建sessionId 变量...

public override void OnEntry(MethodExecutionArgs args)
{
    var sessionID = HttpContext.Current.Session.SessionID;
    logger.LogMethodEntry(string.Format("Session {0} Entering {1}.{2}", sessionID, args.Method.DeclaringType.FullName, args.Method.Name));
}

这也不起作用,HttpContext 尚不可用,并且在我运行解决方案时在运行时是 null 对象..

尝试#3

public override void OnEntry(MethodExecutionArgs args)
{
    string sessionID = "Not initialized";
    if (HttpContext.Current.Session.SessionID != null)
        sessionID = HttpContext.Current.Session.SessionID;
    logger.LogMethodEntry(string.Format("Session {0} Entering {1}.{2}", sessionID, args.Method.DeclaringType.FullName, args.Method.Name));
}

有没有办法将会话信息放入以这种方式与 PostSharp 编织的TraceAttribute 中?一些可以实现此目标的解决方法?

【问题讨论】:

  • 您的第二次尝试应该可以工作...,您确定可以从您正在跟踪的方法(而不是方面)内部访问 HttpContext.Current 吗?也许您的方法正在一个新线程中运行,这可以解释为什么 HttpContext.Current 不可用。

标签: asp.net-mvc-3 c#-4.0 logging aop postsharp


【解决方案1】:

搞定了,我错过了在 web.config 中上交的会话。

将此行添加到配置中,现在可以正常工作了。

<sessionState mode="InProc" cookieless="false" timeout="20"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2012-05-11
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多