2016-12-19 2 views
0

私は春のブートアプリケーションでLogbackを使用していますが、問題なく動作していますが、私はappenderの名前「FILE-AUDIT」を使用してログイン/書き込みしているファイルの絶対パスをプログラムで取得する必要があります。ログバック:どのようにログファイルのパスを取得できますか?

以下のXML設定ファイル与えられ、より明確にする:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
     <property name="LOG_ROOT" value="/home/sysadmin/logs" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
      <Pattern> 
       %d{yyyy-MM-dd HH:mm:ss} [%-5level] - %msg%n 
      </Pattern> 
     </encoder> 
    </appender> 

    <appender name="FILE-AUDIT" 
     class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${LOG_ROOT}/audit.log</file> 
     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
      <Pattern> 
       %d{yyyy-MM-dd HH:mm:ss} [%-5level] - %msg%n 
      </Pattern> 
     </encoder> 

     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <!-- rollover daily --> 
      <fileNamePattern>${LOG_ROOT}/archived/audit.%d{yyyy-MM-dd}.%i.log 
         </fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy 
       class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>10MB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 

    </appender> 

     <logger name="com.globant.corp.kit" level="info" additivity="false"> 
     <appender-ref ref="FILE-AUDIT" /> 
    </logger> 

    <root level="info"> 
     <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

私はお返しに私を与える方法を記述する必要がある「/home/sysadmin/logs/audit.log

答えて

1

springとlogbackの間でプロパティファイルを共有できます。または、contextスコープ付きログバックプロパティにプログラムでアクセスすることもできます。あるいは、あなたはappenderを探しているあなたのログバックコンテキストを掘り下げることができます。

使用logbackにクラスパスをオフにプロパティファイルをインポートするlogback.xml

<configuration> 
    <property scope="context" name="abc" value="xyz"/> 
</configuration> 

javaの代わりに

import ch.qos.logback.classic.LoggerContext; 

public static void main(String[] args) { 
    LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory(); 
    System.out.println(context.getProperty("abc")); 
} 

<configuration> 
    <property resource="resource1.properties" /> 
</configuration> 

両方番目eseソリューションは、/audit.logをプロパティに移動する必要があることを意味します。プロパティファイルのソリューションは、バネとの統合が容易です。

あなたはおそらくアペンダから直接それを得ることができますが、あなたはもっと危険なキャストが必要です。

LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
Logger logger = context.getLogger("com.globant.corp.kit"); 
RollingFileAppender<ILoggingEvent> xyz = (RollingFileAppender<ILoggingEvent>) logger.iteratorForAppenders().next(); 
TimeBasedRollingPolicy rollingPolicy = (TimeBasedRollingPolicy) xyz.getRollingPolicy(); 
rollingPolicy.getFileNamePattern(); 
+0

ありがとうROBYを!出来た –

関連する問題