java – 重新启动WebLogic之前不生成日志文件

前端之家收集整理的这篇文章主要介绍了java – 重新启动WebLogic之前不生成日志文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发部署在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文档中找到答案,但现在没有运气.

解决方法

一些说明:

>在prod环境中,您可能希望将日志配置放在应用程序包之外,这样您就可以在不重新部署的情况下更改日志级别.
>您应该计划生产以便能够处理重启.我们通常有冷热服务器,因此在进行部署时可以平衡负载并重新启动服务器.

关于这个问题,如果你愿意,你可以指定一个在app启动时运行的servlet并配置你的log4j.就像是:

web.xml中

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

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);
    }
}

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

编辑.至于为什么会发生这种情况,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

因此,如果您只是在不重新启动服务器的情况下重新部署应用程序,则不会使用这些设置 – >日志记录不会被启动.

原文链接:https://www.f2er.com/java/444652.html

猜你在找的Java相关文章