2009-12-04 5 views
1

Je développe une application RCP et utilise log4j pour générer des journaux. Chaque fois qu'une exception est enregistrée, je souhaite inclure une ligne dans le fichier journal pour identifier la version de l'application.Version du plugin sur le fichier journal log4j

Je pourrais le faire de force sur la ligne log4j.appender.file.layout.ConversionPattern sur le fichier log4j.properties, en l'écrivant simplement, mais alors je devrais me rappeler de le changer chaque fois que je change la version nombre, qui est trop sujet aux erreurs pour mes nerfs.

Existe-t-il un moyen d'effectuer cela, soit sur le fichier log4j.properties, soit de manière programmatique, de telle sorte que la valeur enregistrée change lorsque je change le numéro de version de l'application?

Merci.

Répondre

3

Il semble que vous vouliez pouvoir configurer log4j par programmation. Vous pouvez utiliser la méthode log4j PropertyConfigurator.configure() pour fournir un objet de propriétés qui contient vos propriétés de journalisation. Dans votre modèle de conversion, vous pouvez ensuite spécifier votre numéro de version en tant que constante. Aussi, je recommande que vous obteniez le numéro de version du plugin principal (bundle) qui définit votre application, ainsi vous pouvez employer le stuffing de version d'Eclipse normal pour le définir. Vous pouvez utiliser un code comme celui-ci:

public String getVersion() 
{ 
    Bundle bundle = Platform.getBundle("com.yourcompany.yourproject.pluginid"); 
    Dictionary headers = bundle.getHeaders(); 
    return (String)headers.get("Bundle-Version"); //$NON-NLS-1$ 
} 
+0

Merci beaucoup, Francis! –

0

Vous pouvez demander à votre demande pour obtenir les informations de version d'un plugin.properties ou même un fichier custom my.properties, comme dans this thread:

public class MyPlugin extends AbstractUIPlugin { 

    protected final static String MY_PROPERTIES = "my.properties";  
    protected PropertyResourceBundle myProperties; 

    public PropertyResourceBundle getMyProperties(){ 

    if (myProperties == null){ 
    try { 
     myProperties = new PropertyResourceBundle(
     FileLocator.openStream(this.getBundle(), 
      new Path(MY_PROPERTIES),false)); 
    } catch (IOException e) { 
     this.logError(e.getMessage()); 
    } 
    return myProperties; 
    } 
... 

Ensuite, à partir de votre code que vous appelez:

MyPlugin.getInstance().getMyProperties().getString("foo"); 

Ceci pourrait ensuite être stocké dans une variable statique pendant la durée de votre session, et réutilisé dans votre log4j outpu t.

Questions connexes