Napisałem projekt usługi sieciowej przy użyciu netbeans 6.7.1 z Glassfish v2.1, umieściłem log4j.properties w katalogu głównym projektu i użyłem:
static Logger logger = Logger.getLogger(MyClass.class);
w programie Constructor:
PropertyConfigurator.configure("log4j.properties");
aw funkcjach:
logger.info("...");
logger.error("...");
// ...
ale jest to informacja o błędzie (właściwie próbowałem umieścić to prawie w każdym katalogu, jaki mogłem sobie uświadomić):
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.
przykładowy projekt można pobrać z http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8
Odpowiedzi:
Wiem, że jest trochę za późno, aby odpowiedzieć na to pytanie, a może już znalazłeś rozwiązanie, ale publikuję rozwiązanie, które znalazłem (po tym, jak dużo googlowałem), więc może trochę pomóc:
-Dlog4j.debug
@ koniec opcji java tomcatMam nadzieję, że to pomoże.
rgds
źródło
Jak już wspomniano, log4j.properties powinien znajdować się w katalogu zawartym w ścieżce klas, chcę dodać, że w zmienionym projekcie dobrym miejscem może być
src/main/resources/log4j.properties
źródło
Musisz umieścić go w katalogu głównym, który odpowiada twojemu kontekstowi wykonania.
Przykład:
Jeśli zaczynasz wykonywanie z innego projektu, musisz mieć ten plik w projekcie używanym do rozpoczęcia wykonywania. Na przykład, jeśli inny projekt zawiera testy JUnit, musi mieć również swój plik log4j.properties.
Sugeruję użycie log4j.xml zamiast log4j.properties. Masz więcej opcji, uzyskaj pomoc ze swojego IDE i tak dalej ...
źródło
Możesz określić lokalizację pliku konfiguracyjnego za pomocą argumentu VM -Dlog4j.configuration = "file: / C: /workspace3/local/log4j.properties"
źródło
log4j.configurationFile
W przypadku projektu opartego na Maven przechowuj swój log4j.properties w src / main / resources. Nic więcej do zrobienia!
źródło
Jeśli umieścisz log4j.properties w src, nie musisz używać instrukcji -
PropertyConfigurator.configure("log4j.properties");
Zostanie pobrany automatycznie, ponieważ plik właściwości znajduje się w ścieżce klas.
źródło
Próbować:
PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
źródło
Plik powinien znajdować się w katalogu WEB-INF / classes. Ta struktura katalogów powinna być umieszczona w pliku war.
źródło
Moje IDE to NetBeans. Umieściłem plik log4j.property, jak pokazano na zdjęciach
Korzeń
Sieć
WEB-INF
Aby użyć tego pliku właściwości, należy napisać następujący kod:
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"); } }
Możesz zdefiniować statyczny kontekst ServletContext z innego pliku JSP. Przykład:
test.context = getServletContext(); test sample = new test();
Teraz możesz używać pliku log4j.property w swoich projektach.
źródło
Kilka technicznie poprawnych, konkretnych odpowiedzi już udzielonych, ale generalnie może to być w dowolnym miejscu na ścieżce klas środowiska wykonawczego, tj. Wszędzie tam, gdzie JVM szuka klas.
Może to być katalog / src w Eclipse lub katalog WEB-INF / classes we wdrożonej aplikacji, ale najlepiej jest zdawać sobie sprawę z koncepcji ścieżki klas i dlaczego plik jest w niej umieszczony, nie traktuj tylko WEB-INF / klasy jako katalog „magiczny”.
źródło
Spędziłem dużo czasu, aby dowiedzieć się, dlaczego plik log4j.properties nie jest widoczny.
Potem zauważyłem, że był widoczny dla projektu tylko wtedy, gdy znajdował się zarówno w folderze MyProject / target / classes /, jak i MyProject / src / main / resources .
Mam nadzieję, że komuś się przyda.
PS: Projekt był oparty na maven.
źródło
Zauważyłem, że Glassfish domyślnie patrzy na [Lokalizacja instalacji Glassfish] \ glassfish \ domains [twoja domena] \ jako domyślny katalog roboczy ... możesz upuścić plik log4j.properties w tej lokalizacji i zainicjować go w swoim kodzie za pomocą PropertyConfigurator jak już wspomniano...
Properties props = System.getProperties(); System.out.println("Current working directory is " + props.getProperty("user.dir")); PropertyConfigurator.configure("log4j.properties");
źródło
Nie wiem, czy to poprawny sposób, ale rozwiązało mój problem. umieść plik log4j.properties w „folderze projektu” / config i użyj PropertyConfigurator.configure („config // log4j.properties”);
będzie działać z IDE, ale nie po samodzielnym uruchomieniu pliku jar. po samodzielnym uruchomieniu pliku jar po prostu skopiuj plik log4j.properties do folderu, w którym znajduje się plik jar. gdy plik jar i plik właściwości w tym samym katalogu działają dobrze.
źródło
Umieść log4j.properties w ścieżce klas. Oto 2 przypadki, które pomogą Ci zidentyfikować właściwą lokalizację: 1. W przypadku aplikacji internetowej ścieżka klas to / WEB-INF / classes.
Aby przetestować z głównego / jednostkowego testu, ścieżka klasy jest katalogiem źródłowym
źródło
Można to zrobić na wiele sposobów:
Way1: Jeśli próbujesz w projekcie maven bez użycia PropertyConfigurator
Po pierwsze: sprawdź katalog zasobów w 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.
podąża za zrzutem ekranu:
Way2: Jeśli próbujesz z plikiem Properties dla projektu java / maven, użyj PropertyConfigurator
Umieść plik właściwości w dowolnym miejscu w projekcie i podaj poprawną ścieżkę. powiedz: src / javaLog4jProperties / log4j.properties
statyczny{
PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");
}
Way3: Jeśli próbujesz z XML w projekcie java / maven użyj DOMConfigurator
Umieść plik właściwości w dowolnym miejscu w projekcie i podaj poprawną ścieżkę. powiedz: src / javaLog4jProperties / log4j.xml
statyczny{
DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");
}
źródło
Twoja standardowa konfiguracja projektu będzie miała strukturę projektu podobną do:
Umieszczasz log4j.properties w folderze zasobów, możesz utworzyć folder zasobów, jeśli taki nie istnieje
źródło
Właściwie właśnie doświadczyłem tego problemu w standardowej strukturze projektu Java w następujący sposób:
W Eclipse muszę dodać folder res do ścieżki budowania, jednak w Intellij muszę oznaczyć folder res jako zasoby, jak pokazuje połączony zrzut ekranu: kliknij prawym przyciskiem myszy folder res i zaznacz jako zasoby .
źródło
Nie musisz określać
PropertyConfigurator.configure("log4j.properties");
w swojej klasie Log4J, jeśli już zdefiniowałeś log4j.properties w strukturze projektu.W przypadku Web Dynamic Project: -
Musisz zapisać swoje log4j.properties w WebContent -> WEB-INF -> log4j.properties
Mam nadzieję, że to może ci pomóc.
źródło