2017-06-23 6 views
0

クラスから2つの異なるロガーにログインしようとしています。クラスがあり、2つのメソッドを定義して、 1つのログファイルに、別のメソッドから別のログファイルにコピーします。ここでメソッドレベルでログ出力を分離する方法(あるクラス内で異なるログファイルを使用する)

私のコードです:

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration> 
     <property name="LOGS_HOME" value="${LOG_PATH}"/> 
     <!-- standard encoder pattern--> 
     <property name="LOG_PATTERN" value="%d{MM/dd/yy HH:mm:ss.SSS} %-5p %t %C{0}:%L - %m%n" /> 

     <include resource="org/springframework/boot/logging/logback/defaults.xml" /> 
     <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> 

     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <Pattern>${LOG_PATTERN}</Pattern> 
     </layout> 
     </appender> 

     <property name="EMPLOYEE_LOG_FILE" value="${LOGS_HOME}/employee.log"/> 
     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>${EMPLOYEE_LOG_FILE}</file> 
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <fileNamePattern>${EMPLOYEE_LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern> 
       <maxHistory>14</maxHistory> 
      </rollingPolicy> 
      <encoder> 
       <charset>UTF-8</charset> 
       <pattern>${LOG_PATTERN}</pattern> 
      </encoder> 
     </appender> 

     <property name="EMPLOYEE_SALARY_LOG_FILE" value="${LOGS_HOME}/emp_sal.log"/> 
     <appender name="SalaryLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>${EMPLOYEE_SALARY_LOG_FILE}</file> 
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <fileNamePattern>${EMPLOYEE_SALARY_LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern> 
       <maxHistory>14</maxHistory> 
      </rollingPolicy> 
      <encoder> 
       <charset>UTF-8</charset> 
       <pattern>${LOG_PATTERN}</pattern> 
      </encoder> 
     </appender> 

     <property name="EMPLOYEE_DEPT_LOG_FILE" value="${LOGS_HOME}/emp_sal.log"/> 
     <appender name="DeptLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>${EMPLOYEE_DEPT_LOG_FILE}</file> 
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <fileNamePattern>${EMPLOYEE_DEPT_LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern> 
       <maxHistory>14</maxHistory> 
      </rollingPolicy> 
      <encoder> 
       <charset>UTF-8</charset> 
       <pattern>${LOG_PATTERN}</pattern> 
      </encoder> 
     </appender> 


     <logger name="com.nbt.apps.employeeInfo" level="info" additivity="false"> 
      <appender-ref ref="FILE" /> 
      <appender-ref ref="STDOUT" /> 
     </logger> 



     <logger name="com.garmin.gh.apps.wellnessmonitor.service.EmployeeService" level="info" additivity="false"> 
      <appender-ref ref="DeptLogAppender" /> 
      <appender-ref ref="SalaryLogAppender"/> 
     </logger> 



     <root level="INFO"> 
      <appender-ref ref="FILE" /> 
      <appender-ref ref="STDOUT" /> 
     </root> 

    </configuration> 

How to log from one class to two different log files based on methods? 

答えて

1

あなたが別のログファイルに書き込みたい場合は、最初にあなたが異なる([ファイル] - )アペンダが必要になります。ここでは

private static final Logger logger = LoggerFactory.getLogger(SummaryService.class); 


    public void empSalInfo(){ 
      logger.info("employee info.."); // this should log into SalaryLogAppender 
     } 

     public void empDeptInfo(){ 
      logger.info("dept info"); // this should log into DeptLogAppender 
     } 

は私のlogback-春のファイルです出力を分離することができます。

これは、複数のアペンダおよび関連ロガー提供する単純なlogback-spring.xmlある:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <include resource="org/springframework/boot/logging/logback/defaults.xml" /> 
    <property name="LOG_FILE" value="application.log"/> 
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" /> 
    <root level="INFO"> 
     <appender-ref ref="FILE" /> 
    </root> 

    <appender name="oneAppender" class="ch.qos.logback.core.FileAppender"> 
     <file>one.log</file> 
     <encoder> 
      <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <appender name="anotherAppender" class="ch.qos.logback.core.FileAppender"> 
     <file>another.log</file> 
     <encoder> 
      <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="oneLogger" level="ALL" additivity="false"> 
     <appender-ref ref="oneAppender" /> 
    </logger> 

    <logger name="anotherLogger" level="ALL" additivity="false"> 
     <appender-ref ref="anotherAppender" /> 
    </logger> 

</configuration> 

(デフォルト)rootロガー共通の「application.logで」に転送し、すべての一般的なアプリケーションメッセージ、例えばをアプリケーション起動メッセージなどが含まれます。

その後、別のファイル(one.log & another.log)にバインドされた2つの明示的なファイルアペンダ(oneAppender & anotherAppender)があります。

異なるログファイルに特定のメッセージパイプにその名前によって参照することができ、このアペンダに結合

少なくとも2つのロガー(oneLogger & anotherLogger)。あなたが今、最も簡単な方法は、直接あなたのビジネス層の内部でそのような二つの別々のLoggerのインスタンスを作成することです、あなたのログを実装することが可能な構成により

final Logger oneLogger = LoggerFactory.getLogger("oneLogger"); 

final Logger anotherLogger = LoggerFactory.getLogger("anotherLogger"); 

public void empSalInfo(){ 
    oneLogger.info("employee info.."); // this should log into SalaryLogAppender 
} 

public void empDeptInfo(){ 
    anotherLogger.info("dept info"); // this should log into DeptLogAppender 
} 

しかし、それは冗長なのいくつかの種類になりますので、エラーが発生しやすいように、Spring AOPでビジネスコードを傍受することについて考えてみてください。

関連する問題