2009-02-23 8 views
5

W weblogic mogę skonfigurować w konsoli dla Serverlog używać log4j zamiast domyślnego logowania JDK.Korzystanie log4j logowanie w weblogic 9/10

Jednak serverlog nie używa pliku log4j.properties, ale zdaje się użyć konfiguracji w config.xml Nawet jeśli plik log4j.properties jest w ścieżce klasy i ustawić te właściwości:

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 

Czy można użyć konfiguracji log4j.properties do rejestrowania serwera Weblogic, czy mogę zmienić konfigurację log4j tylko za pomocą kodu Java?

Odpowiedz

6

Nie znam się na szczególności na WebLogic, ale dodanie -Dlog4j.debug spowoduje, że log4j poinformuje cię, gdzie szuka swojej konfiguracji. Stwierdziłem, że jest to nieocenione przy wcześniejszym śledzeniu problemów z logowaniem w tomcat.

Sprawdź dokumentację dla PropertyConfigurator i DOMConfigurator, aby uzyskać szczegółowe informacje na temat procesu konfiguracji log4j.

+0

whwere powinienem dodać -Dlog4j.debugować? – rayman

+1

Opcja '-Dlog4j.debug' powinna zostać dodana do parametrów wiersza poleceń java. Dla WebLogic jest to zlokalizowane w Servers//Server Start/Arguments. –

0

Jeśli umieścisz plik log4j.xml w swojej klasie, WebLogic go pobierze. Używam rejestrowania Apache Commons z log4j w WebLogic i jest to łatwe. Nie potrzebujesz tych opcji Java.

+0

To nie działa. Z opisaną opcją java aplikacje logują się już poprawnie, używając konfiguracji log4j.properties, ale chcę skonfigurować rejestrację BEA SERVER. Najwyraźniej rejestrowanie serwera bea nie uwzględnia log4j.xml w ścieżce klas. – Edwin

0

Gdzie ustawiasz powyższe opcje? Spróbuj umieścić opcję -Dlog4j w opcji Server start dla każdego serwera zarządzanego, który będzie korzystał log4j

+0

Powyższe opcje są ustawione w skrypcie startowym (startweblogic.cmd). Widzę, że właściwość log4.properties jest używana przez niestandardowy kod, który wdrażam, ale nie jest ona używana przez dziennik serwera (i ponieważ logi Aqualogic do dziennikowania logów Serverlog nie używa konfiguracji log4j.properties) – Edwin

0

Aby określić rejestrowanie do Log4j Logger zamiast domyślnego Rejestrowanie Java:

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

    -Dweblogic.log.Log4jLoggingEnabled=true 

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

+0

Próbowałem już tego i nawet udokumentował to w pytaniu. (trzecia opcja java). Jest to uwzględnione w opcjach java mojego serwera administracyjnego, ale nie ma pożądanego efektu. – Edwin

+0

Czy zmieniłeś ustawienia w pliku config.xml? – jon077

+0

Plik config.xml został zmieniony na podstawie zmian wprowadzonych w konsoli. Wygląda na to, że ustawienia config.xml zastępują ustawienia log4j.properties, więc rejestrowanie jest skonfigurowane w pliku config.xml i nie wiem, jak to zmienić w konfiguracji log4j.properties. – Edwin

0

Nigdy nie działałem tak, jak zamierzałem.

W końcu udało mi się stworzyć rodzaj obejścia. Zarejestruję procedurę obsługi, która nasłuchuje rejestru serwerów Weblogic. Z tego programu obsługi tworzę własne logowanie do log4j. Rejestrowanie może zostać przekierowane, aby zrobić cokolwiek zechcę.

utworzyć niestandardową 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 
        } 

następnie utworzyć ApplicationLifecycleListener. z metodą 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); 
    } 


}