Java, et les log

Résolu/Fermé
KraM127 Messages postés 53 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 9 octobre 2009 - 4 sept. 2009 à 17:00
KraM127 Messages postés 53 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 9 octobre 2009 - 7 sept. 2009 à 11:04
Bonjour,
J'ai programmé une petite appli, qui se sert de la librairi log4j.
Lorsque je lance l'appli sur mon eclipse, les log sont bien stocké sur les fichier.txt que j'ai choisi.
Mais j'ai besoin d'utiliser cette appli en tant que .jar runnable (pour faire un service windows)
L'application est donc exporté en .jar, et j'utilise ce .jar pour crée mon service, le service tourne comme il faut, mais voila: les log ne sont pas écrit dans les fichiers destinés à log.
J'espere que vous avez une idée et que vous avez un peu de tps à me consacrer :)
Merci
A voir également:

10 réponses

rberthou Messages postés 8 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 5 septembre 2009 1
5 sept. 2009 à 10:03
Salut,

Je pense tout simplement que ton appli ne lis pas le bon propertie quand elle tourne en tand que service.

Peux tu vérifier cela ?
1
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 sept. 2009 à 17:22
Bonjour,

La cause de ce problème doit certainement venir de ton classpath.
Puisque tu externalise ton application pour la lancer sous forme de jar, j'imagine que tu as un fichier MANIFEST.MF à la racine de ton jar.

Peux-tu mettre le contenu de ce fichier ? Il doit y manquer certainement les informations pour stipuler les librairies et chemin d'accès à tes fichiers de propriété / configuration pour ton application, notamment ceux de Log4j.
0
KraM127 Messages postés 53 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 9 octobre 2009 1
4 sept. 2009 à 17:48
Pour être honnête, je ne sais pas ce qu'est le MANIFEST.MF ^^ je débute en quelque sorte
Qui est bizare, c'est que ce n'est pas ma seul librairi (il y en a une vintaine, tous dans le fichier lib) le classpath les pointe, et l'application tourne correctement excepté les log
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 sept. 2009 à 17:54
Ok,

Et comment fais-tu référence à ton fichier de log dans le fichier de configuration de Log4j ?
Y fais-tu référence de manière relative ou absolu, j'imagine que c'est de manière relative sinon ça fonctionnerait :)

Relative = chemin d'accès depuis le répertoire courant de l'application généralement (par exemple : '/config/traces.txt')
Absolue = chemin d'accès au fichier depuis la racine du disque (ce qui est très mauvais si tu veux faire une application portable)

Peux-tu mettre une copie de ton fichier de configuration Log4j, ainsi qu'une description de l'aborescance de ton application une fois livrée (voir même une version de celle qui fonctionne dans ton environnement éclipse)

Je répondrai certainement lundi prochain car je pars :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KraM127 Messages postés 53 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 9 octobre 2009 1
4 sept. 2009 à 17:59
Oui c'est du Absolu :(
mon .properti ressemble à ça:

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=C:\\ServiceSms\\monitor.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{HH:mm:ss} %5p - %m%n

Dans ce meme projet j'utilise un FileWriter avec la meme adresse absolu, une fois l'application lancé, dans C:\ServiceSms\ je retrouve bien le fichier qui a été crée par FileWriter, mais pas celui du log

Bon week end, c'est l'heure pour moi aussi :) à lundi
0
KraM127 Messages postés 53 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 9 octobre 2009 1
7 sept. 2009 à 09:39
Effectivement, c'est peut etre ça ^^
Alors mon log4j.properties est dans mon fichier src, mais pas dans mon package (contrairement à un autre .properties qui lui est dans mon dossier package, et qui lui marche sur)
Lorsque je déplace mon log4j.properties dans le package il n'est plus lu du tout
Merci
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
7 sept. 2009 à 10:20
Re,

Je me permet d'ajouter que si tu as une arborescence de "delivery", plutôt que de mettre en absolue il faut que tu mettes en relatif (pour ce qui est des chemins de fichier de log et properties). Ca rendre ton application indépendante du lieu d'install.
0
KraM127 Messages postés 53 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 9 octobre 2009 1
7 sept. 2009 à 10:22
Comment je défini le chemin de mes fichier .properties ? parce que je n'ai pas le souvenir d'avoir fait des manip, et lorsque je déplace mon fichier .properties il ne marche pas ^^
Merci
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
7 sept. 2009 à 10:50
C'est plutôt simple (quand on a compris comment ça fonctionne ^^).

