J'ai écrit un projet de service Web utilisant netbeans 6.7.1 avec glassfish v2.1, mettez log4j.properties dans le répertoire racine du projet et utilisez:
static Logger logger = Logger.getLogger(MyClass.class);
en constructeur:
PropertyConfigurator.configure("log4j.properties");
et dans les fonctions:
logger.info("...");
logger.error("...");
// ...
mais, c’est une information d’erreur (en fait, j’ai essayé de la mettre presque à chaque fois que je pouvais me rendre compte):
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.
l'exemple de projet peut être obtenu à partir de http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8
Je sais qu'il est un peu tard pour répondre à cette question, et peut-être avez-vous déjà trouvé la solution, mais je publie la solution que j'ai trouvée (après avoir beaucoup cherché sur Google) afin que cela puisse aider un peu:
-Dlog4j.debug
@ à la fin de vos options Java de TomcatJ'espère que cela aidera.
rgds
Comme déjà indiqué, log4j.properties devrait ê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 pouvez spécifier l'emplacement du fichier de configuration avec l'argument VM -Dlog4j.configuration = "fichier:/C: /workspace3/local/log4j.properties"
Vous devez le placer dans le répertoire racine, qui correspond à votre contexte d'exécution.
Exemple:
MyProject
src
MyClass.Java
log4j.properties
Si vous commencez à exécuter à partir d'un autre projet, vous devez utiliser ce fichier dans le projet pour lancer l'exécution. Par exemple, si un projet différent contient des tests JUnit, il doit également avoir son fichier log4j.properties.
Je suggère d'utiliser log4j.xml au lieu du log4j.properties. Vous avez plus d'options, obtenez l'aide de votre IDE et ainsi de suite ...
Pour un projet basé sur Maven, conservez votre fichier log4j.properties dans src/main/resources. Rien d'autre a faire!
Si vous mettez log4j.properties dans 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 est dans le classpath.
Essayer:
PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
Le fichier doit être situé dans le répertoire WEB-INF/classes . Cette structure de répertoires doit être intégrée au fichier war.
Mon IDE est NetBeans. Je mets le fichier log4j.property comme indiqué sur les images
Root
Web
WEB-INF
Pour utiliser ce fichier de propriétés, vous devriez é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 statique ServletContext depuis un autre fichier JSP . Exemple:
test.context = getServletContext();
test sample = new test();
Vous pouvez maintenant utiliser le fichier log4j.property dans vos projets.
Quelques réponses spécifiques techniquement correctes ont déjà été fournies, mais en général, cela peut se situer n'importe où dans le classpath d’exécution, c’est-à-dire partout où les classes sont recherchées par la JVM.
Il peut s'agir du répertoire/src dans Eclipse ou du répertoire WEB-INF/classes dans votre application déployée, mais il est préférable de connaître le concept de chemin de classe et de comprendre pourquoi le fichier y est placé. Ne vous contentez pas de traiter WEB-INF/classes comme un répertoire "magique".
J'ai passé beaucoup de temps à comprendre pourquoi le log4j.properties le fichier n'est pas vu.
Ensuite, j'ai remarqué qu'il était visible pour le projet uniquement lorsqu'il se trouvait à la fois MyProject/target/classes / et MyProject/src/main/resources Dossiers.
J'espère que ça va être utile à quelqu'un.
PS: Le projet était basé sur Maven.
J'ai constaté que Glassfish, par défaut, considère [répertoire d'installation Glassfish]\glassfish\domaines [votre domaine]\comme répertoire de travail par défaut ... vous pouvez déposer le fichier log4j.properties à cet emplacement et l'initialiser dans votre code à l'aide de 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");
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/ressources
Je ne sais pas si cela est correct. Mais cela a résolu mon problème . Mettez le fichier log4j.properties dans "dossier du projet"/config et utilisez PropertyConfigurator.configure ("config // log4j.properties");
cela fonctionnera avec IDE mais pas lorsque vous exécuterez le fichier jar vous-même . lorsque vous exécuterez le fichier jar vous-même, copiez simplement le fichier log4j.properties dans le dossier dans lequel se trouve le fichier jar. fichier de propriété dans le même répertoire, il fonctionne bien.
Mettez log4j.properties dans classpath . Voici les 2 cas qui vous aideront à identifier le bon emplacement -.__ 1. Pour les applications Web, le chemin d'accès aux classes est/WEB-INF/classes.
\WEB-INF
classes\
log4j.properties
Pour tester à partir de main/unit test, le classpath est le répertoire source
\Project\
src\
log4j.properties
En fait, je viens de rencontrer ce problème dans une structure de projet Java stardard comme suit:
\myproject
\src
\libs
\res\log4j.properties
Dans Eclipse, je dois ajouter le dossier res au chemin de construction. Cependant, dans Intellij, je dois marquer le dossier res comme ressources, comme le montre la capture d'écran associée: cliquez à droite sur le dossier res et marquez en tant que ressources .
Vous n'avez pas besoin de spécifier PropertyConfigurator.configure("log4j.properties");
dans votre classe Log4J, si vous avez déjà défini le fichier log4j.properties dans la structure de votre projet.
En cas de projet Web dynamique: -
Vous devez enregistrer votre log4j.properties sous WebContent -> WEB-INF -> log4j.properties
J'espère que cela peut vous aider.
Il y a plusieurs façons de le faire:
Way1: Si vous essayez dans le projet maven sans utiliser PropertyConfigurator
Premier: vérifier le répertoire des ressources à scr/main
if available,
then: create a .properties file and add all configuration details.
else
then: create a directory named resources and a file with .properties
write your configuration code/details.
suit la capture d'écran:
Way2: Si vous essayez avec le fichier de propriétés pour Java/projet maven Use PropertyConfigurator
Placez le fichier de propriétés n'importe où dans le projet et indiquez le chemin correct . dire: src/javaLog4jProperties/log4j.properties
statique{
PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");
}
Way3: Si vous essayez avec XML sur Java/projet maven Utilisez DOMConfigurator
Placez le fichier de propriétés n'importe où dans le projet et indiquez le chemin correct . dire: src/javaLog4jProperties/log4j.xml
statique{
DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");
}