Java logbackログの簡単な使用


説明
logbackはlog 4 jの代わりとして、多くの利点があります。logbackをプロジェクトに適用するには、手順が簡単です。依存するjarパッケージとプロファイルを追加すればいいです。
logback.xmlの主要元素:

  • 属性を定義し、定義した後、後の文は変数を通して参照できます。

  • ログ出力フォーマット、位置、ファイル分割などを定義します。「logger」または「root」に参照されます。

  • ログ名と対応するレベルを指定します。nameはパッケージ名、クラス名または単純な文字列であってもよい。パッケージ名またはクラス名の場合、パッケージまたはクラスのログレベルは、ここの設定に対応します。単純な文字列名であれば、get Logger(name)で取得したログは、ここの構成を採用します。

  • デフォルトで使用するログの設定を指定します。ここの設定はデフォルトで使用します。
    使用
    logback依存のカバン:
    
    <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
     <version>1.7.21</version>
    </dependency>
    <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-core</artifactId>
     <version>1.1.7</version>
    </dependency>
    <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.1.7</version>
    </dependency>
    logback.xmlプロファイルはclassipathに入ればいいです。プログラムは自動的にこのファイルを読みます。
    
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <configuration scan="true" scanPeriod="3 seconds">
    
     <property name="z_app" value="${z_app:-app}"/>
    
     <property name="SQL_LEVEL" value="DEBUG"/>
     <property name="SERVICE_LEVEL" value="DEBUG"/>
     <property name="RPC_LEVEL" value="DEBUG"/>
     <property name="BOOT_LEVEL" value="DEBUG"/>
     <property name="BUF_LEVEL" value="DEBUG"/>
    
     <!-- 09:14:20.256 [main] INFO com.h.db.business.main.Main - asfdasdf -->
     <property name="PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    
     <property name="SQL_LOG_FILE" value="${LOG_HOME}/logs/${z_app}/${z_app}Sql.log"/>
     <property name="SERVICE_LOG_FILE" value="${LOG_HOME}/logs/${z_app}/${z_app}Service.log"/>
     <property name="RPC_LOG_FILE" value="${LOG_HOME}/logs/${z_app}/${z_app}RPC.log"/>
     <property name="BOOT_LOG_FILE" value="${LOG_HOME}/logs/${z_app}/${z_app}Boot.log"/>
     <property name="BUF_LOG_FILE" value="${LOG_HOME}/logs/${z_app}/${z_app}Buf.log"/>
     <property name="TRACE_LOG_FILE" value="${LOG_HOME}/logs/${z_app}/${z_app}Trace.log"/>
    
     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
       <charset>utf-8</charset>
       <pattern>${PATTERN}</pattern>
      </encoder>
     </appender>
    
     <property name="ROOT_LEVEL" value="DEBUG"/>
    
     <property name="APP_LOG_FILE" value="${LOG_HOME}/logs/${z_app}/${z_app}.log"/>
    
     <appender name="APP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <encoder>
       <charset>utf-8</charset>
       <pattern>${PATTERN}</pattern>
      </encoder>
      <prudent>false</prudent>
      <append>true</append>
      <file>${APP_LOG_FILE}</file>
      <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
       <fileNamePattern>${APP_LOG_FILE}.%d{yyyy-MM-dd}-%i.gz</fileNamePattern>
       <maxFileSize>10MB</maxFileSize>
       <maxHistory>15</maxHistory>
       <totalSizeCap>200MB</totalSizeCap>
      </rollingPolicy>
     </appender>
    
     <!--     sql -->
     <logger name="SqlLog" level="DEBUG" >
      <appender-ref ref="APP_LOG" />
      <appender-ref ref="CONSOLE" />
     </logger>
     <!--        -->
     <logger name="druid.sql.Connection" level="DEBUG" />
     <logger name="org.springframework.jdbc.datasource.CoreDataSourceUtils" level="DEBUG" />
     <logger name="org.springframework.jdbc.datasource.DataSourceUtils" level="DEBUG" />
     <logger name="org.apache.zookeeper.ClientCnxn" level="info" />
     <logger name="org.mongodb.driver.connection" level="info" />
     <logger name="org.mongodb.driver.cluster" level="info" />
     <logger name="org.apache.zookeeper.Environment" level="ERROR"/>
     <logger name="org.apache.curator.framework.recipes.cache.TreeCache" level="debug"/>
     <logger name="tk.mybatis.mapper.mapperhelper.MapperTemplate" level="DEBUG"/>
    
     <root level="${ROOT_LEVEL}">
      <appender-ref ref="APP_LOG" />
      <appender-ref ref="CONSOLE" />
     </root>
    </configuration>
    コード:
    
    //   LoggerFactory.getLogger(${logger_name}),  logger_name logback.xml logger       
    private static final Logger logger2 = LoggerFactory.getLogger(XX.class);
    
    よくある問題
    パケット衝突
    出現する場合:
    
    org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
    または:
    
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/E:/**/WEB-INF/lib/activemq-all-5.10.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/E:/**/WEB-INF/lib/slf4j-simple-1.6.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    衝突があるという意味で、衝突したカバンを削除すればいいです。ロゴ4 j、activemq-allなどのバッグによって、それらを削除します。
    No such instance field:'logger 2'
    最初はキャッシュをコンパイルする原因だと思っていましたが、rebuildは何度も同じ問題です。
    debuggerのevaluateツールを通じて、ロギングFactory.get Logger(「SqlLog」).info(「testtest」)を実行し、また正常であり、コンソールとファイルにログ内容を正確に出力することができます。コードには問題がなく、取得したログガーのインスタンスも正しいということです。
    evaluateツールを通じて、logger 2を入力するといつも問題がありますが、loggerを入力しても大丈夫です。logger.infoはエラーが発生します。プロンプトはlog 4 jのカバンです。これはもう説明しました。クラスは最新のものではないです。loggerは修正前に定義されたので、logger 2に変更されました。
    ただし、ブレークポイントの場合は、コードラインの位置が乱れていません。文書とは最新のものではないので、ちょっと矛盾しているようです。
    最後に、キャッシュの原因を発見しますか?
    classファイルを手動でクリアし、再コンパイルして起動し、問題解決します。
    どうやら、ideaのrebuildはスペクトルに合わない場合があります。classファイルは最新のものです。
    以上がJava logbackログの使用の詳細です。Java logbackログに関する資料は他の関連記事に注目してください。