目次
概要
Spring Boot Logging プラグインを使用します
集成Log4J日志框架
コントローラーコード
追記
ホームページ バックエンド開発 PHPチュートリアル Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

May 05, 2018 pm 03:11 PM
boot spring 練習する

この記事では主に Spring Boot ロギング フレームワークの実践について説明します。コード部分も詳しく説明されています。


概要

Javaアプリケーションでは、ログは通常次の5つのレベルに分けられます:

  • ERRORエラーメッセージ

  • WARN警告メッセージ

  • INFO一般情報

  • DEBUG デバッグ情報

  • TRACE トレース情報

Spring Boot は内部ログ フレームワークとして Apache の Commons Logging を使用します。これは単なるログ インターフェイスであり、実際のアプリケーションでは、このインターフェイスに対応するログ実装を指定する必要があります。

SpringBt のデフォルトのロギング実装は、JDK に付属するロギング パッケージである Java Util Logging です。さらに、SpringBt は、Log4J や Logback などの一般的なロギング実装もサポートしています。

上記のログ実装を総称してログフレームワーク

今すぐ実践してみましょう!


Spring Boot Logging プラグインを使用します

  • まず、application.properties ファイルに構成を追加します:

logging.level.root=INFO
ログイン後にコピー
  • コントローラー部分のコードは次のとおりです:

package com.hansonwang99.controller;

import com.hansonwang99.K8sresctrlApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/testlogging")
public class LoggingTestController {
    private static Logger logger = LoggerFactory.getLogger(K8sresctrlApplication.class);
    @GetMapping("/hello")
    public String hello() {
        logger.info("test logging...");
        return "hello";
    }
}
ログイン後にコピー
  • 実行結果

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

ログレベルが INFO に設定されているため、INFO 以上のレベルを含むログ情報が出力されます

ここで、多くのほとんどの INFO ログが SpringBt フレームワーク自体から取得されていることがわかります。それらをブロックしたい場合は、フレームワーク自身の INFO 情報が出力されないように、最初にすべてのログ レベルを ERROR に設定できます。次に、アプリケーション内の特定のパッケージを DEBUG レベルのログに設定すると、対象のパッケージ内の DEBUG 以上のレベルのログのみが表示されるようになります。

  • 特定のパッケージのログ レベルを制御します

application.yml の構成を変更します

logging:
  level:
    root: error
    com.hansonwang99.controller: debug
ログイン後にコピー

もちろん、ルート ログ レベルを ERROR に設定し、com.hansonwang99.controller</ code> package ログレベルは DEBUG に設定されます。これは、最初にすべてを禁止し、次に個別の設定メソッドを許可することを意味します<code>com.hansonwang99.controller包的日志级别设为DEBUG,此即:即先禁止所有再允许个别的 设置方法

  • 控制器代码

package 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;
import 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...");
        return "hello";
    }
}
ログイン後にコピー
  • 运行结果

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

可见框架自身的INFO级别日志全部藏匿,而指定包中的日志按级别顺利地打印出来

  • 将日志输出到某个文件中

logging:
  level:
    root: error
    com.hansonwang99.controller: debug
  file: ${user.home}/logs/hello.log
ログイン後にコピー
  • 运行结果

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

使用Spring Boot Logging,我们发现虽然日志已输出到文件中,但控制台中依然会打印一份,发现用org.slf4j.Logger是无法解决这个问题的

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有


集成Log4J日志框架

  • pom.xml中添加依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
ログイン後にコピー
  • 在resources目录下添加log4j2.xml文件,内容如下:

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

    <appenders>
        <File name="file" fileName="${sys:user.home}/logs/hello2.log">
            <PatternLayout pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"/>
        </File>
    </appenders>

    <loggers>

        <root level="ERROR">
            <appender-ref ref="file"/>
        </root>
        <logger name="com.hansonwang99.controller" level="DEBUG" />
    </loggers>

</configuration>
ログイン後にコピー
  • 其他代码都保持不变

运行程序发现控制台没有日志输出,而hello2.log文件中有内容,这符合我们的预期:

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

而且日志格式和pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"


