2016-04-13 8 views
0

Ich verwende mvn exec:java -Dexec.mainClass=my.Class, um auf der Befehlszeile ausgeführt werden. Während das Programm läuft, habe ich eine Debug-Ausgabe, die ich gerne protokollieren würde.log4j.properties ignoriert, wenn mvn exec verwendet: java

Ich benutze private static Logger logger = LoggerFactory.getLogger("mylogger");, um den Logger zu initialisieren. Ich habe es so in log4j.properties konfiguriert:

log4j.appender.mylogger=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.mylogger.Threshold=DEBUG 
log4j.appender.mylogger.File=logs/mylogger.log 
log4j.appender.mylogger.DatePattern=.yyyy-MM 
log4j.appender.mylogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.mylogger.layout.ConversionPattern=%d{ISO8601} [%5p] %C{1}:%L - %m%n 
log4j.additivity.mylogger=false 

jedoch logger hat die Klasse org.slf4j.impl.JDK14LoggerAdapter und scheint alle Einstellungen in log4j.properties zu ignorieren - es ist zu STDERR mit lokalisierten Warnungen und Informationen anzumelden.

Meine relevanten Maven Abhängigkeiten:

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version> 
    <type>jar</type> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.21</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.7.21</version> 
</dependency> 

Wie erhalte ich meine benutzerdefinierte konfiguriert Logger, wenn mvn exec:java mit? Meine log4j.properties-Konfiguration funktioniert einwandfrei, wenn Sie den Rest der Spring-Anwendung mit Jetty ausführen.

Antwort

1

JDK14LoggerAdapter ist Teil von slf4j-jdk14-1.7.21.jar. Also meine Vermutung ist, dass Ihr Klassenpfad dieses Glas enthält.

Als mvn exec: java und jetty verwenden verschiedene Klasse Loader Sie haben nur Glück mit Anlegesteg, dass er die slf4j-log4j12 über die jdk14 Bindung bevorzugt.

Stellen Sie außerdem sicher, dass exec: java includePluginDependencies ist nicht auf true gesetzt (es ist standardmäßig falsch ist) http://www.mojohaus.org/exec-maven-plugin/java-mojo.html.

In dem Fall, dass nach dem Entfernen der anstößigen Jar Ihre Befehlszeile immer noch die log4.properties-Datei auswählen möchten. dh Sie den folgenden Fehler auf der Konsole:

log4j:WARN No appenders could be found for logger (dao.hsqlmanager). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

Sie können den Pfad zu den Eigenschaften bieten Datei das Bestehen der Systemeigenschaft log4j.configuration MVN exec: java

How to pass systemProperties when invoking exec:java plugin in maven?

+0

Ich werde untersuchen, aber ich habe nicht 'slf4j-jdk14' in meinem pom.xml ... – tholu

+0

try mvn Abhängigkeit: Baum, ist es wahrscheinlich transitiv –

+0

ich den Täter' slf4j-jdk14' im 'exec gefunden -maven-plugin 1.4.0' in 'META-INF/maven/plugin.xml', also die Frage ist, wie ich' mvn exec: java' sage, 'slf4j-jdk14' nicht zu benutzen? – tholu

1

stellen Sie sicher, includePluginDependencies wird auch falsch in pom.xml gesetzt:

entfernen, die die Abhängigkeit von slf4j-api

<!-- 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.21</version> 
</dependency> 
--> 

von pom.xml.

Wenn es funktioniert, ist es nicht notwendig, -Dlog4j.configuration beim Aufruf von mvn exec: java hinzuzufügen.