在重新启动WebLogic之前不会生成日志文件 [英] Log file not produced until WebLogic is restarted

查看:294
本文介绍了在重新启动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文档中找到答案,但是暂时没有运气.

解决方案

我没有找到任何快速配置解决方案,因此需要更改代码.

我已经在建议的此处中添加了Weblogic应用程序生命周期侦听器.它的postStart()方法通过DOMConfigurator显式初始化log4j,现在日志在应用程序部署后立即显示.

很少有其他方法可以初始化配置. eis的帖子中提到了其中一个,另一个<?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>

When I build and deploy EAR (using Maven and customized WebLogic plugin) and call application no log file appears. But if I restart WebLogic everything is fine.

WebLogic is running under Windows 7 in domain mode with single node.

I'd like to know if there is some way to make the log appear without weblogic restart (since it can cause issues on production environment)?

Update: Also I'd like to know what is the reason of such behavior (i.e. why the log file is not created right after application deployment)? Is this an issue with Weblogic, log4j or with their coupling? I've tried to find the answer in the Oracle documentation, but no luck for now.

解决方案

I didn't found any quick configuration solution, so code change was required.

I've added Weblogic Application Lifecycle listener as suggested here. Its postStart() method initializes log4j explicitly through DOMConfigurator and now logs appear right after application deployment.

The are few alternatives how configuration can be initialized. One of them was mentioned in eis' post and another here. But I've choose listener in order to keep single module in EAR and in order to avoid issues with singleton EJB on cluster environment (i.e. I am not sure if Weblogic will create singleton on each node or just one instance per cluster).

Also in order to prevent environment changes for local and dev environment, I am using internal log4j.xml (i.e. placed within ear file) there.

For stage and prod - external config file is specified (in Maven profile).

External file is monitored by log4j so changes will be automatically applied without any redeployments or restarts.

这篇关于在重新启动WebLogic之前不会生成日志文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