Où dois-je mettre le log4j?le fichier des propriétés?
j'ai écrit un projet de service web en utilisant netbeans 6.7.1 avec glassfish v2.1, Mettez log4j.propriétés à la racine du projet et de l'utilisation:
static Logger logger = Logger.getLogger(MyClass.class);
dans constructeur:
PropertyConfigurator.configure("log4j.properties");
et en fonctions:
logger.info("...");
logger.error("...");
// ...
mais, c'est info erreur(en fait, j'ai essayé de le mettre presque tous les dir que je pouvais réaliser):
log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.
le projet exemple pourrait être obtenu de http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8
15 réponses
je sais qu'il est un peu tard pour répondre à cette question, et peut-être que vous avez déjà trouvé la solution, mais je poste la solution que j'ai trouvé (après que j'ai beaucoup cherché sur Google) ainsi il peut aider un peu:
- Put log4j.Propriétés sous WEB-INF\classes du projet comme mentionné précédemment dans ce thread.
- Put log4j-xx.jar sous WEB-INF\lib
- tester si log4j a été chargé: ajouter
-Dlog4j.debug
@ la fin de vos options java de tomcat
Espérons que cela aidera.
rgds
As already stated, log4j.propriétés doivent être dans un répertoire inclus dans le classpath, je veux ajouter que dans un projet mavenized un bon endroit peut être src/main/resources/log4j.properties
Vous devez le mettre dans le répertoire racine, qui correspond à votre contexte d'exécution.
exemple:
MyProject
src
MyClass.java
log4j.properties
Si vous commencer à exécuter à partir d'un autre projet, vous devez avoir ce fichier dans le projet utilisé pour démarrer l'exécution. Par exemple, si un projet différent contient quelques tests JUnit, il doit aussi avoir son log4j.fichier de propriétés.
je suggère d'utiliser log4j.xml au lieu de cela de la log4j.les propriétés. Vous avez plus d'options, obtenez de l'aide de votre IDE et ainsi de suite...
vous pouvez spécifier l'emplacement du fichier de configuration avec l'argument VM-Dlog4j.configuration= " file:/C:/workspace3/local / log4j.propriétés "
pour un projet basé sur le Maven, gardez votre log4j.propriétés dans src/main / resources. Rien d'autre à faire!
si vous mettez log4j.propriétés à l'intérieur de src, vous n'avez pas besoin d'utiliser la déclaration -
PropertyConfigurator.configure("log4j.properties");
il sera pris automatiquement car le fichier de propriétés se trouve dans classpath.
le fichier doit être situé dans le répertoire WEB-INF/classes. Cette structure de répertoire devrait être empaquetée dans le fichier war.
, Essayez:
PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
mon IDE est NetBeans. J'ai mis log4j.fichier de propriétés comme montré sur les photos
Root
Web
WEB-INF
pour utiliser ce fichier de propriété vous devez écrire ce code:
package example;
import java.io.File;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import javax.servlet.*;
public class test {
public static ServletContext context;
static Logger log = Logger.getLogger("example/test");
public test() {
String homeDir = context.getRealPath("/");
File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
PropertyConfigurator.configure(propertiesFile.toString());
log.info("This is a test");
}
}
vous pouvez définir contexte servlettexte statique à partir d'un autre fichier JSP. Exemple:
test.context = getServletContext();
test sample = new test();
Maintenant vous pouvez utiliser log4j.dossier de propriété dans vos projets.
quelques réponses spécifiques techniquement correctes déjà fournies, mais en général, il peut être n'importe où sur le chemin de la classe runtime, c'est-à-dire partout où les classes sont recherchées par la JVM.
cela pourrait être le répertoire /src dans Eclipse ou le répertoire WEB-INF/classes dans votre application déployée, mais il est préférable d'être conscient du concept classpath et de la raison pour laquelle le fichier y est placé, ne traitez pas simplement WEB-INF/classes comme un répertoire" magique".
j'ai passé beaucoup de temps à comprendre pourquoi le log4j.propriétés fichier n'est pas vu.
Puis j'ai remarqué qu'il était visible pour le projet seulement quand il était dans les deux répertoires MyProject/target/classes/ et MyProject/src/main/resources .
Espérons qu'il sera utile à quelqu'un.
PS: le projet était basé sur le maven.
j'ai trouvé que Glassfish par défaut est de regarder [Glassfish emplacement d'installation]\glassfish\domains[votre domaine]\ le répertoire de travail par défaut... vous pouvez laisser tomber le log4j.propriétés fichier dans cet emplacement et l'initialiser dans votre code en utilisant PropertyConfigurator comme mentionné précédemment...
Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");
Je ne sais pas si c'est la bonne façon.Mais il a résolu mon problème. mettez log4j.fichier de propriétés dans "project folder" / config et utiliser PropertyConfigurator.configure ("config//log4j.propriétés");
il fonctionnera avec IDE mais pas quand lancer le fichier jar vous-même. lorsque vous exécutez le fichier jar par vous-même, copiez simplement le log4j.propriétés fichier dans le dossier que le fichier jar est.quand le bocal et bien le fichier dans le même répertoire, il fonctionne bien.
Put log4j.propriétés de classepath. Voici les 2 cas qui vous aidera à déterminer le bon emplacement- 1. Pour les applications web, classpath est / WEB-INF / classes.
\WEB-INF
classes\
log4j.properties
-
pour tester à partir de l'essai principal / unitaire le chemin de classe est le répertoire des sources
\Project\ src\ log4j.properties
si vous avez une configuration standard de projet Maven avec Intellij, vous pouvez simplement placer le fichier de propriétés log4j dans:
projet/src/main/resources