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
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
A voir également:
- Java, et les log
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel 5360 ✓ - Forum Jeux vidéo
- Télécharger jeux java gameloft gratuit - Forum Mobile
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
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 ?
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 ?
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
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.
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.
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
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
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
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
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 :)
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 :)
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
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
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
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
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
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
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
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.
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.
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
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
Merci
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
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 :
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.
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.
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
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é ;)
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é ;)