【发布时间】:2010-01-15 23:13:33
【问题描述】:
每当我们使 HTTPSession 具有不可序列化的对象(我们不关心但会污染我们的日志)时使 HTTPSession 无效时,我们都会收到一条来自 Weblogic 的烦人的日志消息。调整我们的 log4j 配置以不记录此消息似乎不是一个选项(消息来自通用 Weblogic 类,我们不想抑制来自此类的所有消息,除了编写我们自己的适配器来查看消息被写入日志并抑制反序列化错误消息我不知道我们将如何通过 log4j 配置来做到这一点)。
为了临时解决这个问题以清理我们的日志,我想拦截将对象添加到 HTTP 会话的调用,以便正在添加的对象的类(以及其对象图中的任何对象)更改其实例变量声明到瞬态。想我会通过添加 HTTPSesssionEventListener 来拦截调用,然后使用反射库修改类的实例变量。
有人知道这是否可行吗?
【问题讨论】:
-
您需要在线查看您的日志吗?
-
似乎是一个可怕的黑客来抑制有效警告。
-
对于我们的目的而言,它不是一个有效的错误(weblogic 选择在 ERROR 日志级别记录它——当您不复制会话或不关心您的对象不可序列化时,ERROR 级别是不合适的。如果它是可配置的,或者它们会根据您是否正在执行诸如复制会话之类的事情(然后让您的对象可序列化很重要)来改变日志级别,那就太好了。
-
它是一个有效的错误,你的应用程序应该被设计成可分发的。解决真正的问题。
-
IIRC,规范要求存储在会话中的对象是可序列化的。