Question

Je commence à développer un plug-in Eclipse (techniquement, un plug-in OSGi) et l'un des premiers problèmes que j'ai rencontré est que je n'arrive pas à contrôler la sortie de la journalisation des biens communs comme je le ferais normalement.

J'ai inclus le paquetage commons-logging dans les dépendances du plugin et, en fait, lorsque je consignais quelque chose (de gravité INFO ou supérieure), il était consigné sur la console. Cependant, je n'arrive pas à me connecter à un niveau inférieur (comme DEBUG ou TRACE).

J'ai spécifié un fichier log4j.properties qui se trouve sur le chemin d'accès aux classes (pour le runtime, tout comme le package commons-logging), mais aucun des paramètres de ce fichier de propriétés n'a d'incidence sur le comportement du consignateur. .

Voici le fichier log4j.properties:

#  Log4j Logging levels, in order of decreasing importance are:
#   FATAL, ERROR, WARN, INFO, DEBUG, TRACE
#

# Root logger option
log4j.rootLogger=ERROR,stdout
#,LOGFILE

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %r (%l) %t%n - %m%n

Que dois-je faire pour pouvoir contrôler le résultat de l'enregistreur?

Voici quelques exemples de messages de sortie, dans l’espoir que la mise en forme coïncide avec une valeur par défaut pour java.util.logging ou fournisse d’autres astuces à quelqu'un:

Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
SEVERE: fatal_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
WARNING: warn_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
INFO: info_message

Mise à jour:

J'ai maintenant essayé diverses combinaisons de:

et je ne peux seulement faire apparaître les messages DEBUG, ou de niveau inférieur, si j'exécute OSGi manuellement à partir d'une invite (ce qui n'est pas pratique pour ce que je développe). De plus, je ne peux effectuer aucun autre type de configuration de journalisation via divers fichiers de propriétés. Tout ce que j'essaye à cet égard semble être remplacé par un paramètre d'éclipse.

J'ai également essayé de placer divers fichiers de configuration pour les bibliothèques ci-dessus à de nombreux endroits, y compris en tant que fragments de plug-in attachés à leurs bibliothèques respectives, comme suggéré ici , et le même résultat se produit toujours.

J'ai implémenté un LogListener personnalisé et tracé le chemin d'accès complet d'un message de journal (de toute façon, je le sais quand même) avec System.out.println, et les messages de débogage sont présents à droite jusqu’à leur sortie par l’API de journalisation sous-jacente que j’utilise, ils disparaissent.

Était-ce utile?

La solution

3 jours plus tard ...

J'ai trouvé le problème! Premièrement, il y avait un problème avec un fichier MANIFEST.MF:

J'ai eu les informations suivantes dans MANIFEST.MF pour un lot:

Bundle-ClassPath: lib/jena.jar,
 .,
 org.apache.log4j-1.2.12.jar,
 lib/google-collect-snapshot.jar
Import-Package: com.acme.client.translation,
 com.acme.translation.interfaces,
 com.acme.shared.osgi,
 com.acme.utilities

Ce aurait dû être ceci:

Bundle-ClassPath: lib/jena.jar,
 .,
 lib/google-collect-snapshot.jar
Import-Package: com.acme.client.translation,
 com.acme.client.translation.interfaces,
 com.acme.shared.osgi,
 com.acme.utilities,
 org.apache.log4j

La principale différence est que log4j était utilisé comme un paquet alors qu’il aurait dû être utilisé comme un paquet. (J'avais un journal jar log4j dans mon répertoire lib lorsque je m'attendais à ce que Log4j "travaille" avec OSGi). Le jar fonctionne , en quelque sorte. Il a évidemment trouvé une configuration log4j au niveau éclipse et l'a utilisée. Comme il ne s'agissait que d'un bocal (et non d'un paquet), aucun fragment ne pouvait être utilisé pour spécifier une configuration de journalisation personnalisée, ce qui nous amène à autre chose:

Je devais configurer un fragment de lot pour spécifier la configuration de journalisation. Ce lien dans VonC m'a donné l'info pour le faire. Cela impliquait de faire un certain nombre de choses, malheureusement, le paquet avec le MANIFEST.MF incorrect avait toujours le fichier jar log4j spécifié dans Bundle-ClassPath, et cela semble remplacer la liste Import-Package.

J'ai enfin compris ce qui se passait lorsque je devais connecter un autre paquet (je venais d'abandonner à ce moment-là et je suis retourné à l'utilisation des journaux au niveau Warn et plus.) Ce nouveau paquet n'a pas pu être trouvé. une configuration de journalisation! (Alors, trois bundles fonctionnaient dans le même environnement OSGi, chacun avec un comportement log4j différent - l'un utilisant mes paramètres de fragment, l'autre utilisant des paramètres de journalisation Eclipse aléatoires, et enfin le nouvel ensemble n'ayant aucune configuration de journalisation.) Des comparaisons détaillées de ces trois ensembles ont révélé la différence entre les fichiers Manifest.MF et utilisent maintenant tous les fragments.

Je dois un immense merci aux auteurs de la plupart des Zone Eclipse , VonC , Ekkes , et tout le monde à #eclipse sur freenode pour son aide et sa patience :)

Autres conseils

Ceci n'est pas une réponse réelle à votre question, mais vous pourriez trouver quelques indices dans ce ensemble d'articles de ekke .

Je suppose que vous avez déjà lu les utilisation de Log4J dans Eclipse Equinox / OSGi ":

Avez-vous lancé une session osgi en mode console?

java -jar org.eclipse.osgi_3.3.0.v20070530.jar -console -noExit -clean

De cette façon, vous pouvez tester log4j dans un environnement osgi pur et vérifier s’il fonctionne correctement.

Informez-le si vous trouvez une solution (publiez-la en tant que réponse) et je la voterai;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top