Javaアプリケーションでは、ログは通常、次の5つのレベルに分割されます。
Spring Bootは、ApacheのCommonsロギングを内部ロギングフレームワークとして使用します。これは単なるログインターフェイスです。実際のアプリケーションでは、このインターフェイスに対応するログ実装を指定する必要があります。
SpringBTのデフォルトのログ実装は、Java Utilロギングで、JDKに組み込まれたログパッケージです。さらに、SpringBTは、Log4JやLogBackなどの非常に人気のあるログ実装もサポートしています。
上記のログの実装は、集合的にログフレームワークと呼ばれます
以下で練習しましょう!
スプリングブートロギングプラグインを使用します
最初にapplication.propertiesファイルに構成を追加します:
logging.level.root = info
コントローラーコードは次のとおりです。
パッケージcom.hansonwang99.controller; import com.hansonwang99.k8sresctrlapplication; Import org.slf4j.logger; Import org.slf4j.loggeractory; Import org.springframework.web.web.bind.annotation.getmappy; org.springframework.web.bind.annotation.requestmapping; Import org.springframework.web.bind.annotation.restcontroller;@restcontroller;@repictcontroller;@requestMapping( "/testlogging")public class loggingtestcontroller {private static logger = logger = logger = loggerfactory.getLogger(k8sresctrlapplication.class); @getMapping( "/hello")public string hello(){logger.info( "test logging ..."); 「こんにちは」を返します。 }}実行結果
ログレベルは情報に設定されているため、情報を含むログ情報以外が印刷されます
ここで見ることができるように、ほとんどの情報ログはSpringBTフレームワーク自体から来ています。それらをブロックしたい場合は、最初にログレベルをエラーに設定して、フレームワーク自体の情報情報が印刷されないようにすることができます。次に、アプリケーションの特定のパッケージをデバッグレベルのログに設定して、心配しているパッケージのデバッグレベルログのみを確認できるようにします。
特定のパッケージのログレベルを制御します
Application.ymlの構成を変更します
ロギング:レベル:root:エラーcom.hansonwang99.controller:debug
ルートログレベルがエラーに設定されていることは明らかであり、次にcom.hansonwang99.controllerパッケージのログレベルがデバッグに設定されていることは明らかです。つまり、最初にすべての設定を禁止してから個々の設定を許可します。
コントローラーコード
パッケージcom.hansonwang99.controller; Import org.slf4j.logger; Import org.slf4j.loggerfactory; import org.springframework.web.bind.annotation.getMapping; Import org.springframework.web.bind.annotation.RequestMapping; org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmapping( "/testlogging")public class loggingtestcontroller {private logger logger = loggerfactory.getLogger(this.getClass()); @getMapping( "/hello")public string hello(){logger.info( "test logging ..."); 「こんにちは」を返します。 }}実行結果
フレームワーク自体にはすべての情報レベルのログが隠されており、指定されたパッケージのログがレベルに従って正常に印刷されていることがわかります。
ファイルへの出力ログ
ロギング:レベル:root:エラーcom.hansonwang99.controller:debug file:$ {user.home} /logs/hello.log実行結果
Spring Bootロギングを使用して、ログはファイルに出力されていますが、コピーがコンソールに印刷されることがわかりました。 org.slf4j.Loggerを使用することはこの問題を解決できないことがわかりました
統合log4jログフレームワーク
pom.xmlに依存関係を追加します
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> <explusions> <exclusion> <groupid> org.springframework.boot </groupid> <artifactid> spring b oot-starter-logging </artifactid> </exclusion> </exclusions> </dependency> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-log4j2 </artifactid> </dependency>
log4j2.xmlファイルをリソースディレクトリに追加します。コンテンツは次のとおりです。
<?xml version = "1.0" encoding = "utf -8"?> <configuration> <appenders> <file name = "file" filename = "$ {sys:sys:user.home/hello2.log"> <patternLayout pattern = "%d {hh:mm:mm:ss}%p%C(l) - l) </appenders> <loggers> <root level = "error"> <appender-ref ref = "file"/> </root> <logger name = "com.hansonwang99.controller" level = "debug"/> </loggers> </configuration他のコードは同じままです
プログラムの実行では、コンソールにはログ出力がなく、Holl2.logファイルにコンテンツがあることがわかりました。これは私たちの期待に沿っています。
ログ形式はpattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"形式
log4jはさらに練習します
pom.xml構成:
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> <explusions> <exclusion> <groupid> org.springframework.boot </groupid> <artifactid> spring b oot-starter-logging </artifactid> </exclusion> </exclusions> </dependency> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-log4j2 </artifactid> </dependency>
log4j2.xml構成
<?xml version = "1.0" encoding = "utf-8"?> <configuration status = "warn"> <properties> <property name = "app_name"> springboot-web </property name = "log_path"> logs/$ {app_name} </property> </properties> <console "> <console name"> <pittern " pattern = "[%d] [%t] [%p] [%l]%m%n"/> </console> <rollingfile name = "rollingfileinfo" filename = "$ {log_path}/info.log" filepattern = "$ {log_path}/$$ {date:yyyy-mm}/info-%d {yyyy-mm-dd} - %i.log.gz"> <filterters> <thresholdfilter level = "info"/> <threatholdfilter level = "warn" onmaty = "deny"/pittermation " pattern = "[%d] [%t] [%p] [%c:%l]%m%n" /> <ポリシー> <! - アーカイブデイリーファイル - > <timebasedtrigggeringpolicy interval = "1"変調= "真" /> < <defaultrolloverstrategy compressionlevel = "0" max = "10"/> </rollingfile> <rollingfile name = "rollingfilewarn" filename = "$ {log_path} /warn.log" filepattern = "$ {log_path}/$$ {date:yyyy-mm}/warn-%d {yyyy-mm-dd} - %i.log.gz"> <filters> <thresholdfilter level = "WARN"/> <threasholdFilter revel = "エラーpattern = "[%d] [%t] [%p] [%c:%l]%m%n" /> <ポリシー> <! - アーカイブデイリーファイル - > <timebasedtrigggeringpolicy interval = "1"変調= "真" /> < <defaultrolloverstrategy compressionlevel = "0" max = "10"/> </rollingfile> <rollingfile name = "rollingfileerror" filename = "$ {log_path}/error.log" filepattern = "$ {log_path} /$$ {date:yyyy-mm} /error-%d {yyyy-mm-dd} - %i.log.gz"> <threholdfilter level = "error" /> <patternlayout pattern = "[%d] [%t] [%p] [%c:%m%n" /> <TimeBasedTrigggeringPolicy Interval = "1" Musulate = "True"/> <! - 単一のファイルサイズを制限 - > <sizebasedTriggeringPolicy size = "2 mb"/> </policies> <! - 1日あたりのファイルの数を制限 - > <difaultrolloverstrategy compressionlevel = " level = "info"> <appender-ref ref = "console" /> <appender-ref ref = "rollingfileinfo" /> <appender-ref ref = "rollingfilewarn" /> <appender-ref ref = "rollingfileerror" />> < /root> < /loggers> < /configurationコントローラーコード:
パッケージcom.hansonwang99.controller; import org.apache.logging.log4j.logmanager; import org.apache.logging.log4j.logger; import org.springframework.web.bind.annotation.getMapping; Import org.springframework.web.bind.annotation.Request org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestMapping( "/testlogging")public class loggingtestcontroller {private final logger logger = logmanager.getLogger(this.getclass()); @getMapping( "/hello")public string hello(){for(int i = 0; i <10_0000; i ++){logger.info( "info execute indexメソッド"); logger.warn( "execute indexメソッド"を警告); logger.error( "エラー実行インデックスメソッド"); }「私の最初のスプリングブートアプリケーション」を返します。 }}実行結果
ログは、異なるレベルに応じて異なるファイルに保存されます。ログファイルのサイズが2mを超えると、複数のファイルが圧縮され、保存されます。生産環境のログファイルサイズを20〜50MBに調整することをお勧めします。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。