gpt4 book ai didi

java - 在重新启动 WebLogic 之前不会生成日志文件

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:51 26 4
gpt4 key购买 nike

我正在开发部署在 WebLogic 10.3 上的应用程序。它被打包为一个 EAR 并包含一个模块。该应用程序本身运行良好,但我遇到了与日志记录相关的问题。

我正在使用 Log4j。该库包含在 EAR 文件中,log4j.xml 位于 JAR 模块下。所以配置位置如下:

A.ear/B.jar/log4j.xml

Log4j 配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="CA" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd-MMM-yyyy-HH:mm:ss} %p %C{1} - %m%n" />
</layout>
</appender>


<appender name="DRFA" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file"
value="servers/AdminServer/logs/EJB.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'-'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd-MMM-yyyy-HH:mm:ss} %p %C{1} - %m%n" />
</layout>
</appender>


<logger name="com.companyname.ejb" additivity="false">
<level value="DEBUG" />
<appender-ref ref="DRFA" />
<appender-ref ref="CA" />
</logger>

<logger name="com.companyname.results" additivity="false">
<level value="DEBUG" />
<appender-ref ref="DRFA" />
<appender-ref ref="CA" />
</logger>

<logger name="com.companyname.marketdata" additivity="false">
<level value="DEBUG" />
<appender-ref ref="DRFA" />
<appender-ref ref="CA" />
</logger>


<root>
<level value="DEBUG" />
<appender-ref ref="CA" />
</root>

当我构建和部署 EAR(使用 Maven 和定制的 WebLogic 插件)并调用应用程序时,没有日志文件出现。但是,如果我重新启动 WebLogic,一切都很好。

WebLogic 在 Windows 7 下以单节点域模式运行。

我想知道是否有某种方法可以在不重启 weblogic 的情况下显示日志(因为它可能会导致生产环境出现问题)?

更新:另外我想知道这种行为的原因是什么(即为什么在应用程序部署后没有立即创建日志文件)?这是 Weblogic、log4j 还是它们的耦合的问题?我试图在 Oracle 文档中找到答案,但目前没有找到答案。

最佳答案

一些注意事项:

  • 在生产环境中,您可能希望将日志配置放在应用程序包之外,这样您就可以在不重新部署的情况下更改日志级别。
  • 您应该为生产做好规划,以便能够处理重新启动的问题。我们通常有冷热服务器,所以部署时可以平衡负载并重启服务器。

关于这个问题,如果你愿意,你可以指定一个在应用程序启动时运行的 servlet 并配置你的 log4j。像这样的东西:

网络.xml

<servlet>
<servlet-name>SomeServlet</servlet-name>
<servlet-class>YourServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>

小服务程序

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.xml.DOMConfigurator;

public class YourServlet extends HttpServlet
{
@Override
public void init(final ServletConfig config)
throws ServletException
{
final java.net.URL url = Thread.currentThread().getContextClassLoader()
.getResource("Log4j.xml");
DOMConfigurator.configure(url);
}
}

还有一个 example on the web关于使用 servlet 上下文监听器。


编辑。至于为什么会发生这种情况,weblogic 日志记录机制在启动时默认启动,使用这些设置:

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dlog4j.configuration=file:<path>/log4j.properties
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.log.Log4jLoggingEnabled=true

因此,如果您只是重新部署您的应用程序而没有重新启动服务器,则不会使用这些设置 -> 日志记录将不会启动。

关于java - 在重新启动 WebLogic 之前不会生成日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com