Date de création : | 16 mai 2003 | |
Dernière modification : | 15 Octobre 2004 | |
Diffusion : | internet |
L'utilisation du LogService va être abandonné dans les prochaines versions de uPortal. Dans la version 2.4 ce service est déjà deprecated :
* @deprecated As of uPortal 2.4, please use Apache Commons Logging directly
Il nous est donc indispensable de passer à l'utilisation de Apache Commons
Logging.
Ce changement va modifier le code des canaux ainsi que les possibilités
offertes.
Nouvelles fonctionnalités :
Cette exemple d'utilisation se base sur un cannal dont le nom de package est : org.esupportail.portal.channels.CLogTest et le nom du canal (de la classe) CLogTest
L'utilisation dans le portail nécessite maintenant :
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
protected static final Log log = LogFactory.getLog(CLogTest.class);
La variable de classe static va contenir un objet Log. Toutes les méthodes de log utilisées dans le canal vont se baser sur cet objet.
Méthode |
Signification |
isDebugEnabled | Renvoie un boolean permettant de savoir si on est en niveau de log DEBUG. |
info | Action de log en niveau INFORMATION |
warn |
Action de log en niveau WARNING |
error | Action de log en niveau ERROR |
debug | Action de log en niveau DEBUG |
fatal | Action de log en niveau FATAL |
Il est noté l'existance de la méthode isDebugEnabled celle ci permet de savoir si la classe est en mode DEBUG.
Il est impératif de l'utiliser avant tout affichage de log DEBUG. Ceci permet de ne pas calculer les chaines de caractères (ou appel de fonction) a écrire dans les logs si ce n'est pas nécessaire. Cette méthode permet donc d'accroitre les performances de vos canaux.
if (log.isDebugEnabled()){ log.debug("CLogTest:: Constructeur"+obj.tostring()+" - "+xml.dump()); }
package org.esupportail.portal.channels.CLogTest; import org.jasig.portal.PortalException; import org.jasig.portal.channels.BaseChannel; import org.jasig.portal.utils.XSLT; import org.xml.sax.ContentHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class CLogTest extends BaseChannel { protected static final Log log = LogFactory.getLog(CLogTest.class); public CLogTest() {
if (log.isDebugEnabled()){
log.debug("CLogTest:: Constructeur");
}
} public void renderXML(ContentHandler out) throws PortalException {
log.info("CLogTest:: renderXML");
StringBuffer xml = new StringBuffer();
String stylesheet = "normal";
xml.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
xml.append("<name>test de log</name>");
XSLT xslt = new XSLT(this);
xslt.setXML(xml.toString());
if (log.isDebugEnabled()){
log.debug("CLogTest:: xml de sortie :"+xml.toString());
}
xslt.setXSL("CLogTest.ssl", stylesheet, runtimeData.getBrowserInfo());
xslt.setStylesheetParameter("baseActionURL",runtimeData.getBaseActionURL());
xslt.setTarget(out);
xslt.transform();
} }
Avec la nouvelle méthode de log il est possible de changer le paramétrage du log.
Vous pouvez utiliser la configuration de base du portail, ce qui permet d'avoir tous les logs (selon le niveau) dans un fichier, ou vous pouvez découper les logs en plusieurs fichiers avec des niveaux différents.
Dans le code source précédent, nous avons fait appel à la méthode LogFactory.getLog(CLogTest.class). Cette méthode permet d'obtenir un Logger spécifique pour la classe org.esupportail.portal.channels.CLogTest.CLogTest.
Si ce Logger n'est pas définit dans le fichier logger.properties
tous les appels de log de cette classe iront dans le fichier global de log.
Au contraire, on peut spécifier un Logger différent pour cette
classe :
log4j.category.org.esupportail.portal.channels.CLogTest.CLogTest= DEBUG, test log4j.additivity.org.esupportail.portal.channels.CLogTest.CLogTest = false log4j.appender.test = org.apache.log4j.RollingFileAppender log4j.appender.test.File = test.log log4j.appender.test.Encoding=UTF-8 log4j.appender.test.MaxFileSize=3000KB log4j.appender.test.MaxBackupIndex=10 log4j.appender.test.layout=org.apache.log4j.PatternLayout log4j.appender.test.layout.ConversionPattern=%5p [%t] %c{2}.[%x] %d{MMM/dd HH:mm:ss} - %m%n
Dans ce cas les logs de la classe org.esupportail.portal.channels.CLogTest.CLogTest
iront dans un fichier test.log et non plus le fichier global du portail.
Dans le cas où vous voulez debugger un package (et non une classe unique),
il vous suffit de mettre le nom d'un package lors de l'a configuration du Logger
:
log4j.category.org.esupportail.portal.channels = DEBUG,test log4j.additivity.org.esupportail.portal.channels = false ....
import org.jasig.portal.services.LogService;
LogService.instance().log("mon_texte_de_log");ou
LogService.log("mon_texte_de_log");
LogService.instance().log(niveau_de_log, "mon_texte_de_log");ou
LogService.log(niveau_de_log, "mon_texte_de_log");
Création : 16 mai 2003 - Olivier Ziller (Université Nancy 2) | |
Modifications : |