2009-02-23 16 views
5

En weblogic puedo configurar en la consola para que el registro de servidor use log4j en lugar del registro de JDK predeterminado.Usando el registro de log4j en weblogic 9/10

Sin embargo, el serverlog no está utilizando un archivo log4j.properties, pero parece utilizar la configuración en config.xml Incluso si el archivo log4j.properties se encuentra en la ruta de clase I y establece estas propiedades:

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 

¿Es posible utilizar la configuración de log4j.properties para el registro del servidor de Weblogic, o solo puedo cambiar la configuración de log4j con el código de Java?

Respuesta

6

No sé nada sobre WebLogic en particular, pero agregar -Dlog4j.debug hará que log4j le diga dónde está buscando su configuración. Descubrí que tiene un valor incalculable al rastrear problemas de registro en tomcat previamente.

Consulte los documentos para PropertyConfigurator y DOMConfigurator para obtener detalles sobre el proceso de configuración de log4j.

+0

whwere debo agregar el -Dlog4j.depurar? – rayman

+1

La opción '-Dlog4j.debug' se debe agregar a los parámetros de línea de comandos de java. Para WebLogic esto se encuentra en Servidores//Inicio del servidor/Argumentos. –

0

Si coloca el log4j.xml en su classpath, WebLogic lo recogerá. Utilizo Apache Commons logging con log4j en WebLogic, y es algo fácil de hacer. No es necesario para esas opciones de Java.

+0

Esto no funciona. Con la opción Java descrita, las aplicaciones ya se registran correctamente con la configuración de log4j.properties, pero lo que quiero es configurar BEA SERVER LOGGING. Aparentemente el registro del servidor bea no mira el log4j.xml en el classpath. – Edwin

0

¿Dónde está configurando las opciones anteriores? Trate de poner la opción -Dlog4j en las opciones de inicio del servidor para cada servidor administrado que va a utilizar log4j

+0

Las opciones anteriores se establecieron en el script de inicio (startweblogic.cmd). Veo que log4.properties está siendo utilizado por el código personalizado I deploy, pero no lo usa el Serverlog (y porque los registros de Aqualogic en el registro aqualogic de ServerLog no utilizan la configuración log4j.properties) – Edwin

0

Para especificar el registro en un registrador de Log4J en lugar del predeterminado de Java registro:

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

    -Dweblogic.log.Log4jLoggingEnabled=true 

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

+0

Ya lo intenté, y incluso documentado eso en la pregunta. (tercera opción de Java). Esto está incluido en las opciones de Java de mi servidor de administración pero no tiene el efecto que quería. – Edwin

+0

¿Ha cambiado la configuración en config.xml? – jon077

+0

El config.xml se modificó en función de los cambios realizados en la consola. Parece que la configuración de config.xml anula la configuración de log4j.properties, por lo que el registro se configura en config.xml y no sé cómo cambiarlo a la configuración de log4j.properties. – Edwin

0

Nunca funcioné como estaba previsto.

Lo que finalmente hice fue crear algún tipo de solución. Registro un controlador que escucha el registro de servidor de Weblogic. Desde este controlador hago mi propio registro para log4j. Ese registro puede ser redirigido para hacer lo que quiera.

crear un LogHandler personalizado:

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 
        } 

continuación, crear una ApplicationLifecycleListener. con un método 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); 
    } 


} 
Cuestiones relacionadas