コントローラーコード

  •         <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j2</artifactId>
            </dependency>
    ログイン後にコピー

  • 実行結果
  • Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有
    フレームワーク自体の INFO レベルのログがすべて非表示になっており、ログが指定したパッケージをレベル別にスムーズに出力
  • ログをファイルに出力
  • <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="warn">
        <properties>
    
            <Property name="app_name">springboot-web</Property>
            <Property name="log_path">logs/${app_name}</Property>
    
        </properties>
        <appenders>
            <console name="Console" target="SYSTEM_OUT">
                <PatternLayout 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">
                <Filters>
                    <ThresholdFilter level="INFO" />
                    <ThresholdFilter level="WARN" onMatch="DENY"
                                     onMismatch="NEUTRAL" />
                </Filters>
                <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
                <Policies>
                    <!-- 归档每天的文件 -->
                    <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                    <!-- 限制单个文件大小 -->
                    <SizeBasedTriggeringPolicy size="2 MB" />
                </Policies>
                <!-- 限制每天文件个数 -->
                <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" />
                    <ThresholdFilter level="ERROR" onMatch="DENY"
                                     onMismatch="NEUTRAL" />
                </Filters>
                <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
                <Policies>
                    <!-- 归档每天的文件 -->
                    <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                    <!-- 限制单个文件大小 -->
                    <SizeBasedTriggeringPolicy size="2 MB" />
                </Policies>
                <!-- 限制每天文件个数 -->
                <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">
                <ThresholdFilter level="ERROR" />
                <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
                <Policies>
                    <!-- 归档每天的文件 -->
                    <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                    <!-- 限制单个文件大小 -->
                    <SizeBasedTriggeringPolicy size="2 MB" />
                </Policies>
                <!-- 限制每天文件个数 -->
                <DefaultRolloverStrategy compressionLevel="0" max="10"/>
            </RollingFile>
    
        </appenders>
    
        <loggers>
    
    
            <root level="info">
                <appender-ref ref="Console" />
                <appender-ref ref="RollingFileInfo" />
                <appender-ref ref="RollingFileWarn" />
                <appender-ref ref="RollingFileError" />
            </root>
    
        </loggers>
    
    </configuration>
    ログイン後にコピー

  • 実行結果

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

🎜Spring Boot Logging を使用すると、ログがファイルに出力されても、コピーがコンソールに出力されることがわかりました。org.slf4j.Logger を使用すると、この問題は解決できません🎜🎜🎜Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有🎜🎜🎜🎜Log4J ロギング フレームワークを統合します🎜🎜 🎜🎜pom.xml に依存関係を追加します🎜🎜🎜
package 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.RequestMapping;
import 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 method");
            logger.warn("warn execute index method");
            logger.error("error execute index method");
        }
        return "My First SpringBoot Application";
    }
}
ログイン後にコピー
🎜🎜🎜次の内容を含む log4j2.xml ファイルをリソース ディレクトリに追加します: 🎜🎜🎜rrreee🎜🎜🎜他のコードは変更されません🎜 🎜🎜🎜プログラムを実行すると、コンソールにログが出力されず、hello2.log ファイルに期待どおりの内容が存在することがわかります: 🎜🎜🎜Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有 🎜🎜🎜🎜Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有🎜🎜🎜🎜Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有🎜🎜🎜ログ形式は pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n" 形式で定義されたものと一致します 🎜🎜🎜Log4Jさらに練習 🎜🎜🎜🎜pom.xml 設定: 🎜🎜🎜rrreee🎜🎜🎜log4j2.xml 設定🎜 🎜🎜rrreee🎜🎜🎜コントローラーコード: 🎜🎜🎜rrreee🎜🎜🎜R結果を発表🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜

Spring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有

ログファイルのサイズが 2M を超える場合、ログは複数のファイルに分割されて圧縮されて保存されます。 20~50MBに調整しました。


追記

著者によるその他のオリジナル記事はSFコラムをご覧ください

著者によるその他のSpringBt実践記事はこちら:

  • SpringBootでのElasticSearch検索エンジンの実践

  • Kotlin+SpringBootの予備探索共同プログラミング



関連する推奨事項:

Java プログラマーによって最もよく使用される 8 つの Java ロギング フレームワーク

以上がSpring Boot ロギング フレームワークの実践 - hansonwang99 の技術共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows ISO ファイルが大きすぎる BootCamp エラー [修正済み] Windows ISO ファイルが大きすぎる BootCamp エラー [修正済み] Feb 19, 2024 pm 12:30 PM

Mac コンピュータで BootCampAssistant を使用しているときに「Windows ISO ファイルが大きすぎます」というエラー メッセージが表示される場合は、ISO ファイルのサイズが BootCampAssistant でサポートされている制限を超えていることが原因である可能性があります。この問題の解決策は、他のツールを使用して ISO ファイルのサイズを圧縮し、BootCamp アシスタントで処理できるようにすることです。 BootCampAssistant は、Mac コンピュータに Windows オペレーティング システムをインストールして実行するために Apple が提供する便利なツールです。ユーザーがデュアルブート システムをセットアップするのに役立ち、起動時に MacOS と Wind のどちらを使用するかを簡単に選択できるようになります。

Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Feb 01, 2024 pm 09:18 PM

