【问题标题】:Log4j and thread hungLog4j 和线程挂起
【发布时间】:2012-09-14 10:28:30
【问题描述】:

我们正在使用

创建一个记录器实例

private static Logger = Logger.getClass("ClassName.class");

每个动作类都有一个记录器。这在我们的测试环境中运行良好。但是,它在生产环境中的 WAS 7 中偶尔会出现线程挂起。根据 IBM 服务器分析师的说法,日志文件在等待数据库更新时被锁定。

以下是我在 log4j.xml 中的内容。

   <appender name="logger1" class="org.apache.log4j.DailyRollingFileAppender">
            <param name="File" value="/logs1/logFile.log" />
            <param name="DatePattern" value="'.'yyyy-MM-dd" />
            <param name="Threshold" value="DEBUG" />
            <param name="Append" value="true" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d [%t] %-5p (%F:%L) - %m%n" />
            </layout>
    </appender>

有人可以帮忙吗?如果我删除 static 有什么好处吗?如果我使用 SL4j LoggerFactory 来获取记录器有什么好处吗?

编辑: 相关点:log4j.xml 在 2 个应用程序之间共享。应用程序是 1 个 EAR 文件中的 2 个 WAR 文件。 log4j.xml 有 2 个附加程序。每个应用程序都会删除代码中的其他附加程序。

【问题讨论】:

    标签: log4j slf4j websphere-7


    【解决方案1】:

    如果我删除静态有什么好处吗?

    没有。 Logger.getClass 仍会返回相同的实例。因此,这不会改变与锁定 log4j 相关的任何内容。

    如果我使用 SL4j LoggerFactory 来获取记录器有什么好处吗?

    否(至少对于您面临的问题而言不是)。锁定在 log4j 中完成。 SLF4J 只是一个外观,仍然会委托给 log4j(除非你用其他东西替换 log4j)。

    【讨论】:

    • 感谢您的回复。在主要问题中添加了另一个(可能)相关点。请评论这是否会导致问题?
    • 请注意,如果您想获得原始问题的帮助,即挂起的线程,那么您应该发布相关信息,而不是推测,而应该发布相关信息,即显示线程挂起位置的堆栈跟踪。
    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2012-04-18
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多