Использование log4j для входа в weblogic 9/10 - PullRequest
5 голосов
/ 23 февраля 2009

В 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 

Можно ли использовать конфигурацию log4j.properties для ведения журнала Weblogic Server, или я могу изменить конфигурацию log4j только с помощью кода Java?

Ответы [ 5 ]

6 голосов
/ 04 марта 2009

Я ничего не знаю о WebLogic в частности, но добавление -Dlog4j.debug заставит log4j сообщить вам, где он ищет свою конфигурацию. Я обнаружил, что это было неоценимо при отслеживании проблем с журналированием в tomcat ранее.

Ознакомьтесь с документами для PropertyConfigurator и DOMConfigurator для получения подробной информации о процессе конфигурации log4j.

0 голосов
/ 22 января 2010

У меня никогда не получалось так, как я хотел.

То, что я в конце концов сделал, это создал какой-то обходной путь. Я регистрирую обработчик, который прослушивает журнал сервера Weblogic. От этого обработчика я делаю свою собственную регистрацию в 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);
    }


}
0 голосов
/ 25 февраля 2009

Где вы устанавливаете вышеуказанные опции? Попробуйте включить параметр -Dlog4j в параметрах запуска сервера для каждого управляемого сервера, который будет использовать log4j

0 голосов
/ 03 марта 2009

Чтобы указать ведение журнала в Log4j Logger вместо ведения журнала 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 голосов
/ 23 февраля 2009

Если вы поместите файл log4j.xml в ваш путь к классам, WebLogic его подберет. Я использую протоколирование Apache Commons с log4j в WebLogic, и это легко сделать. Нет необходимости в этих опциях Java.

...