2023年、AI技術が注目を集め、プログラミング分野を中心にさまざまな業界に大きな影響を与えています。 AI テクノロジーの重要性に対する人々の認識はますます高まっており、Spring コミュニティも例外ではありません。 GenAI (汎用人工知能) テクノロジーの継続的な進歩に伴い、AI 機能を備えたアプリケーションの作成を簡素化することが重要かつ緊急になっています。このような背景から、AI 機能アプリケーションの開発プロセスを簡素化し、シンプルかつ直観的にし、不必要な複雑さを回避することを目的とした「SpringAI」が登場しました。 「SpringAI」により、開発者はAI機能を搭載したアプリケーションをより簡単に構築でき、使いやすく、操作しやすくなります。

Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Apr 28, 2024 am 11:46 AM

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

Springプログラマティックトランザクションの実装方法は何ですか? Springプログラマティックトランザクションの実装方法は何ですか? Jan 08, 2024 am 10:23 AM

Spring プログラムによるトランザクションを実装する方法: 1. TransactionTemplate を使用する; 2. TransactionCallback および TransactionCallbackWithoutResult を使用する; 3. Transactional アノテーションを使用する; 4. TransactionTemplate を @Transactional と組み合わせて使用​​する; 5. トランザクション マネージャーをカスタマイズする。

Outlook がカレンダーにイベントを自動的に追加しないようにする方法 Outlook がカレンダーにイベントを自動的に追加しないようにする方法 Feb 26, 2024 am 09:49 AM

電子メール マネージャー アプリケーションとして、Microsoft Outlook を使用すると、イベントや予定をスケジュールできます。 Outlook アプリケーションでこれらのアクティビティ (イベントとも呼ばれます) を作成、管理、追跡するためのツールを提供することで、組織的な状態を維持できるようになります。ただし、Outlook の予定表に不要なイベントが追加される場合があり、ユーザーが混乱したり、予定表にスパムが送信されたりすることがあります。この記事では、Outlook が予定表にイベントを自動的に追加しないようにするために役立つさまざまなシナリオと手順を説明します。 Outlook イベント – 簡単な概要 Outlook イベントには複数の目的があり、次のような多くの便利な機能があります。 カレンダーの統合: Outlook 内

Spring でトランザクション分離レベルを設定する方法 Spring でトランザクション分離レベルを設定する方法 Jan 26, 2024 pm 05:38 PM

Spring でトランザクション分離レベルを設定する方法: 1. @Transactional アノテーションを使用します; 2. Spring 構成ファイルに設定します; 3. PlatformTransactionManager を使用します; 4. Java 構成クラスに設定します。詳細な導入方法: 1. @Transactional アノテーションを使用し、トランザクション管理が必要なクラスまたはメソッドに @Transactional アノテーションを追加し、属性に分離レベルを設定します。 2. Spring の設定ファイルなどで

Struts フレームワークの原則と実践についての深い議論 Struts フレームワークの原則と実践についての深い議論 Feb 18, 2024 pm 06:10 PM

Struts フレームワークの原理分析と実践的な調査 JavaWeb 開発で一般的に使用される MVC フレームワークとして、Struts フレームワークは優れた設計パターンとスケーラビリティを備えており、エンタープライズ レベルのアプリケーション開発で広く使用されています。この記事では、Struts フレームワークの原理を分析し、読者がフレームワークをよりよく理解して適用できるように、実際のコード例を使用してそれを検討します。 1. Struts フレームワークの原理の分析 1. MVC アーキテクチャ Struts フレームワークは MVC (Model-View-Con) に基づいています。

Dreamweaver CMS ステーションのグループ練習の共有 Dreamweaver CMS ステーションのグループ練習の共有 Mar 18, 2024 am 10:18 AM

Dream Weaver CMS Station グループ実践共有 近年、インターネットの急速な発展に伴い、Webサイト構築の重要性がますます高まっています。複数の Web サイトを構築する場合、サイト グループ テクノロジは非常に効果的な方法となっています。数多くの Web サイト構築ツールの中でも、Dreamweaver CMS は、その柔軟性と使いやすさにより、多くの Web サイト愛好家にとって最初の選択肢となっています。この記事では、Dreamweaver CMS ステーション グループに関するいくつかの実践的な経験と、いくつかの具体的なコード例を共有し、ステーション グループ テクノロジを研究している読者に何らかの助けとなることを願っています。 1. Dreamweaver CMS ステーション グループとは何ですか?ドリームウィーバーCMS

See all articles