2016-08-30 22 views
0

私は最近、Java Webサービスアプリでlog4jをv1.2からv2.6.2に更新しました。このアプリケーションはJava 7.0_67-b01を使用してTomcat 7.0.21でホストされています。 Eclipse Juno(v4.2.0)を使用したコーディング/コンパイル。log4j2ファイルが作成されましたが、書き込まれません。

log4j.properties機能を新しいlo4j2.xml構成ファイルに再現しました。コードサンプルは以下の通りですが、標準のコンソールアペンダに加えてRollingFileアペンダとFileアペンダを使用しようとしています。

ログファイルは予想される場所に作成されていますが、空のままです。コンソール自体は、私のアプリがスローするすべてのメッセージを記録しています。カタリナ。 yyyy-mm-dd .logファイルが情報レベル以上のログです。前述のように、tearsLog.logファイルとtearsLogRF.logファイルは作成されますが、ログメッセージはまったく書き込まれません。

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="trace"> 
    <Properties> 
     <Property name="log-path">${sys:catalina.home}/logs</Property> 
    </Properties> 
    <Appenders> 
     <Console name="Console" 
       target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%t] (%F:%L) - %m%n" /> 
     </Console> 

     <File name="MyFile" 
       append="true" immediateFlush="true" 
       fileName="${log-path}/tearsLog.log"> 
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%t] (%F:%L) - %m%n" /> 
     </File> 

     <RollingFile name="MyRollingFile" 
       append="true" immediateFlush="true" 
       fileName="${log-path}/tearsLogRF.log" 
       filePattern="${log-path}/tearsLogRF_%d{yyyy-MM-dd_HH-mm-ss}.log"> 
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%t] (%F:%L) - %m%n" /> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="100 KB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="10" /> 
     </RollingFile> 
    </Appenders> 

    <Loggers> 
     <Logger name="us.ak.state.adfg.tears.service.TearsService" level="info" additivity="false"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="MyFile" level="trace" /> 
      <AppenderRef ref="MyRollingFile" /> 
     </Logger> 

     <Logger name="us.ak.state.adfg.tears.data.GenericDao" level="info" additivity="false"> 
      <AppenderRef ref="MyFile" level="trace" /> 
      <AppenderRef ref="MyRollingFile" /> 
     </Logger> 

     <Logger name="us.ak.state.adfg.tears.data.EmployeeDao" level="info" additivity="false"> 
      <AppenderRef ref="MyFile" level="trace" /> 
      <AppenderRef ref="MyRollingFile" /> 
     </Logger> 

     <Logger name="us.ak.state.adfg.tears.data.TimesheetDao" level="info" additivity="false"> 
      <AppenderRef ref="MyFile" level="trace" /> 
      <AppenderRef ref="MyRollingFile" /> 
     </Logger> 

     <Logger name="us.ak.state.adfg.tears.data.SecurityDao" level="info" additivity="false"> 
      <AppenderRef ref="MyFile" level="trace" /> 
      <AppenderRef ref="MyRollingFile" /> 
     </Logger> 

     <Root level="debug"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="MyFile" level="trace" additivity="false" /> 
      <AppenderRef ref="MyRollingFile" additivity="false" /> 
     </Root> 
    </Loggers> 
</Configuration> 

サンプル*のの.javaクラス:私は離れて暴れるしてきた

package us.ak.state.adfg.tears.service; 

import java.util.Date; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 


public class TearsService { 
    static Logger log = LogManager.getLogger(TearsService.class); 

    public TearsService() { 
    } 

    public int saveTimesheet(User user, Timesheet ts) throws Exception {   
     String msg = ""; 
     if (user == null) { 
      msg = "Null user."; 
      log.error(msg); 
      throw new Exception(msg); 
     } 
     ... 
     return 0; 
    } 

、多くの、多くのコードサンプル、Apacheのlog4jのドキュメントとSOの質問を見て/答え、使用されたサンプルコードと提案...何が間違っているのか理解できません。私はそれが近くにあることを知っている、ちょっとしたちょっとしたことが、私がそれを動かすのを止めさせている。助けていただければ幸いです。事前にありがとうございます...

+0

コメントには投稿しないでください。質問を編集します。コメントを削除します。 – Andreas

答えて

1

表示されるコンソールのメッセージは、おそらくtomcatによって発行されます。このサンプルコードだけを実行している場合は、ログに何もないことが分かります。唯一のエラーはエラー時に行われます。あなたのコードの変更:ところで

public int saveTimesheet(User user, Timesheet ts) throws Exception {   
    String msg = ""; 
    log.info("Message:{}",msg); 
    if (user == null) { 
     msg = "Null user."; 
     log.error(msg); 
     throw new Exception(msg); 
    } 
    ... 
    return 0; 
} 

すると、あなたが各クラスのロガーを定義するべきではありません、それはすべてのための十分な共通ロガーです。最終的に

<Loggers> 
    <root level="debug"> 
     ... 
    </root> 
    <Logger name="us.ak.state.adfg.tears" level="info" additivity="false"> 
     <AppenderRef ref="Console" /> 
     <AppenderRef ref="MyFile" level="trace"/> 
     <AppenderRef ref="MyRollingFile" /> 
    </Logger> 

</Loggers> 
+0

そのヒントをありがとう、私はコードの繰り返しを減らすことができると期待していた。あなたは努力のためにAを手に入れましたが、最終的にはTomcatサーバーを再起動すると魔法のように問題が解決しました。奇妙なことに、コードとlog4jモジュールはすべてアプリケーションに含まれています。私は単純に再デプロイすると(ファイルを作成して)動作させると思っていましたか?とにかく、それは今働いているようだ。 – jwdvorak

+0

努力のためのA?どうしてアップボートしないの? –

0

、Tomcatサーバーを再起動すると、魔法のように固定問題。奇妙なことに、コードとlog4jモジュールはすべてアプリケーションに内蔵されているため、アプリケーションを再デプロイするだけで(ファイルを作成して)機能させることができたと思いますか?とにかく、それは今働いているようだ。

関連する問題