Wo soll ich die Datei log4j.properties ablegen, wenn ich die herkömmlichen Maven-Verzeichnisse verwende?
Wenn Sie Maven verwenden, legen Sie normalerweise log4j.properties unter Java oder Ressourcen ab?
Benutzer496949
Jan Galinsky
src/main/resources
ist die “Standardplatzierung” dafür.
Aktualisieren: Das obige beantwortet die Frage, aber es ist nicht die beste Lösung. Schauen Sie sich die anderen Antworten und die Kommentare dazu an … Sie würden wahrscheinlich nicht Ihre eigenen Protokollierungseigenschaften mit dem Glas versenden, sondern es dem Client (z. B. App-Server, Bühnenumgebung usw.) überlassen, die gewünschte Protokollierung zu konfigurieren. Also einlegen src/test/resources
ist meine bevorzugte Lösung.
Notiz: Apropos, die konkrete Protokollkonfiguration dem Client/Benutzer zu überlassen, Sie sollten erwägen, sie zu ersetzen log4j
mit slf4j
in Ihrer Anwendung.
-
Ich habe festgestellt, dass kein Ressourcenverzeichnis erstellt werden kann. Muss ich das manuell machen?
– Benutzer496949
27. Februar 2011 um 9:31 Uhr
-
ja. Manuell erstellen
resources
undlog4j.properties
in dem in der Antwort genannten Ordner.– Nischant
27. Februar 2011 um 9:49 Uhr
-
@ user496949: Dateien unter
src/main/resources
wird standardmäßig nach kopierttarget/classes
– spritzen
27. Februar 2011 um 9:54 Uhr
-
Sofern Sie nicht beabsichtigen, Ihre log4j-Einstellungen als Teil Ihres Artefakts zu exportieren, ist es weitaus besser, sie unter src/test/resources abzulegen
– David Viktor
27. Februar 2011 um 10:16 Uhr
-
@FerasOdeh, um es von generierten Artefakten (Jars, Kriege usw.) auszuschließen und nur während des Testens zu verwenden, “es sei denn, Sie beabsichtigen, Ihre log4j-Einstellungen als Teil Ihres Artefakts zu exportieren”.
– Ali Shakiba
24. Februar 2012 um 6:01 Uhr
Zoltán
Einfach reinstecken src/main/resources
wird es im Artefakt bündeln. Wenn Ihr Artefakt zB ein JAR ist, haben Sie die log4j.properties
darin enthaltene Datei, wodurch der ursprüngliche Punkt, die Protokollierung konfigurierbar zu machen, verloren geht.
Ich stecke es meistens ein src/main/resources
und stellen Sie es so ein, dass es als Ziel ausgegeben wird:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Damit log4j es tatsächlich sieht, müssen Sie außerdem das Ausgabeverzeichnis zum Klassenpfad hinzufügen. Wenn Ihr Artefakt ein ausführbares JAR ist, haben Sie wahrscheinlich das maven-assembly-plugin verwendet, um es zu erstellen. Innerhalb dieses Plugins können Sie den aktuellen Ordner der JAR-Datei zum Klassenpfad hinzufügen, indem Sie eine hinzufügen Class-Path
Manifest-Eintrag wie folgt:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Jetzt befindet sich die Datei log4j.properties direkt neben Ihrer JAR-Datei und ist unabhängig konfigurierbar.
Um Ihre Anwendung direkt von Eclipse aus auszuführen, fügen Sie die resources
Verzeichnis zu Ihrem Klassenpfad in Ihrer Laufkonfiguration: Run->Run Configurations...->Java Application->New
wähle aus Classpath
Registerkarte, auswählen Advanced
und navigieren Sie zu Ihrer src/resources
Verzeichnis.
-
Eine andere Möglichkeit wäre, es unter src/test/resources abzulegen, damit es nicht gebündelt wird.
– Rogerpack
5. Dezember 2014 um 17:24 Uhr
-
Wow. Dank dafür. Das war genau das, was ich brauchte!
– Glückseligkeit
17. Juli 2015 um 18:25 Uhr
-
@Zoltán, es fällt mir schwer, das Ausgabeverzeichnis zum Klassenpfad hinzuzufügen, wie Sie es empfohlen haben. Gibt es eine Möglichkeit, dies manuell zu tun, z. B. in die .classpath-Datei des jeweiligen Projekts zu gehen und dieses log4j-Ausgabeverzeichnis dort hinzuzufügen, damit log4j die .properties-Datei sehen kann, nachdem die App in eine .war-Datei gebündelt wurde. Auch das targetPath-Tag, falls der Wert unverändert verwendet wird
${project.build.directory}
oder sollte auf den tatsächlichen Pfad bearbeitet werden, in dem sich das Projekt auf meinem lokalen Laufwerk befindet?– Ercross
11. April 2020 um 11:03 Uhr
Spritzen
Einige “Data Mining”-Konten dafür src/main/resources
ist der typische Ort.
Ergebnisse an Google-Codesuche:
src/main/resources/log4j.properties
: 4877src/main/java/log4j.properties
: 215
-
Wie unterscheidet sich diese Antwort in irgendeiner Hinsicht von der vor 20 Minuten? Außerdem ist es
resources
nichtresource
wenn ich mich richtig erinnere.– Nischant
27. Februar 2011 um 9:48 Uhr
-
@Nishant: es ist nicht anders, denn als ich das Antwortfeld geöffnet habe, habe ich den PC verlassen. Nachdem ich zurückgekommen war und die Frage beantwortet hatte, übersah ich, dass die Frage bereits beantwortet war.
resource
war nur ein Tippfehler.– spritzen
27. Februar 2011 um 9:59 Uhr
-
Ich würde vorschlagen, etwas über Maven, das Maven-Compiler-Plugin, Konventionen für das Layout von Maven-Projekten zu lesen. Sehen Sie sich vielleicht an, was wohin unter “Ziel” gehört, wenn Ihr Artefakt gebaut wird. Dann könnten Sie vielleicht Ihre Antwort ändern.
– David Viktor
27. Februar 2011 um 11:32 Uhr
-
Die richtige Antwort ist src/xxx/resources – das ist keine Konvention. Sehen: maven.apache.org/plugins/maven-resources-plugin/examples/… – hier kann ‘xxx’ ‘main’ oder ‘test’ sein. Sofern Sie keine vorkonfigurierten Protokollierungsebenen bereitstellen möchten, ist es im Allgemeinen klüger, die Protokollierung wie für das Testen erforderlich zu konfigurieren – über „src/test/resources“ – und dem Verbraucher Ihres Artefakts zu erlauben, die Protokollierungsebene festzulegen.
– David Viktor
27. Februar 2011 um 17:19 Uhr
-
Google-Ergebnisse für „Von einer Brücke springen“: 18.200.000. Google-Ergebnisse für „Nicht von einer Brücke springen“: 137.000
– djjek
11. Januar 2013 um 0:35 Uhr
Verwüster
Die für die Initialisierung des Projekts verwendeten Ressourcen werden vorzugsweise eingesetzt src/main/resources Mappe. Um das Laden dieser Ressourcen während des Builds zu ermöglichen, kann man einfach Einträge in der pom.xml im Maven-Projekt als Build-Ressource hinzufügen
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Andere .properties-Dateien können auch in diesem Ordner aufbewahrt werden, der für die Initialisierung verwendet wird. Filtering wird auf true gesetzt, wenn Sie einige Variablen in den Eigenschaftendateien des Ressourcenordners haben und sie aus den Profilfilter-Eigenschaftsdateien füllen möchten, die in src/main/filters gespeichert sind, das als festgelegt ist Profile aber es ist ein ganz anderer Anwendungsfall. Im Moment kannst du sie ignorieren.
Dies ist eine großartige Ressource Maven-Ressourcen-Pluginses ist nützlich, stöbern Sie einfach auch in anderen Abschnitten.
Ali Shakiba
Wenn Ressourcendateien an einem anderen Ort abgelegt werden, ist dies nicht die beste Lösung, die Sie verwenden können:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Zum Beispiel, wenn Ressourcendateien (z. B. jaxb.properties) zusammen mit Java-Klassen tief in Pakete eindringen.
ethemsulan
Wenn Ihre log4j.properties- oder log4j.xml-Datei nicht unter src/main/resources gefunden wird, verwenden Sie diese PropertyConfigurator.configure(“log4j.xml”);
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);
Challa Purushothham
Fügen Sie den folgenden Code aus den Ressourcen-Tags in Ihrer pom.xml innerhalb von Build-Tags hinzu. Das bedeutet also, dass sich Ressourcen-Tags innerhalb von Build-Tags in Ihrer pom.xml befinden müssen
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<build/>
src/test/resources – der Konsument Ihres Artefakts würde die für die Bereitstellung erforderlichen Protokollierungsebenen festlegen. Ich würde jedoch slf4j empfehlen, wenn Sie dies für kommerzielle Arbeiten tun. Dies gibt die Möglichkeit, Protokollierungsframeworks bei der Bereitstellung zu wechseln. slf4j.org
– David Viktor
27. Februar 2011 um 10:23 Uhr
Übrigens, wenn Sie nur experimentieren möchten, ist es möglich, log4j ohne eine properties/xml-Konfigurationsdatei zu verwenden. Aus ‘protokollierung.apache.org/log4j/1.2/manual.html – Configuration’ “Der Aufruf der Methode BasicConfigurator.configure erstellt ein ziemlich einfaches log4j-Setup.” Siehe auch: Protokollierung.apache.org/log4j/1.2/apidocs/org/apache/log4j/… maven.apache.org/plugins/maven-resources-plugin/examples/…
– David Viktor
27. Februar 2011 um 12:58 Uhr