5

在 weblogic 中,我可以在控制台中配置 Serverlog 以使用 log4j 而不是默认的 JDK 日志记录。

但是,serverlog 没有使用 log4j.properties 文件,但似乎使用了 config.xml 中的配置,即使 log4j.properties 文件位于类路径中并且我设置了这些属性:

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 

是否可以为 Weblogic Server Logging 使用 log4j.properties 配置,还是只能使用 java 代码更改 log4j 配置?

4

5 回答 5

6

我对 WebLogic 一无所知,但是添加-Dlog4j.debug会导致 log4j 告诉您它在哪里寻找它的配置。我发现在之前跟踪 tomcat 中的日志记录问题时,这是非常宝贵的。

有关 log4j 配置过程的详细信息,请查看PropertyConfiguratorDOMConfigurator的文档。

于 2009-03-04T14:13:42.447 回答
0

如果您将 log4j.xml 放在类路径中,WebLogic 会选择它。我在 WebLogic 中使用带有 log4j 的 Apache Commons 日志记录,这很容易做到。不需要那些 Java 选项。

于 2009-02-23T13:31:00.440 回答
0

您在哪里设置上述选项?尝试将 -Dlog4j 选项放在将使用 log4j 的每个托管服务器的服务器启动选项中

于 2009-02-25T15:10:04.650 回答
0

要指定日志记录到 Log4j 记录器而不是默认的 Java 日志记录:

* When you start the Administration Server, include the following Java option in the weblogic.Server command:

  -Dweblogic.log.Log4jLoggingEnabled=true 

来自: http ://edocs.bea.com/wls/docs103/logging/config_logs.html#wp1014610

于 2009-03-03T13:06:49.107 回答
0

我从来没有按照我的意图完成这项工作。

我最终所做的是创建某种解决方法。我注册了一个监听 Weblogic serverlog 的处理程序。从这个处理程序中,我将自己的日志记录到 log4j。该日志记录可以重定向到做任何我想做的事情。

创建一个自定义 logHandler:

public class CustomLogHandler extends Handler {
..

    public CustomLogHandler () throws SecurityException, IOException,
            NamingException {

        String log4jConfig = LogFilterConfiguration.getLog4jDirectory();
        classlogger.info("log4j configured for file"+ log4jConfig );
        PropertyConfigurator.configure(log4jConfig);
        logFilterConfiguration = new LogFilterConfiguration();
    }

    public void publish(LogRecord record) {
        WLLogRecord rec = (WLLogRecord) record;
        if (!isLoggable(rec))
            return;
        if (getLoggerName().. is something i want to log) {
                        // do my own log4j logging
                  }

然后创建一个 ApplicationLifecycleListener。使用 postStart 方法:

public void postStart(ApplicationLifecycleEvent evt) {
    Logger logger = LoggingHelper.getServerLogger();
    Handler oldHandler = null;
    Handler[] currentHandlers = logger.getHandlers();

              .. code to remove an old custom handler if exists...
    with something like logger.removeHandler(oldHandler);

    // add custom handler to serverlogger.
    CustomLogHandler h = null;      
    try {
        h = new CustomLogHandler ();
        // If handler was removed we can add a new version.
        if (!(unRemovedHandlerClasses.contains(h.getClass()))){
            logger.addHandler(h);
            registerMBean(h) ;
        }
    } catch (Exception nmex) {
    classLogger.error("Error adding CustomLogHandler to serverlogger "
                + nmex.getMessage());
        logger.removeHandler(h);
    }


}
于 2010-01-21T21:15:43.693 回答