2009-02-23 28 views
5

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

然而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配置?

回答

6

我对WebLogic一无所知,但增加-Dlog4j.debug将导致log4j告诉你它在哪里查找它的配置。我发现这在以前在tomcat中跟踪日志记录问题时非常有用。

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

0

如果您将log4j.xml放入您的类路径中,WebLogic将会将其提取出来。我在WebLogic中使用Apache Commons log4j进行日志记录,这是一件容易的事情。不需要这些Java选项。

+0

这是行不通的。使用描述的java选项,应用程序已经使用log4j.properties配置正确记录,但我想要的是配置BEA SERVER LOGGING。显然,bea服务器日志记录不会查看类路径中的log4j.xml。 – Edwin 2009-02-24 05:56:24

0

你在哪里设置上述选项?尝试把-Dlog4j选项,在服务器启动选项将使用log4j的每个受管服务器

+0

上述选项设置在启动脚本(startweblogic.cmd)中。我发现log4.properties正在被我部署的自定义代码使用,但它没有被Serverlog使用(并且因为Aqualogic记录到Serverlog的aqualogic日志记录没有使用log4j.properties配置) – Edwin 2009-02-25 15:18:39

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

+0

我已经试过了,并且甚至在问题中记录了这一点。 (第三个java选项)。这包含在我的管理服务器的java选项中,但没有我想要的效果。 – Edwin 2009-03-03 18:38:58

+0

您是否更改了config.xml中的设置? – jon077 2009-03-04 02:39:02

0

我从来没有得到这个工作,因为我满足。

我最终做的是创造一种解决方法。 我注册了一个监听Weblogic服务器日志的Handler。 从这个处理程序我做我自己的日志记录到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); 
    } 


}