logback configureと使用

簡単な紹介

logbackは、デザインの創始者によって別のオープンソースのlog4jログコンポーネントです。現在は三つのモジュールに分かれています。

  • logbackコアモジュールの他の二つのモジュールのための基礎です。

  • logback-classicがlog4jのの修正版です。さらにlogback-古典的な完全な実装のSLF4J APIを、あなたは簡単なのlog4jやJDK14ロギングなど、他のロギングシステムに変更することができます。

  • logback-アクセスアクセス・モジュールは、HTTPアクセスログ機能により供給されたサーブレットコンテナと統合します。

コンフィギュレーション

コンフィギュレーションのpom.xml

logback必要logback-コアlogback-クラシックSLF4J-APIlogback Access- 4依存。Logbackクラシック既にによるMavenの推移の依存性を、logback-コアとSLF4J-APIに依存するが含まれているので、私たちはただlogback-クラシックとlogback-アクセスをインポートするに頼ることができます。

    <dependencies>
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.3.0-alpha4</version>
        </dependency>
        <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-access</artifactId>
          <version>1.3.0-alpha4</version>
        </dependency>
    </dependencies>

初期化ステップ

1.クラスパスにlogback-のtest.xmlファイルを検索します。

2.見つからない場合は、クラスパスにlogback.groovyファイルを探します。

3.見つからない場合は、クラスパスにlogback.xmlファイルを探します。

4.ない場合は、ServiceLoaderは、次のクラスパスcom.qos.logback.classic.spi.Configurator実装クラスのMETA-INF \サービスをロードしてみてください\ ch.qos.logback.classic.spi.Configurator設定ファイル(コンフィギュレータファイルクラスの完全修飾クラス名を達成するためのコンテンツ)。

それでも見つからない場合は5、それはデフォルトでコンソールにログ出力を、デフォルトの設定をロードします、つまり、BasicConfigurator、BasicConfiguratorの使用は、実装クラスcom.qos.logback.classic.spi.Configuratorインタフェースです。

public class BasicConfigurator extends ContextAwareBase implements Configurator {

    public BasicConfigurator() {
    }

    public void configure(LoggerContext lc) {
        addInfo("Setting up default configuration.");
        
        ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<ILoggingEvent>();
        ca.setContext(lc);
        ca.setName("console");
        LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>();
        encoder.setContext(lc);
        
 
        // same as 
        // PatternLayout layout = new PatternLayout();
        // layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
        TTLLLayout layout = new TTLLLayout();
 
        layout.setContext(lc);
        layout.start();
        encoder.setLayout(layout);
        
        ca.setEncoder(encoder);
        ca.start();
        
        Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
        rootLogger.addAppender(ca);
    }
}

logback.xmlを使用してください

<configuration scan="true" scanPeriod="30 seconds">
  <!-- 自定义属性,通过${}访问 -->
  <property name="filePath" value="/logs/" />
    
  <!-- 输出到控制台 -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %msg%n</pattern>
    </encoder>
  </appender>
  
  <!-- 输出到文件 -->
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 文件路径 -->
    <file>${filePath}app.log</file>
    <!-- 日志输出格式化 -->
    <encoder>
        <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
    </encoder>
    
    <!-- 滚动策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 每日滚动 -->
      <fileNamePattern>${filePath}app.log%d{yyyy-MM-dd}.log</fileNamePattern>
     
      <!-- 将30天的日志总大小限制在3GB内  -->
      <maxHistory>30</maxHistory>
      <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>
  </appender> 
  
  <!-- 基于尺寸和时间的滚动策略 -->
  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${filePath}other.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <fileNamePattern>${filePath}other.log%d{yyyy-MM-dd}%i.log</fileNamePattern>
       <!-- 每个日志文件最多100MB,保存60天的历史记录,总大小不超过20GB -->
       <maxFileSize>1KB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
    </encoder>
  </appender>
  
  <!-- name属性指定包名或者完全限定类名 -->
  <logger name="service.OtherService" level="DEBUG">
        <appender-ref ref="ROLLING" />
  </logger>

  <!-- 根logger -->
  <root level="DEBUG">
    <!-- 配置输出源 -->
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

テスト:

public class HelloService {
    private final static Logger logger = LoggerFactory.getLogger(HelloService.class);
    
    public static void main(String[] args) {
        //根据logback.xml中配置的日志级别,TRACE级别的日志将不会输出,只会输出DEBUG及以上级别的日志。
        //TRACE < DEBUG < INFO <  WARN < ERROR
        logger.trace("---------------trace---------------");
        logger.debug("---------------debug---------------");
        logger.info("---------------info---------------");
        logger.warn("---------------warn---------------");
        logger.error("---------------error---------------");
    }
}

一般的なヒント

1.プレースホルダ

        logger.debug("我是" + name + ",我今年" + age + "岁,很高兴认识你!");//普通方式
        logger.debug("我是{},我今年{}岁,很高兴认识你!", name, age);//占位符方式(推荐)

デバッグログを無効にすると、プレースホルダには、パラメータは、モザイクを構築することはありませんが、通常の方法では、パラメータはまだ、モザイク構築されます。

(他のロギングフレームワークの交換を容易にするために、依存性ではなく、特定のロギングの実装に依存するファサードをログ)APIのSLF4Jのlogbackを使用して代わりのAPIを使用する場合2に使用されるべきです

3.自動設定ファイルを再ロードします

意志 スキャンプロパティ要素がtrue、logback定期的にスキャンプロファイルに設定されているプロファイルが変更された場合、それは自動的に設定ファイルをリロードします。1分間に1回デフォルトのスキャンは、プロパティscanPeriod走査間隔を指定するために設けられてもよいです。

<configuration scan="true" scanPeriod="30 seconds" > 
  ...
</configuration> 

おすすめ

転載: www.cnblogs.com/seve/p/11271076.html