ログレベルを動的に変更する SpringBoot の操作は何ですか?
従来のアプローチは一般的に次のとおりです:
1. 構成内のログ レベルを変更します
2. アプリケーションを再起動します
3. エラー ログを確認して、問題のトラブルシューティングを行います。問題発生時のトラブル
この処理ではアプリケーションを再起動する必要があり、手間がかかり効率も悪くなりますし、また、大規模なオンラインプロジェクトの場合、自由に停止・再起動することはできません。それでは、アプリケーションを再起動せずにログレベルを動的に変更する方法はあるのでしょうか?
ここで、Lao Wan に、SpringBoot のアクチュエーター コンポーネントを通じてログ レベルを動的に変更する方法を教えてもらいましょう。
1. 依存関係を追加します
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2. アクチュエーターによって公開されるポートを設定します
#启用actuator端口 management.endpoints.enabled-by-default=fasle #设置actuator的访问根路径,默认是/actuator management.endpoints.web.base-path=/message #启用的端点 management.endpoints.web.exposure.include=loggers
ここでは、アクチュエーター/アクチュエーターのデフォルトのアクセス パスを /message に変更しました。プロジェクトの基本アクセス パスと一致して保存されます。
ポートを有効にする 2 つの構成方法:
方法 1: (推奨)
management.endpoints.web.exposure.include=loggers
方法 2: (この方法でテストします)効果なし)
management.endpoint.loggers.enabled=true
追加:情報ポートを無効にする方法
management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true
アクチュエータコンポーネントについては、スプリングの 4 つの主要コンポーネントの 1 つと呼ばれます。ブートには強力な機能があり、誰でもインターネットで情報を見つけて詳細を知ることができます。
アクチュエータのエンドポイント ポートの説明:
ID | 説明 | デフォルトで有効 |
---|---|---|
auditevents | 現在のアプリケーションの監査イベント情報を表示します | Yes |
beans | アプリケーション内のすべての Spring Bean の完全なリストを表示します | Yes |
条件 | 表示構成クラスと自動構成クラス構成クラス)およびそれらが適用されるかどうかの理由 | ##Yes|
すべての @ConfigurationProperties のコレクション リストを表示します | Yes | |
#Yes | flyway | データベース移行パスがある場合は表示します |
health | アプリケーションの正常性情報を表示します (単純な「ステータス」の場合)認証されていない接続を使用してアクセスする場合は が表示され、認証された接続を使用してアクセスする場合は完全な情報の詳細が表示されます) | |
info | いずれかを表示アプリケーション情報 | |
liquibase | Liquibase データベースの移行パスがある場合は表示します | |
metrics | 現在のアプリケーションのメトリクス情報を表示します | |
mappings | コレクションを表示しますすべての @RequestMapping パスのリスト | |
scheduledtasks | アプリケーションにスケジュールされたタスクを表示 | |
sessions | Spring セッションでサポートされているセッション ストアからのユーザー セッションの取得と削除を許可します。 Spring Session のリアクティブ Web アプリケーションのサポートを使用している場合は使用できません。 | |
shutdown | アプリを正常にシャットダウンできるようにします (デフォルトでは有効になっていません) | |
threaddump | スレッドダンプの実行 | |
Web アプリケーション (Spring MVC、Spring WebFlux) を使用する場合、または Jersey)、次のエンドポイントを使用することもできます: |
ID
heapdum | ||
---|---|---|
jolokia | HTTP 経由で JMX Bean を公開する (Jolokia がクラスパス上にある場合、WebFlux は使用できません) | |
logfile | ログ ファイルを返すcontent (logging.file またはlogging.path 属性が設定されている場合) は、ログ ファイルの内容に関する部分情報を受信するための HTTP Range ヘッダーの使用をサポートします。 | |
prometheus | Prometheus サーバーによってクロールできる形式でメトリクス情報を表示します | |
公開するエンドポイントを変更するには、次を使用します。次の手法: 特定のプロパティを含めるおよび除外する: |
management .endpoints.jmx.exposure.exclude | |
---|---|
* | |
* | |
情報、ヘルス # ##################################
*可以用来选择所有端点。 例如,要通过HTTP公开除env和beans端点之外的所有内容,请使用以下属性: management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env,beans ログイン後にコピー 三、关闭鉴权一般我们会将actuator和spring security鉴权组件结合使用,防止这些功能端口被随便调用。由于这里是功能演示,先放开actuator相关端口的权限认证。 此外,如果存在Spring Security,则需要添加自定义安全配置,以允许对端点进行未经身份验证的访问,如以下示例所示:放开所有Endpoint端点进行匹配 @Configuration public class ActuatorSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests() .anyRequest().permitAll() } } ログイン後にコピー 四 、通过/loggers端口查看日志级别
注意上面我说过的,我调整了management.endpoints.web.base-path=/message。如果没有设置此参数,则使用默认的/actuator去访问。 五、发起http请求修改日志级别这里演示,修改目录com.wxswj.provider.message.controller的日志级别为debug 请求类型为POST,参数格式是JSON curl -H "Content-Type: application/json" -X POST --data " { "configuredLevel": "DEBUG" } " http://localhost:8090/message/loggers/com.wxswj.provider.message.controller ログイン後にコピー 大家可以在服务器上通过curl发起http请求,或者通过Postman发起请求。 curl -H "Content-Type: application/json" -X POST --data "{"configuredLevel": "DEBUG"}" http://localhost:8090/loggers/com.wxswj.provider.message.controller ログイン後にコピー 六、查询日志级别修改结果
{ "configuredLevel": "DEBUG", "effectiveLevel": "DEBUG" } ログイン後にコピー 说明我们的修改日志级别的请求生效。 以上がログレベルを動的に変更する SpringBoot の操作は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。 このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
![]() ホットAIツール![]() Undresser.AI Undressリアルなヌード写真を作成する AI 搭載アプリ ![]() AI Clothes Remover写真から衣服を削除するオンライン AI ツール。 ![]() Undress AI Tool脱衣画像を無料で ![]() Clothoff.ioAI衣類リムーバー ![]() AI Hentai GeneratorAIヘンタイを無料で生成します。 ![]() 人気の記事
アサシンのクリードシャドウズ:シーシェルリドルソリューション
3週間前
By DDD
Windows11 KB5054979の新しいものと更新の問題を修正する方法
2週間前
By DDD
Atomfallのクレーンコントロールキーカードを見つける場所
3週間前
By DDD
R.E.P.O.で節約説明した(そしてファイルを保存)
1 か月前
By 尊渡假赌尊渡假赌尊渡假赌
アサシンクリードシャドウ - 鍛冶屋を見つけて武器と鎧のカスタマイズを解除する方法
4週間前
By DDD
![]() ホットツール![]() メモ帳++7.3.1使いやすく無料のコードエディター ![]() SublimeText3 中国語版中国語版、とても使いやすい ![]() ゼンドスタジオ 13.0.1強力な PHP 統合開発環境 ![]() ドリームウィーバー CS6ビジュアル Web 開発ツール ![]() SublimeText3 Mac版神レベルのコード編集ソフト(SublimeText3) ![]() ホットトピック
Gmailメールのログイン入り口はどこですか?
![]() ![]()
CakePHP チュートリアル
![]() ![]()
Steamのアカウント名の形式は何ですか
![]() ![]()
NYTの接続はヒントと回答です
![]() ![]() ![]() Jasypt の概要 Jasypt は、開発者が最小限の労力で基本的な暗号化機能を自分のプロジェクトに追加できる Java ライブラリであり、暗号化の仕組みを深く理解する必要はありません。一方向および双方向暗号化の高いセキュリティ。標準ベースの暗号化テクノロジー。パスワード、テキスト、数値、バイナリを暗号化します... Spring ベースのアプリケーション、オープン API への統合、JCE プロバイダーでの使用に適しています... 次の依存関係を追加します: com.github.ulisesbocchiojasypt-spring-boot-starter2. 1.1 Jasypt の特典はシステムのセキュリティを保護し、コードが漏洩した場合でもデータ ソースは保証されます。 ![]() 使用シナリオ 1. 注文は正常に行われましたが、支払いが 30 分以内に行われませんでした。支払いがタイムアウトになり、注文が自動的にキャンセルされました 2. 注文に署名があり、署名後 7 日間評価が行われませんでした。注文がタイムアウトして評価されない場合、システムはデフォルトでプラスの評価を設定します 3. 注文は正常に行われます。販売者が 5 分間注文を受け取らない場合、注文はキャンセルされます。 4. 配送がタイムアウトします。 SMS リマインダーをプッシュします... 遅延が長く、リアルタイム パフォーマンスが低いシナリオでは、タスク スケジュールを使用して定期的なポーリング処理を実行できます。例: xxl-job 今日は選択します ![]() 1. Redis は分散ロックの原則を実装しており、分散ロックが必要な理由 分散ロックについて話す前に、分散ロックが必要な理由を説明する必要があります。分散ロックの反対はスタンドアロン ロックです。マルチスレッド プログラムを作成するとき、共有変数を同時に操作することによって引き起こされるデータの問題を回避します。通常、ロックを使用して共有変数を相互に除外し、データの正確性を確保します。共有変数の使用範囲は同じプロセス内です。共有リソースを同時に操作する必要があるプロセスが複数ある場合、どうすれば相互排他的になるのでしょうか?今日のビジネス アプリケーションは通常マイクロサービス アーキテクチャであり、これは 1 つのアプリケーションが複数のプロセスをデプロイすることも意味します。複数のプロセスが MySQL の同じレコード行を変更する必要がある場合、順序の乱れた操作によって引き起こされるダーティ データを避けるために、分散が必要です。今回導入するスタイルはロックされています。ポイントを獲得したい ![]() Springboot はファイルを読み取りますが、jar パッケージにパッケージ化した後、最新の開発にアクセスできません。jar パッケージにパッケージ化した後、Springboot がファイルを読み取れない状況があります。その理由は、パッケージ化後、ファイルの仮想パスが変更されるためです。は無効であり、ストリーム経由でのみアクセスできます。読み取ります。ファイルはリソースの下にあります publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input ![]() Springboot+Mybatis-plus が SQL ステートメントを使用して複数テーブルの追加操作を実行しない場合、私が遭遇した問題は、テスト環境で思考をシミュレートすることによって分解されます: パラメーターを含む BrandDTO オブジェクトを作成し、パラメーターをバックグラウンドに渡すことをシミュレートします。 Mybatis-plus で複数テーブルの操作を実行するのは非常に難しいことを理解してください。Mybatis-plus-join などのツールを使用しない場合は、対応する Mapper.xml ファイルを設定し、臭くて長い ResultMap を設定するだけです。対応する SQL ステートメントを記述します。この方法は面倒に見えますが、柔軟性が高く、次のことが可能です。 ![]() SpringBoot と SpringMVC はどちらも Java 開発で一般的に使用されるフレームワークですが、それらの間には明らかな違いがいくつかあります。この記事では、これら 2 つのフレームワークの機能と使用法を調べ、その違いを比較します。まず、SpringBoot について学びましょう。 SpringBoot は、Spring フレームワークに基づいたアプリケーションの作成と展開を簡素化するために、Pivotal チームによって開発されました。スタンドアロンの実行可能ファイルを構築するための高速かつ軽量な方法を提供します。 ![]() 1. RedisAPI のデフォルトのシリアル化メカニズムである RedisTemplate1.1 をカスタマイズします。API ベースの Redis キャッシュ実装では、データ キャッシュ操作に RedisTemplate テンプレートを使用します。ここで、RedisTemplate クラスを開いて、クラスのソース コード情報を表示します。publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations、BeanClassLoaderAware{//キーを宣言、値の各種シリアル化メソッド、初期値は空 @NullableprivateRedisSe ![]() プロジェクトでは、構成情報が必要になることがよくありますが、この情報はテスト環境と本番環境で構成が異なる場合があり、実際のビジネス状況に基づいて後で変更する必要がある場合があります。これらの構成をコードにハードコーディングすることはできません。構成ファイルに記述することをお勧めします。たとえば、この情報を application.yml ファイルに書き込むことができます。では、コード内でこのアドレスを取得または使用するにはどうすればよいでしょうか?方法は2つあります。方法 1: @Value アノテーションが付けられた ${key} を介して、構成ファイル (application.yml) 内のキーに対応する値を取得できます。この方法は、マイクロサービスが比較的少ない状況に適しています。方法 2: 実際には、プロジェクト、業務が複雑な場合、ロジック ![]() |