ホームページ  >  記事  >  Java  >  ログレベルを動的に変更する SpringBoot の操作は何ですか?

ログレベルを動的に変更する SpringBoot の操作は何ですか?

WBOY
WBOY転載
2023-05-14 08:25:131558ブラウズ

従来のアプローチは一般的に次のとおりです:

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 つと呼ばれます。ブートには強力な機能があり、誰でもインターネットで情報を見つけて詳細を知ることができます。

アクチュエータのエンドポイント ポートの説明:

##Yesconfigpropsすべての @ConfigurationProperties のコレクション リストを表示します Yes#env#Spring からの ConfigurableEnvironment のプロパティを表示flywayデータベース移行パスがある場合は表示しますはいhealthアプリケーションの正常性情報を表示します (単純な「ステータス」の場合)認証されていない接続を使用してアクセスする場合は が表示され、認証された接続を使用してアクセスする場合は完全な情報の詳細が表示されます)Yesinfoいずれかを表示アプリケーション情報はいliquibaseLiquibase データベースの移行パスがある場合は表示しますはい metrics現在のアプリケーションのメトリクス情報を表示しますYesmappingsコレクションを表示しますすべての @RequestMapping パスのリストYesscheduledtasksアプリケーションにスケジュールされたタスクを表示Yes sessionsSpring セッションでサポートされているセッション ストアからのユーザー セッションの取得と削除を許可します。 Spring Session のリアクティブ Web アプリケーションのサポートを使用している場合は使用できません。 Yesshutdownアプリを正常にシャットダウンできるようにします (デフォルトでは有効になっていません)Nothreaddumpスレッドダンプの実行Yes
ID 説明 デフォルトで有効
auditevents 現在のアプリケーションの監査イベント情報を表示します Yes
beans アプリケーション内のすべての Spring Bean の完全なリストを表示します Yes
条件 表示構成クラスと自動構成クラス構成クラス)およびそれらが適用されるかどうかの理由
#Yes
Web アプリケーション (Spring MVC、Spring WebFlux) を使用する場合、または Jersey)、次のエンドポイントを使用することもできます:

ID

Descriptionデフォルトで有効heapdumGZip 圧縮された hprof ヒープ ダンプ ファイルを返しますYesjolokia HTTP 経由で JMX Bean を公開する (Jolokia がクラスパス上にある場合、WebFlux は使用できません) Yeslogfileログ ファイルを返すcontent (logging.file またはlogging.path 属性が設定されている場合) は、ログ ファイルの内容に関する部分情報を受信するための HTTP Range ヘッダーの使用をサポートします。Yesprometheus Prometheus サーバーによってクロールできる形式でメトリクス情報を表示しますYes
公開するエンドポイントを変更するには、次を使用します。次の手法: 特定のプロパティを含めるおよび除外する:
##Property

Default*##management.endpoints.jmx.exposure.include*management.endpoints.web.exposure.exclude*##management.endpoints.web.exposure.include
management .endpoints.jmx.exposure.exclude
情報、ヘルス # ##################################

include属性列出了公开的端点的ID,

exclude属性列出了不应该公开的端点的ID

exclude属性优先于include属性。包含和排除属性都可以使用端点ID列表进行配置。

*可以用来选择所有端点。

例如,要通过HTTP公开除env和beans端点之外的所有内容,请使用以下属性:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans

三、关闭鉴权

一般我们会将actuator和spring security鉴权组件结合使用,防止这些功能端口被随便调用。由于这里是功能演示,先放开actuator相关端口的权限认证。

ログレベルを動的に変更する SpringBoot の操作は何ですか?

此外,如果存在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端口查看日志级别

请求链接:http://localhost:8090/message/loggers

注意上面我说过的,我调整了management.endpoints.web.base-path=/message。如果没有设置此参数,则使用默认的/actuator去访问。

ログレベルを動的に変更する SpringBoot の操作は何ですか?

五、发起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

六、查询日志级别修改结果

http://localhost:8090/message/loggers/com.wxswj.provider.message.controller

{
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}

说明我们的修改日志级别的请求生效。

以上がログレベルを動的に変更する SpringBoot の操作は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。