【问题标题】:using a spring session bean for logging使用 Spring 会话 bean 进行日志记录
【发布时间】:2012-11-15 03:21:07
【问题描述】:

我有一个 Spring Web 应用程序。 我想将其日志记录行为更改为始终使用存储在会话范围 bean 中的登录用户名预先添加日志行。 我们正在使用 log4j。 有很多类正在记录但不是 Spring 管理的。 虽然我们确实使用了一些 AOP,但它都是 Spring AOP,而不是 AspectJ,所以我不能全局修改 log4j 行为(并且仅仅为了愚蠢的日志改进而引入 AspectJ 听起来不是一个好主意)。

我想不出任何理智(甚至可以接受的疯狂)方式来做到这一点。

【问题讨论】:

    标签: spring logging log4j aop spring-aop


    【解决方案1】:

    在您的 servlet 中,您可以使用 log4j 的嵌套诊断上下文来这样做:

    NDC.push(getUsername());
    try {
        ....
    }
    finally {
        NDC.pop();
    }
    

    如果您使用的是 spring dispatcher servlet,您可以将 dispatcher servlet 包装在您自己的 servlet 中,将所有调用委托给 dispatcher servlet 并在其中添加 NDC-stuff。

    【讨论】:

    • 如果我是你,我会使用 MDC(然后你可以拥有更多属性,例如 log4j 格式,“user=%X{user}, path=%X{path}”)。而且我不会编写新的 servlet - 使用过滤器。
    • @DaveSyer 是的,MDC 可能听起来更好。不过我不想搞砸tomcat过滤器,所以我可能会使用Spring AOP来设置它。
    • Tomcat?过滤器是 servlet 规范的一部分,因此不是特定于容器的(而且它们很容易编写)。
    • 它们很容易编写,但 [我怀疑] 引入了我不喜欢的部署/配置操作。
    猜你喜欢
    • 2012-11-04
    • 2017-12-20
    • 2019-02-09
    • 2014-10-30
    • 2017-10-09
    • 2022-12-21
    • 2023-04-04
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多