Ton programme lit au démarrage un fichier de properties pour initialiser diverses choses ?
Dans ce cas, tu dois certainement donner un chemin d'accès au fichier de properties pour le lire. Ce chemin peut soit être absolue, soit relatif. Le mieux est qu'il soit relatif (c'est même obligatoire sinon l'application se retrouve dépendante du système - sauf si tu as un programme d'installation qui te l'installe à l'avance dans un endroit prédéfini, mais même là je ne le recommande pas).

Prenons un exmple plus concret.
Tu as une application avec l'arborescence de livraison suivante :
- bin
--- start.sh (script de lancement shell (pour linux))
--- start.bat (idem pour window)
- config
--- configuration.properties (fichier de properties pour la configuration de l'appli)
--- log4j.properties (fichier de configuration de log4j)
- lib
--- sources.jar (librairies des sources java du programme)

Pour lancer ton application, il faut lancer l'un des scripts dans 'bin', selon l'environnement dans lequel tu es entre linux et window (ce n'est qu'un exemple, pas obligé de prendre en compte tous les OS possible).

Le script de lancement doit obligatoirement définir / alimenter le CLASSPATH du PC en y ajoutant le chemin d'accès au répertoire 'config', ainsi qu'au jar des sources 'lib/sources.jar' pour lancer la classe principale du programme.

Voici un exemple de script shell (linux) pour setter le classpath :

// --- Définition du chemin d'accès à l'application (répertoire racine de l'application)
// --- Exemple 1 : USSFULL + APPNAME sont des variables d'environnement
// --- ayant les chemins / nom de répertoires nécessaire pour construire le chemin du répertoire courant.
APP_HOME=$USSFULL/$APPNAME
// --- Exemple 2 : le chemin est passé en paramètre du script shell, on le récupère via $1 (= param 1)
APP_HOME=$1
// --- On exporte le répertoire racine de l'application pour qu'il soit connu dans le contexte de l'application
export APP_HOME

// --- Ajout des répertoires / librairies devant être dans le classpath pour que l'application les trouve
MYCLASSPATH=$APP_HOME/config
MYCLASSPATH=$MYCLASSPATH:$APP_HOME/lib/sources.jar

// --- Ajout de notre classe path au classpath actuel
CLASSPATH=$MYCLASSPATH:$CLASSPATH
// --- Exportation du nouveau classpath
export CLASSPATH

// --- Lancement de la classe principale Java du programme un fois le classpath exporté
java -Xmx800m -Xms512m *.*.*.*.*.MaClassePrincipale;




De cette façon, puisque le répertoire 'config' est référencé dans le classpath, si tu y fais référence de la manière suivante : 'config/configuration.properties', l'application trouvera ton fichier de propoerties à loader.

Il en est de même pour les fichiers de log, si ton arborescence comprends un répertoire 'log', tu peux ajouter ce répertoire au classpath dans le script de lancement, du sorte qu'il soit automatiquement trouvé lorsque tu le référence de manière relative dans ton fichier de configuration de log4j.

J'espère ne pas t'avoir noyer d'information qui t'embrouilleront l'esprit, c'est une manière de faire, certainement la seule. A toi de voir ce dont tu as besoin par rapport à la manière dont tu as développé ton application et la manière dont tu la livre.
0
KraM127 Messages postés 53 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 9 octobre 2009 1
7 sept. 2009 à 11:04
Merci beaucoup :)
Apparement le fichier log4j.properties doit etre mit dans le fichier src, il est lu automatiquement.

Mais j'ai résolu mon problem, j'ai remarqué que dans le .Jar que j'avais crée, le fichier log4j.properties était celui d'origine (et non celui que moi j'avais écrit) donc il écrivait dans aucuns fichier, bizare, mais j'ai directement modifié le .properties du .jar et maintenant ça marche!!

merci encore de m'avoir aidé ;)
0