4

Webアプリケーション全体でロガーを使用しようとしています。ログをファイルに書き込むためのFileHandlerを追加しました。ここで、プロジェクト内の他のクラス/サーブレットで同じハンドラーを使用して、すべてのクラスのログが同じテキストファイルに書き込まれるようにする必要があります。どうすればこれを達成できますか?

/***
 * Initialize a logger
 */
public static Logger logger;
static {
    try {
      FileHandler fh = new FileHandler("log.txt", true);
      fh.setFormatter(new SimpleFormatter());
      logger = Logger.getLogger(MyClass.class.getName());
      logger.addHandler(fh);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
}

上記のコードのように、すべてのクラスでロガーを初期化し、ハンドラーを追加する必要がありますか?他のテクニックはありますか?

4

3 に答える 3

4
package package_name;

import java.io.IOException;

import java.util.Properties;

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;


public class Log {

public  Log() 
{
        Properties props = new Properties();
    try {
        props.load(getClass().getResourceAsStream("/log4j.properties"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    PropertyConfigurator.configure(props);//PropertyConfigurator.configure("log4j.properties");
}

public  Logger getLogger(Object obj) 
{
    Logger logger = Logger.getLogger(Object.class);
    return logger;
}

}

次に、パッケージの1つにlog4j.propertiesファイルを保持する必要があり、ファイルは次のようになります。

log4j.properties

log4j.rootLogger=DEBUG, R,CA

log4j.appender.R = org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File = c:\\our project name+LOGSLIVE\\logs\\project short name.log

log4j.appender.R.Append = true

log4j.appender.R.DatePattern = '_'yyyy-MM-dd'.log'

log4j.appender.R.layout = org.apache.log4j.PatternLayout

#log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%t] [%p] %m%n

log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p [%t] (%F:%L) -  %m%n


#Console Appender

log4j.appender.CA=org.apache.log4j.ConsoleAppender

log4j.appender.CA.layout=org.apache.log4j.PatternLayout

log4j.appender.CA.layout.ConversionPattern=%5p [%t] (%F:%L) -  %m%n
于 2012-10-19T05:02:26.610 に答える
3

Log4Jなどのロギングフレームワークの使用を検討したいと思います。

これを使用すると、アペンダー(FileAppenderなど)とログレベルを中央ファイル(.xmlまたは.properties)と、ロガーを定義する必要のある各クラスLog l = LogFactory.getLog(clazz);(clazzはクラスです)で構成することになります。のロガーを定義します)。

ロガーを静的に公開して他のクラスから使用することもできますが、通常、どのロガー(つまり、そのロガーが定義されたクラス)がログエントリを生成したかを知りたいので、お勧めしません。

于 2011-04-19T06:42:21.313 に答える
3

logging.propertiesファイルを使用して、アプリケーション全体のハンドラーをグローバルに定義できます。このファイルでは、ロギングのニーズを微調整できます。

こちらをご覧になるか、 logging.propertiesをグーグルで検索してください。

上記のリンクからの例:

handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler

java.util.logging.ConsoleHandler.level = INFO
java.util.logging.FileHandler.level = ALL

java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

logging.propertiesをWebアプリのWEB-INF/classesに配置することで、Webアプリケーションごとに異なるロギング動作を設定することもできます。

于 2011-04-19T07:37:44.663 に答える