2016-04-13 8 views
0

私はmvn exec:java -Dexec.mainClass=my.Classを使用してコマンドラインで実行しています。プログラムが実行されている間、デバッグ出力があります。これはログに記録します。mvn execを使用するとlog4j.propertiesが無視されます。

私はprivate static Logger logger = LoggerFactory.getLogger("mylogger");を使用してロガーを初期化します。私はlog4j.propertiesでこのようにそれを設定している:

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 

はしかし、loggerはクラスorg.slf4j.impl.JDK14LoggerAdapterを持っており、log4j.propertiesのすべての設定を無視しているようだ - それはローカライズされた警告とに関する情報をSTDERRにログインしています。

マイ関連Mavenの依存関係:

<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> 

mvn exec:javaを使用しているとき、私は私のカスタム構成されたロガーを取得するにはどうすればよいですか? Jettyで残りのSpringアプリケーションを実行しているとき、私のlog4j.properties設定は正常に動作します。

答えて

1

JDK14LoggerAdapterは、slf4j-jdk14-1.7.21.jarの一部です。だから、私の推測では、あなたのクラスパスにこのjarファイルが入っているということです。

mvn exec:javaとjettyは、jdk14バインディングよりもslf4j-log4j12が好きであることをjettyさんとは別のクラスローダーしか使用できません。

また、exec:java includePluginDependenciesがtrue(デフォルトではfalse)に設定されていないことを確認してください。http://www.mojohaus.org/exec-maven-plugin/java-mojo.html

攻撃的なjarを削除した後でも、コマンドラインでlog4.propertiesファイルを選択する必要がある場合。すなわち、コンソールに次のエラーを入力:

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. 

あなたはプロパティへのパスを提供することができますが、MVNのexecにシステムプロパティlog4j.configurationを渡すファイル:javaの

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

+0

私はpom.xmlに 'slf4j-jdk14'を持っていません... – tholu

+0

mvn dependencyを試してください:tree、おそらく推移 –

+0

' slf4j-jdk14'が 'exec 'maven-plugin 1.4.0'を' META-INF/maven/plugin.xml'に追加したので、 'mvn exec:java'に' slf4j-jdk14'を使わないように教えるにはどうしたらいいですか? – tholu

1

を確認してくださいincludePluginDependenciesに設定されています。pom.xmlの

<configuration> 
    <executable>maven</executable> 
    <includePluginDependencies>false</includePluginDependencies> 
</configuration> 

のpom.xmlからSLF4J-API

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

の依存性を除去します。

mvn exec:javaを呼び出すときに、-Dlog4j.configurationを追加する必要はありません。

関連する問題