2010-12-15 7 views
0

Log4jをJboss EJB Webサービスとともに使用しています。私はファイルにアプリケーションフローを記録しています。Jboss webserviceでLog4jを使用しているときに重複データを書き込む

これは私がアプリケーションを実行すると、私は同じデータが二度や三度書かれている、すなわち...、私のファイル内の重複データを取得しています。

FileAppender fileappender; 

    File file = new File("jws_" + getCurrentDate("dd_MMM_yyyy") + ".log"); 

      Logger log = null; 
    System.out.println(file.getAbsolutePath()); 
    try 
    { 
     log = Logger.getLogger(ConnMan.class); 
     fileappender = new FileAppender(new PatternLayout(),"f2cjws_" + getCurrentDate("dd_MMM_yyyy") + ".log"); 
     log.addAppender(fileappender); 


        if (!theLogLevel.equalsIgnoreCase("error")) 
        { 
         if ("yes".equalsIgnoreCase(getProperties().getProperty("log"))) 
         { 
          log.debug(getCurrentDate("dd MMM yyyy HH:mm:ss 1")+" "+theError); 
         } 
        } 
        else 
        { 
         log.debug(getCurrentDate("dd MMM yyyy HH:mm:ss 1")+" "+theError); 
        } 

    } 
    catch (IOException e) 
    { 
     System.out.println("Logger failed due to "+e.getMessage()); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Logger failed due to "+e.getMessage()); 
    } 

を記録するために使用していたコードです上記のコードは、TomcatにデプロイされたWebアプリケーションで正常に機能しました。

私はJBossに関連して何かを見逃していると感じています。

このWebサービスでは現在、サーバーに組み込まれているlog4jプロパティが使用されています。アプリケーション独自のプロパティファイルを使用する方法を知ることはできますか?

私を助けてください、事前に

おかげで、

+1

完全にランダムな字下げが見えるのは私だけですか?私はここで狂気の丸薬を取っているように感じる –

+0

申し訳ありません私はあなたを得ることができませんでした。あなたはもっと具体的になりますか?ありがとう – mvg

+0

..私はあなたがかなり間違った道に行っていると思います..... – water

答えて

2

は、まずあなた自身のログライターを作成する必要があり

パブリック最終クラス・ライター {

プライベート静的ロガーappLogger = NULL;

private static String className = LogWriter.class.getName() + "."; 

static 
{ 
    try 
    { 
     appLogger = Logger.getLogger("Demologer"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
    public static void logDebug(String message) 
{ 
    appLogger.log(className, Level.DEBUG, LogWriter.getMessage(message), null); 
} 


public static void logInfo(String message) 
{ 
    appLogger.log(className, Level.INFO, LogWriter.getMessage(message), null); 
} 

public static void logError(String message) 
{ 
    appLogger.log(className, Level.ERROR, LogWriter.getMessage(message), null); 
} 

プライベート静的な文字列のgetMessage(文字メッセージ) {ストリングretValue。

Calendar cale = Calendar.getInstance(); 
    Date now = cale.getTime(); 

    //retValue=now.getDate()+"/"+(now.getMonth()+1)+"/"+(now.getYear()+1900)+" "+now.getHours()+":"+now.getMinutes()+":"+now.getSeconds(); 
    retValue = now + "\n"; 

    now = null; 
    cale = null; 

    return retValue + message; 
} 

}


は、これはokです。..

し、必要に応じて、このいずれかを使用する........実は

...... 。

+0

ああ、あなたはあなたの答えを更新するために最初のものを編集することができます。アップデートいただきありがとうございます – mvg

+0

あなたのソリューションは動作します。唯一の疑い。これは交通量の多いWebサービスです。静的メソッドを作成すると問題が発生しますか? – mvg

+0

私は確信していません... – water

1

log4j.propertiesに次のようなものがある場合は、出力に重複が表示されます。

log4j.rootLogger=error, myappender 
log4j.logger.com.sample=warn 
log4j.logger.com.sample.deeper.package=all 

編集::。

log4j.rootLogger=error, myappender 
log4j.logger.com.sample=warn, myappender 
log4j.logger.com.sample.deeper.package=all, myappender 
はそれを修正

com.sampleからのすべてのクラス、致命的なエラーや警告レベルのログから致命的なエラーレベルのログを書き込みます後*クラスとcom.sample.deeper.package。*クラスのすべてのログを/var/log/myappender/myappender.logファイルにコピーします。

あなたルートパッケージでlog4j.propertiesとして保存:あなたはロガーを必要とする、あなたのすべてのクラスで

# This appender is not used in this example. 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c - %m%n 

# But this one is used. 
log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.myappender.DatePattern='.'yyyy-MM-dd 
log4j.appender.myappender.File=/var/log/myappender/myappender.log 
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout 
log4j.appender.myappender.layout.ConversionPattern=%d{ABSOLUTE} %5p %c - %m%n 
log4j.appender.myappender.Encoding=UTF-8 

log4j.rootLogger=error, myappender 
log4j.logger.com.sample=warn 
log4j.logger.com.sample.deeper.package=all 

private static Logger logger = Logger.getLogger(ThisClassName.class); 

そして、あなたはあなたがあなたの中に持っているスニペットコードを必要としないにもう質問。

+0

実際に私のWebサービスは、Jbossで利用可能なデフォルトのlog4jプロパティファイルを取ります。私の物性を見せる方法を教えていただけますか? – mvg

+0

私が覚えている限り、プロパティファイルは、Javaクラスパス内の他のタイプのリソースの読み込みに従うので、クラスパスのプロパティファイルは、同じパッケージ内の他のすべてのプロパティファイルを上書きします。私は私の応答でサンプルを追加し、分を待つ! –

+0

更新!! (+ StackOverflowをフィードするためのその他の文字!) –

関連する問題