2016-12-30 7 views
1

単純なクラスを作成し、Loggerクラスのメソッドを使用してログメッセージを出力しようとしましたが、FileAppenderを使用してログメッセージをファイルに追加しました。 しかし、ログはファイルには印刷されません。log4jを使用しているときに期待された出力が得られません

私が作成したプログラムを使用してこれらのログをファイルに印刷する方法を教えてもらえますか?以下のプログラムのための

コード:

public class Client { 
static Logger l=Logger.getLogger(Client.class.getName()); 
public static void main(String[] args) { 
    Layout l1=new SimpleLayout(); 
    Appender a; 
    try{ 
     a=new FileAppender(l1,"my.txt",true); 
     l.debug("Hello Jc"); 
     l.info("Hello Jc"); 
     l.fatal("This is not the error message"); 
     l.addAppender(a); 
    } 
    catch(Exception e){ 
    } 
    System.out.println("your logic executed Successfully"); 
    // TODO Auto-generated method stub 

} 

出力:

log4j:WARN No appenders could be found for logger (Client). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
your logic executed Successfully 
ファイル内

予想される出力:

は、私はクラスパスでのlog4j-1.2.17 APIを使用しました
DEBUG Hello Jc 

INFO Hello Jc 

FATAL This is not the error message 
+0

は、あなたのクラスとパッケージのアペンダを使用して、クラスパスにlog4j.propertiesかのlog4j.xmlを持っていますか? – SMA

+0

いいえ私は.propertiesまたはxmlを使用していませんが、単純なJavaクラスを使用してアペンダーとレイアウトオブジェクトを使用しました。 – user6389648

答えて

2

のlog4j:いいえアペンダはロガー(クライアント)のために見つかりませんでしたWARN。 log4j:WARN log4jシステムを適切に初期化してください。 log4jの:あなたは、ファイルアペンダを構成に追加することを前にログインしようとするので、あなたがこの問題を持っている

a = new FileAppender(l1,"my.txt",true); 
    l.debug("Hello Jc"); 
    l.info("Hello Jc"); 
    l.fatal("This is not the error message"); 
    l.addAppender(a); // too late 

WARN。アペンダーなしでログを記録するには?

だから操作をログに記録する前にl.addAppender(a)を上に移動:

a = new FileAppender(l1,"my.txt",true); 
l.addAppender(a); // appender is added, you can log 
l.debug("Hello Jc"); 
l.info("Hello Jc"); 
l.fatal("This is not the error message"); 
1

単にUtilクラスを作成しましたログの構成を初期化します。

public static void initLogger() { 
    try { 
     String filePath = "D:/my.log"; 
     PatternLayout layout = new PatternLayout("%-5p %d %m%n"); 
     RollingFileAppender appender = new RollingFileAppender(layout, filePath); 
     appender.setName("log"); 
     appender.setMaxFileSize("10MB"); 
     appender.activateOptions(); 
     Logger.getRootLogger().addAppender(appender); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

次に、このメソッドを呼び出してファイルに書き込んだ。

public static void main(String[] args) { 
    LoggerUtil.initLogger(); 

    Logger accessLog = Logger.getLogger("log"); 

    accessLog.info("This is info message."); 
    accessLog.warn("This is warn message."); 
    accessLog.error("This is error message."); 
    accessLog.fatal("This is fatal message."); 
}