2009-02-23 19 views
5

Dans weblogic, je peux configurer dans la console pour que le journal du serveur utilise log4j au lieu de la journalisation JDK par défaut.Utilisation de la connexion log4j dans weblogic 9/10

Cependant, le ServerLog n'utilise un fichier log4j.properties, mais semble utiliser la configuration config.xml Même si le fichier est log4j.properties dans le classpath et je définir ces propriétés:

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 

Est-il possible d'utiliser la configuration de log4j.properties pour Weblogic Server Logging, ou puis-je modifier uniquement la configuration de log4j avec le code java?

Répondre

6

Je ne sais rien de WebLogic en particulier, mais en ajoutant -Dlog4j.debug, log4j vous dira où il cherche sa configuration. J'ai trouvé cela d'une valeur inestimable lors de la recherche de problèmes de journalisation dans Tomcat précédemment.

Consultez les documents pour PropertyConfigurator et DOMConfigurator pour plus d'informations sur le processus de configuration log4j.

+0

Quand devrais-je ajouter le -Dlog4j.déboguer? – rayman

+1

L'option '-Dlog4j.debug' devrait être ajoutée aux paramètres de la ligne de commande de java. Pour WebLogic, cela se trouve dans Serveurs//Server Start/Arguments. –

0

Si vous insérez le fichier log4j.xml dans votre chemin de classe, WebLogic le récupérera. J'utilise Apache Commons logging avec log4j dans WebLogic, et c'est une chose facile à faire. Pas besoin de ces options Java.

+0

Cela ne fonctionne pas. Avec l'option java décrite, les applications se connectent déjà correctement en utilisant la configuration log4j.properties, mais ce que je veux, c'est configurer BEA SERVER LOGGING. Apparemment, la journalisation du serveur bea ne regarde pas le fichier log4j.xml dans le classpath. – Edwin

0

Où définissez-vous les options ci-dessus? Essayez de mettre l'option -Dlog4j dans les options de démarrage du serveur pour chaque serveur géré qui utilisera log4j

+0

Les options ci-dessus définies dans le script de démarrage (startweblogic.cmd). Je vois que le log4.properties est utilisé par le code personnalisé que je déploie, mais il n'est pas utilisé par le Serverlog (et parce que Aqualogic se connecte à la journalisation aqualogique Serverlog n'utilise pas la configuration log4j.properties) – Edwin

0

Pour spécifier l'enregistrement à un enregistreur Log4j au lieu de Java par défaut Logging:

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

    -Dweblogic.log.Log4jLoggingEnabled=true 

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

+0

J'ai déjà essayé, et même documenté que dans la question. (troisième option Java). Ceci est inclus dans les options java de mon admin-server mais n'a pas l'effet que je voulais. – Edwin

+0

Avez-vous modifié les paramètres dans config.xml? – jon077

+0

Le fichier config.xml a été modifié en fonction des modifications apportées à la console. Il semble que les paramètres config.xml remplacent les paramètres log4j.properties, donc la journalisation est configurée dans config.xml et je ne sais pas comment changer cela en configuration log4j.properties. – Edwin

0

Je n'ai jamais eu ce travail comme je l'ai voulu.

Ce que j'ai finalement fait était de créer une sorte de contourner le problème. J'enregistre un gestionnaire qui écoute le journal du serveur Weblogic. À partir de ce gestionnaire, je fais ma propre connexion à log4j. Cette journalisation peut être redirigée pour faire ce que je veux.

créer un LogHandler personnalisé:

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 
        } 

puis créer un ApplicationLifecycleListener. avec une méthode 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); 
    } 


} 
Questions connexes