2017-03-27 38 views
0

私は、自動構成の再ロードが必要なため、SpringブートアプリケーションでLog4jを使用しています。私はそれを設定することができ、自動設定は正常に動作しています。しかし、問題は私がlog4j2.propertiesファイルを作成して、コンソールとlog.fileに同じログを書き込むことができるということです。私はそれで私の手を試みたが、運がない。コンソールにログを書き込むサンプルファイルを次に示します。あなたが.propertiesを使用することに限定されず、ここでは、その後.yamlを使用できる場合Log4j2を使用したLoggerの設定

name=PropertiesConfig 
property.filename = appLogger 
appenders = console, file 
monitorInterval=10 

appender.console.type = Console 
appender.console.name = STDOUT 
appender.console.layout.type = PatternLayout 
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 

appender.file.type = File 
appender.file.name = LOGFILE 
appender.file.fileName=.\\logs\\appLogger.log 
appender.file.layout.type=PatternLayout 
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 

rootLogger.level = INFO 
rootLogger.appenderRefs = stdout,LOGFILE 
rootLogger.appenderRef.stdout.ref = STDOUT 
+0

春ブーツでlog4j2の構成についてのこの記事を参照してください: http://stackoverflow.com/questions/23296477/how-to-have-spring-boot-use-a-log4j-xml-configuration-ファイル – PaulNUK

+0

私は "spring-bootでlog4j2を設定する方法"を探していません。私が望むのは、ログファイルだけでなくコンソールにもメッセージを送ることができる単一のプロパティファイルです。 – rishi

+0

ファイルパスを絶対パスに変更しようとしましたか?それが問題の原因かどうかを確認するだけです。 –

答えて

0

は実施例です。

Configutation: 
    name: Default 

    Properties: 
    Property: 
     name: log-path 
     value: "/var/log/service" 

    Appenders: 
    #Appender will write the logs to console 
    Console: 
     name: Console_append 
     target: SYSTEM_OUT 
     PatternLayout: 
     pattern: "%highlight{[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=blue, DEBUG=green bold, TRACE=black}" 
    #Appender will write the logs to File 
    File: 
     name: file_append 
     fileName: ${log-path}/service.log 
     PatternLayout: 
     pattern: "%highlight{[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=blue, DEBUG=green bold, TRACE=black}" 
    #Appender will write the logs to rolling file 
    RollingFile: 
     - name: Roll_file_append 
     fileName: ${log-path}/service-rolling.log 
     filePattern: "${log-path}/service.log.%d{yyyy-MM-dd-hh-mm}.gz" 
     PatternLayout: 
      pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" 
     Policies: 
     #Roll the log file and zip if if the size exceeds 1MB 
      SizeBasedTriggeringPolicy: 
      size: 1 MB 
     #Keep below defined number of rolling files before deleting them 
     DefaultRollOverStrategy: 
      max: 45 

    Loggers: 
     #Root logging level for application 
     Root: 
     level: info 
     AppenderRef: 
      - ref: Console_append 
      - ref: file_append 
     #Application specific logging 
     Logger: 
     - name: com.system.serivce 
      additivity: false 
      level: debug 
      AppenderRef: 
      - ref: Console_append 
      - ref: file_append 
      - ref: Roll_file_append 

参考:here

注:あなたが仕事にyamlのクラスパスにjackson-dataformat-yamljackson-databindを含める必要があります。

0

これは、コンソールとE2Elog.txtファイルにログを書き込むのに役立ちます。

log4j.rootLogger=INFO,CONSOLE,LOGFILE,TESTAPPENDER 

log4j.appender.TESTAPPENDER=com.automate.commonUtils.TestNGReportAppender 
     log4j.appender.TESTAPPENDER.layout=org.apache.log4j.PatternLayout 
     log4j.appender.TESTAPPENDER.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m% 

     log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
     log4j.appender.CONSOLE.Follow=true 
     log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
     log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n 

     log4j.appender.LOGFILE=org.apache.log4j.DailyRollingFileAppender 
     log4j.appender.LOGFILE.File=E2Elog.txt 
     log4j.appender.LOGFILE.DatePattern='.'yyyy-MM-dd 
     log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout 
     log4j.appender.LOGFILE.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %m%n 

これ以外にも以下のコードを追加する必要があります。

package com.automate.commonUtils; 
import org.apache.log4j.AppenderSkeleton; 
import org.apache.log4j.Layout; 
import org.apache.log4j.spi.LoggingEvent; 
import org.testng.Reporter; 

public class TestNGReportAppender extends AppenderSkeleton { 

    @Override 
     protected void append(final LoggingEvent event) { 
     Reporter.log(eventToString(event)); 
     } 

     private String eventToString(final LoggingEvent event) { 
     final StringBuilder result = new StringBuilder(layout.format(event)); 

     if(layout.ignoresThrowable()) { 
      final String[] s = event.getThrowableStrRep(); 
      if (s != null) { 
      for (final String value : s) { 
       result.append(value).append(Layout.LINE_SEP); 
      } 
      } 
     } 
     return result.toString(); 
     } 

     @Override 
     public void close() { 

     } 

     @Override 
     public boolean requiresLayout() { 
     return true; 
     } 



} 

これは動作します希望:)

+0

'log4j2'がそれ自体をしているときに' Appender'を書く必要はありません。 – Sajjad

0

コンフィギュレーション・ファイルの一番下にrootLogger.appenderRef.file.ref = LOGFILEを追加します。私はの.xmlは、よりユーザーフレンドリーれていると思うので、

実は、私は、の.propertiesの代わりにの.xmlを使用して好みます。

E.G.

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
    <Appenders> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%m%n"/> 
     </Console> 
     <File name="MyFile" fileName="logs/app.log"> 
      <PatternLayout> 
       <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> 
      </PatternLayout> 
     </File> 
    </Appenders> 

    <Loggers> 
     <Root level="INFO"> 
      <AppenderRef ref="STDOUT"/> 
      <AppenderRef ref="MyFile"/> 
     </Root> 
    </Loggers> 
</Configuration> 
関連する問題