You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by gi...@apache.org on 2023/02/09 08:21:55 UTC

[dubbo-website] branch asf-site-v2 updated: deploy: 2825fefc0ef9d057cbaa5bafcbab7c516b4131c1

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site-v2
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/asf-site-v2 by this push:
     new 00c303828b deploy: 2825fefc0ef9d057cbaa5bafcbab7c516b4131c1
00c303828b is described below

commit 00c303828b023a02077e74ca3d121cf71bb4034c
Author: AlbumenJ <Al...@users.noreply.github.com>
AuthorDate: Thu Feb 9 08:21:49 2023 +0000

    deploy: 2825fefc0ef9d057cbaa5bafcbab7c516b4131c1
---
 sitemap.xml                                        |   2 +-
 .../observability/index.xml                        | 155 ++++++++++++++++++++-
 .../observability/logging/index.html               | 130 ++++++++++++++++-
 .../advanced-features-and-usage/service/index.xml  |   4 +-
 .../service/transaction/index.html                 |   6 +-
 zh/sitemap.xml                                     |   2 +-
 6 files changed, 287 insertions(+), 12 deletions(-)

diff --git a/sitemap.xml b/sitemap.xml
index 43269af776..8803beb000 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://dubbo.apache.org/zh/sitemap.xml</loc><lastmod>2023-02-09T16:15:56+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-02-09T08:44:24+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://dubbo.apache.org/zh/sitemap.xml</loc><lastmod>2023-02-09T16:17:37+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-02-09T08:44:24+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml
index 71235a7a9d..59d68b8a90 100644
--- a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml
+++ b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml
@@ -476,4 +476,157 @@
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> logger&lt;span style="color:#719e07">.&lt;/span>error&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#2aa198">&amp;#34;Error occurred when pushing metrics to prometheus: &amp;#34;&lt;/span>&lt;span style="color:#719e07">,&lt;/span> e&lt;span style="color:#719e07">);&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs3-V2: 链路追踪</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</guid><description/></item><item><title>Docs3-V2: 日志管理</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-fea [...]
\ No newline at end of file
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs3-V2: 链路追踪</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</guid><description/></item><item><title>Docs3-V2: 日志管理</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-fea [...]
+&lt;p>在 Dubbo 框架内所有的日志输出都是通过 LoggerFactory 这个静态工厂类来获得 Logger 的对象实体,并且抽离了一个 LoggerAdapter 用于对接第三方日志框架,所以就有了JDKLoggerAdapter, Log4jLoggerAdapter, SLF4JLoggerAdapter等一些实现子类,分别对接了不同 Log 第三方实现。既然 Dubbo 能够支持这么多log实现,那么这些实现在 Dubbo 中优先级是在呢么样的呢?这里的优先级是只未配置指定的 logger 提供方的情况下,由 Dubbo 框架自己选择。优先级如下:&lt;/p>
+&lt;table>
+&lt;thead>
+&lt;tr>
+&lt;th>第三方日志框架&lt;/th>
+&lt;th>优先级&lt;/th>
+&lt;/tr>
+&lt;/thead>
+&lt;tbody>
+&lt;tr>
+&lt;td>Log4j&lt;/td>
+&lt;td>最高(默认就用这个)&lt;/td>
+&lt;/tr>
+&lt;tr>
+&lt;td>SLF4J&lt;/td>
+&lt;td>次高(上面没有采用这个)&lt;/td>
+&lt;/tr>
+&lt;tr>
+&lt;td>Common Logging(jcl就是common logging)&lt;/td>
+&lt;td>次低(Log4j和SLF4J在项目中均没有就用这个)&lt;/td>
+&lt;/tr>
+&lt;tr>
+&lt;td>JDK log&lt;/td>
+&lt;td>最低(最后的选择)&lt;/td>
+&lt;/tr>
+&lt;/tbody>
+&lt;/table>
+&lt;p>Dubbo 日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:&lt;/p>
+&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">/**
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * ChannelListenerDispatcher
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> */&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#268bd2">class&lt;/span> &lt;span style="color:#268bd2">ChannelHandlerDispatcher&lt;/span> &lt;span style="color:#268bd2">implements&lt;/span> ChannelHandler &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">private&lt;/span> &lt;span style="color:#268bd2">static&lt;/span> &lt;span style="color:#268bd2">final&lt;/span> ErrorTypeAwareLogger logger &lt;span style="color:#719e07">=&lt;/span> LoggerFactory&lt;span style="color:#719e07">.&lt;/span>getErrorTypeAwareLogger&lt;span style="color:#719e07">(&lt;/span>ChannelHandlerDispatcher&lt;span style="color:#719e07">.&lt;/span>class&lt;span style="color:#71 [...]
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Dubbo 采用的日志输出方式是首先从 dubbo.application.logger 系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:&lt;/p>
+&lt;p>顺序为:log4jLogger &amp;gt; slf4jLogger &amp;gt; JclLogger &amp;gt; JdkLogger&lt;/p>
+&lt;p>LoggerFactory 在类加载过程中变量的初始化过程:&lt;/p>
+&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">// search common-used logging frameworks
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span>&lt;span style="color:#268bd2">static&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> String logger &lt;span style="color:#719e07">=&lt;/span> System&lt;span style="color:#719e07">.&lt;/span>getProperty&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#2aa198">&amp;#34;dubbo.application.logger&amp;#34;&lt;/span>&lt;span style="color:#719e07">,&lt;/span> &lt;span style="color:#2aa198">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">switch&lt;/span> &lt;span style="color:#719e07">(&lt;/span>logger&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">case&lt;/span> Slf4jLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>NAME&lt;span style="color:#719e07">:&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setLoggerAdapter&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#719e07">new&lt;/span> Slf4jLoggerAdapter&lt;span style="color:#719e07">());&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">case&lt;/span> JclLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>NAME&lt;span style="color:#719e07">:&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setLoggerAdapter&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#719e07">new&lt;/span> JclLoggerAdapter&lt;span style="color:#719e07">());&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">case&lt;/span> Log4jLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>NAME&lt;span style="color:#719e07">:&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setLoggerAdapter&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#719e07">new&lt;/span> Log4jLoggerAdapter&lt;span style="color:#719e07">());&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">case&lt;/span> JdkLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>NAME&lt;span style="color:#719e07">:&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setLoggerAdapter&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#719e07">new&lt;/span> JdkLoggerAdapter&lt;span style="color:#719e07">());&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">case&lt;/span> Log4j2LoggerAdapter&lt;span style="color:#719e07">.&lt;/span>NAME&lt;span style="color:#719e07">:&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setLoggerAdapter&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#719e07">new&lt;/span> Log4j2LoggerAdapter&lt;span style="color:#719e07">());&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">default&lt;/span>&lt;span style="color:#719e07">:&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> List&lt;span style="color:#719e07">&amp;lt;&lt;/span>Class&lt;span style="color:#719e07">&amp;lt;?&lt;/span> &lt;span style="color:#268bd2">extends&lt;/span> LoggerAdapter&lt;span style="color:#719e07">&amp;gt;&amp;gt;&lt;/span> candidates &lt;span style="color:#719e07">=&lt;/span> Arrays&lt;span style="color:#719e07">.&lt;/span>asList&lt;span style="color:#719e07">(&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Log4jLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>class&lt;span style="color:#719e07">,&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Slf4jLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>class&lt;span style="color:#719e07">,&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Log4j2LoggerAdapter&lt;span style="color:#719e07">.&lt;/span>class&lt;span style="color:#719e07">,&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> JclLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>class&lt;span style="color:#719e07">,&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> JdkLoggerAdapter&lt;span style="color:#719e07">.&lt;/span>class
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#dc322f">boolean&lt;/span> found &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#cb4b16">false&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">// try to use the first available adapter
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#719e07">for&lt;/span> &lt;span style="color:#719e07">(&lt;/span>Class&lt;span style="color:#719e07">&amp;lt;?&lt;/span> &lt;span style="color:#268bd2">extends&lt;/span> LoggerAdapter&lt;span style="color:#719e07">&amp;gt;&lt;/span> clazz &lt;span style="color:#719e07">:&lt;/span> candidates&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:# [...]
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">try&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LoggerAdapter loggerAdapter &lt;span style="color:#719e07">=&lt;/span> clazz&lt;span style="color:#719e07">.&lt;/span>getConstructor&lt;span style="color:#719e07">().&lt;/span>newInstance&lt;span style="color:#719e07">();&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> loggerAdapter&lt;span style="color:#719e07">.&lt;/span>getLogger&lt;span style="color:#719e07">(&lt;/span>LoggerFactory&lt;span style="color:#719e07">.&lt;/span>class&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">if&lt;/span> &lt;span style="color:#719e07">(&lt;/span>loggerAdapter&lt;span style="color:#719e07">.&lt;/span>isConfigured&lt;span style="color:#719e07">())&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setLoggerAdapter&lt;span style="color:#719e07">(&lt;/span>loggerAdapter&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> found &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#cb4b16">true&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span> &lt;span style="color:#719e07">catch&lt;/span> &lt;span style="color:#719e07">(&lt;/span>Exception &lt;span style="color:#719e07">|&lt;/span> LinkageError ignored&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">// ignore
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">if&lt;/span> &lt;span style="color:#719e07">(&lt;/span>found&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System&lt;span style="color:#719e07">.&lt;/span>err&lt;span style="color:#719e07">.&lt;/span>println&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#2aa198">&amp;#34;Dubbo: Unable to find a proper configured logger to log out.&amp;#34;&lt;/span>&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">for&lt;/span> &lt;span style="color:#719e07">(&lt;/span>Class&lt;span style="color:#719e07">&amp;lt;?&lt;/span> &lt;span style="color:#268bd2">extends&lt;/span> LoggerAdapter&lt;span style="color:#719e07">&amp;gt;&lt;/span> clazz &lt;span style="color:#719e07">:&lt;/span> candidates&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">try&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LoggerAdapter loggerAdapter &lt;span style="color:#719e07">=&lt;/span> clazz&lt;span style="color:#719e07">.&lt;/span>getConstructor&lt;span style="color:#719e07">().&lt;/span>newInstance&lt;span style="color:#719e07">();&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> loggerAdapter&lt;span style="color:#719e07">.&lt;/span>getLogger&lt;span style="color:#719e07">(&lt;/span>LoggerFactory&lt;span style="color:#719e07">.&lt;/span>class&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setLoggerAdapter&lt;span style="color:#719e07">(&lt;/span>loggerAdapter&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> found &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#cb4b16">true&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">break&lt;/span>&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span> &lt;span style="color:#719e07">catch&lt;/span> &lt;span style="color:#719e07">(&lt;/span>Throwable ignored&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">// ignore
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">if&lt;/span> &lt;span style="color:#719e07">(&lt;/span>found&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System&lt;span style="color:#719e07">.&lt;/span>err&lt;span style="color:#719e07">.&lt;/span>println&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#2aa198">&amp;#34;Dubbo: Using default logger: &amp;#34;&lt;/span> &lt;span style="color:#719e07">+&lt;/span> loggerAdapter&lt;span style="color:#719e07">.&lt;/span>getClass&lt;span style="color:#719e07">().&lt;/span>getName&lt;span style="color:#719e07">()&lt;/span> [...]
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">&amp;#34;If you cannot see any log, please configure -Ddubbo.application.logger property to your preferred logging framework.&amp;#34;&lt;/span>&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span> &lt;span style="color:#719e07">else&lt;/span> &lt;span style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System&lt;span style="color:#719e07">.&lt;/span>err&lt;span style="color:#719e07">.&lt;/span>println&lt;span style="color:#719e07">(&lt;/span>&lt;span style="color:#2aa198">&amp;#34;Dubbo: Unable to find any available logger adapter to log out. Dubbo logs will be ignored. &amp;#34;&lt;/span> &lt;span style="color:#719e07">+&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">&amp;#34;Please configure -Ddubbo.application.logger property and add corresponding logging library to classpath.&amp;#34;&lt;/span>&lt;span style="color:#719e07">);&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上面这段静态块是在LoggerFactory里面,说明只要LoggerFactory类一加载就会去选择对应的日志提供方。大家可能会发现对日志的提供方其实是可以通过配置来指定的,因为静态块一开始是从当前jvm环境中获取dubbo.application.logger,这个参数是同java -Ddubbo.application.logger=xxxx去指定的,如果是放在容器里面,就需要配置在容器启动的jvm参数里面。&lt;/p>
+&lt;h2 id="使用log4j来提供日志输出">使用Log4j来提供日志输出&lt;/h2>
+&lt;p>你不用做过多的处理就可以开启dubbo的日志,因为dubbo默认就是使用log4j。你唯一需要做的就是配置一个name是&amp;quot;com.alibaba.dubbo&amp;quot;的logger就可以了,然后关联到对应的appender。如下:&lt;/p>
+&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;appender&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubboAppender&amp;#34;&lt;/span> class=&lt;span style="color:#2aa198">&amp;#34;org.apache.log4j.DailyRollingFileAppender&amp;#34;&lt;/span>&lt;span style="color:#268bd [...]
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;param&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;File&amp;#34;&lt;/span> value=&lt;span style="color:#2aa198">&amp;#34;E:/dubbo.log&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;param&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;DatePattern&amp;#34;&lt;/span> value=&lt;span style="color:#2aa198">&amp;#34;&amp;#39;.&amp;#39;yyyy-MM-dd&amp;#39;.log&amp;#39;&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;layout&lt;/span> class=&lt;span style="color:#2aa198">&amp;#34;org.apache.log4j.PatternLayout&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;param&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;ConversionPattern&amp;#34;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> value=&lt;span style="color:#2aa198">&amp;#34;[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/layout&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/appender&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;logger&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;com.alibaba.dubbo&amp;#34;&lt;/span> additivity=&lt;span style="color:#2aa198">&amp;#34;false&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;priority&lt;/span> value =&lt;span style="color:#2aa198">&amp;#34;info&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;appender-ref&lt;/span> ref=&lt;span style="color:#2aa198">&amp;#34;dubboAppender&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/logger&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="使用logback来提供日志输出">使用logback来提供日志输出&lt;/h2>
+&lt;p>这种情况,默认是看不到dubbo的日志输出的,除非出现异常,被你当前系统的日志框架拦截住了。我这里就拿当前使用最多的日志框架logback来做示例。我们知道logback天生和slf4j进行了集成,所以要在项目里面使用logback,调用slf4j暴露的接口就可以。所以要把dubbo的日志输出切换到logback,也就变成了切换到slf4j了。&lt;/p>
+&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;timestamp&lt;/span> key=&lt;span style="color:#2aa198">&amp;#34;byDate&amp;#34;&lt;/span> datePattern=&lt;span style="color:#2aa198">&amp;#34;yyyyMMdd&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">&amp;lt;!-- dubbo log --&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;appender&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubboRolling&amp;#34;&lt;/span> class=&lt;span style="color:#2aa198">&amp;#34;ch.qos.logback.core.rolling.RollingFileAppender&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;Encoding&amp;gt;&lt;/span>UTF-8&lt;span style="color:#268bd2">&amp;lt;/Encoding&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;file&amp;gt;&lt;/span>${LOG_HOME_DUBBO}/MTP-DUBBO.log&lt;span style="color:#268bd2">&amp;lt;/file&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;rollingPolicy&lt;/span> class=&lt;span style="color:#2aa198">&amp;#34;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;fileNamePattern&amp;gt;&lt;/span>${LOG_HOME_DUBBO}/DEMO-%d{yyyy-MM-dd}.%i-DUBBO.zip&lt;span style="color:#268bd2">&amp;lt;/fileNamePattern&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;maxHistory&amp;gt;&lt;/span>30&lt;span style="color:#268bd2">&amp;lt;/maxHistory&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;TimeBasedFileNamingAndTriggeringPolicy&lt;/span> class=&lt;span style="color:#2aa198">&amp;#34;ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;MaxFileSize&amp;gt;&lt;/span>100MB&lt;span style="color:#268bd2">&amp;lt;/MaxFileSize&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/TimeBasedFileNamingAndTriggeringPolicy&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/rollingPolicy&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;encoder&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;pattern&amp;gt;&lt;/span>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n&lt;span style="color:#268bd2">&amp;lt;/pattern&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;immediateFlush&amp;gt;&lt;/span>true&lt;span style="color:#268bd2">&amp;lt;/immediateFlush&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/encoder&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/appender&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;logger&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;com.alibaba.dubbo&amp;#34;&lt;/span> level=&lt;span style="color:#2aa198">&amp;#34;DEBUG&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;appender-ref&lt;/span> ref=&lt;span style="color:#2aa198">&amp;#34;dubboRolling&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;/logger&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Dubbo 也可以将日志信息记录或者保存到文件中。&lt;/p>
+&lt;ol>
+&lt;li>使用&lt;code>accesslog&lt;/code>输出到&lt;code>log4j&lt;/code>&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> accesslog=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;#34;20880&amp;#34;&lt [...]
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> accesslog=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;rmi&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;#34;1099&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
+&lt;li>输出到文件&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> accesslog=&lt;span style="color:#2aa198">&amp;#34;http://localhost/log.txt&amp;#34;&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;# [...]
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> accesslog=&lt;span style="color:#2aa198">&amp;#34;http://localhost/log2.txt&amp;#34;&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;rmi&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;#34;1099&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs3-V2: 健康检查</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/health-information/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/health-information/</guid><description/></item><item><title>Docs3-V2: K8S探测器</title><link>https://dubbo.apache.org/zh/docs3- [...]
\ No newline at end of file
diff --git a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html
index c602bbb77a..8f7966bc98 100644
--- a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html
+++ b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html
@@ -1,10 +1,134 @@
-<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons [...]
+<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons [...]
+第三方日志框架 优先级 Log4j 最高(默认就用这个) SLF4J 次高(上面没有采用这个) Common Logging(jcl就是common logging) 次低(Log4j和SLF4J在项目中均没有就用这个) JDK log 最低(最后的选择) Dubbo 日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:
+/** * ChannelListenerDispatcher */ public class ChannelHandlerDispatcher implements ChannelHandler { private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(ChannelHandlerDispatcher.class); Dubbo 采用的日志输出方式是首先从 dubbo.application.logger 系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:
+顺序为:log4jLogger > slf4jLogger > JclLogger > JdkLogger
+LoggerFactory 在类加载过程中变量的初始化过程:
+// search common-used logging frameworks static { String logger = System."><meta property="og:type" content="article"><meta property="og:url" content="https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/"><meta property="article:section" content="docs3-v2"><meta property="article:modified_time" content="2023-02-09T16:17:37+08:00"><meta property="og:site_name" content="Apache Dubbo"><meta itemprop=name content="日志管理"><meta itemprop=description c [...]
+第三方日志框架 优先级 Log4j 最高(默认就用这个) SLF4J 次高(上面没有采用这个) Common Logging(jcl就是common logging) 次低(Log4j和SLF4J在项目中均没有就用这个) JDK log 最低(最后的选择) Dubbo 日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:
+/** * ChannelListenerDispatcher */ public class ChannelHandlerDispatcher implements ChannelHandler { private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(ChannelHandlerDispatcher.class); Dubbo 采用的日志输出方式是首先从 dubbo.application.logger 系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:
+顺序为:log4jLogger > slf4jLogger > JclLogger > JdkLogger
+LoggerFactory 在类加载过程中变量的初始化过程:
+// search common-used logging frameworks static { String logger = System."><meta itemprop=dateModified content="2023-02-09T16:17:37+08:00"><meta itemprop=wordCount content="379"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="日志管理"><meta name=twitter:description content="在 Dubbo 框架内所有的日志输出都是通过 LoggerFactory 这个静态工厂类来获得 Logger 的对象实体,并且抽离了一个 LoggerAdapter 用于对接第三方日志框架,所以就有了JDKLoggerAdapter, Log4jLoggerAdapter, SLF4JLoggerAdapter等一些实 [...]
+第三方日志框架 优先级 Log4j 最高(默认就用这个) SLF4J 次高(上面没有采用这个) Common Logging(jcl就是common logging) 次低(Log4j和SLF4J在项目中均没有就用这个) JDK log 最低(最后的选择) Dubbo 日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:
+/** * ChannelListenerDispatcher */ public class ChannelHandlerDispatcher implements ChannelHandler { private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(ChannelHandlerDispatcher.class); Dubbo 采用的日志输出方式是首先从 dubbo.application.logger 系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:
+顺序为:log4jLogger > slf4jLogger > JclLogger > JdkLogger
+LoggerFactory 在类加载过程中变量的初始化过程:
+// search common-used logging frameworks static { String logger = System."><script type=application/javascript>var doNotTrack=!1;doNotTrack||(window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-112489517-1","auto"),ga("send","pageview"))</script><script async src=https://www.google-analytics.com/analytics.js></script>
 <link rel=preload href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css as=style><link href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script>
 <link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3></head><body class=td-page><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand href=/zh/><span class=navbar-logo><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 321.39 78.54"><title id="title19">DUBBO LOGO</title><path class="cls-1" d="M68.46 50.38c0 14.06 11.39 22.11 25.45 22.11s25.45-8.05 25.45-22.11V7.25H68.46zm21.24-28h8.6V31H89.7zm0  [...]
 <a href="https://github.com/apache/dubbo-website/new/master/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A [...]
 <a href="https://github.com/apache/dubbo-website/issues/new?title=%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86" target=_blank><i class="fab fa-github fa-fw"></i> 提交文档问题</a>
-<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div></aside><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class="d-none d-md-block d-print-none"><ol class="breadcrumb spb-1"><li class=breadcrumb-item><a href=https://dubbo.apache.org/zh/docs3-v2/>SDK 手册</a></li><li class=breadcrumb-item><a href=https://dubbo.apache.org/zh/docs3-v2/java-sdk/>Java</a></li><li class=breadcrumb-item><a href=h [...]
-<button class="btn btn-primary mb-4 feedback--answer feedback--answer-no">No</button><p class="feedback--response feedback--response-yes">Glad to hear it! Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to hear that. Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback [...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav id=TableOfContents><ul><li><a href=#使用log4j来提供日志输出>使用Log4j来提供日志输出</a></li><li><a href=#使用logback来提供日志输出>使用logback来提供日志输出</a></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class="d-none d-md-block d-print-none"><ol class="breadcrumb spb-1"><li class=breadcrumb-item><a href=https://dubbo [...]
+</span></span></span><span style=display:flex><span><span style=color:#586e75> * ChannelListenerDispatcher
+</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
+</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>ChannelHandlerDispatcher</span> <span style=color:#268bd2>implements</span> ChannelHandler <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>    <span style=color:#268bd2>private</span> <span style=color:#268bd2>static</span> <span style=color:#268bd2>final</span> ErrorTypeAwareLogger logger <span style=color:#719e07>=</span> LoggerFactory<span style=color:#719e07>.</span>getErrorTypeAwareLogger<span style=color:#719e07>(</span>ChannelHandlerDispatcher<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span></code></pre></div><p>Dubbo 采用的日志输出方式是首先从 dubbo.application.logger 系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:</p><p>顺序为:log4jLogger > slf4jLogger > JclLogger > JdkLogger</p><p>LoggerFactory 在类加载过程中变量的初始化过程:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>// search common-used logging [...]
+</span></span></span><span style=display:flex><span><span style=color:#586e75></span><span style=color:#268bd2>static</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>    String logger <span style=color:#719e07>=</span> System<span style=color:#719e07>.</span>getProperty<span style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo.application.logger&#34;</span><span style=color:#719e07>,</span> <span style=color:#2aa198>&#34;&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>    <span style=color:#719e07>switch</span> <span style=color:#719e07>(</span>logger<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>        <span style=color:#719e07>case</span> Slf4jLoggerAdapter<span style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span>            setLoggerAdapter<span style=color:#719e07>(</span><span style=color:#719e07>new</span> Slf4jLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>        <span style=color:#719e07>case</span> JclLoggerAdapter<span style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span>            setLoggerAdapter<span style=color:#719e07>(</span><span style=color:#719e07>new</span> JclLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>        <span style=color:#719e07>case</span> Log4jLoggerAdapter<span style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span>            setLoggerAdapter<span style=color:#719e07>(</span><span style=color:#719e07>new</span> Log4jLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>        <span style=color:#719e07>case</span> JdkLoggerAdapter<span style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span>            setLoggerAdapter<span style=color:#719e07>(</span><span style=color:#719e07>new</span> JdkLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>        <span style=color:#719e07>case</span> Log4j2LoggerAdapter<span style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span>            setLoggerAdapter<span style=color:#719e07>(</span><span style=color:#719e07>new</span> Log4j2LoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>        <span style=color:#719e07>default</span><span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span>            List<span style=color:#719e07>&lt;</span>Class<span style=color:#719e07>&lt;?</span> <span style=color:#268bd2>extends</span> LoggerAdapter<span style=color:#719e07>&gt;&gt;</span> candidates <span style=color:#719e07>=</span> Arrays<span style=color:#719e07>.</span>asList<span style=color:#719e07>(</span>
+</span></span><span style=display:flex><span>                Log4jLoggerAdapter<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>                Slf4jLoggerAdapter<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>                Log4j2LoggerAdapter<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>                JclLoggerAdapter<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>                JdkLoggerAdapter<span style=color:#719e07>.</span>class
+</span></span><span style=display:flex><span>            <span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>            <span style=color:#dc322f>boolean</span> found <span style=color:#719e07>=</span> <span style=color:#cb4b16>false</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>            <span style=color:#586e75>// try to use the first available adapter
+</span></span></span><span style=display:flex><span><span style=color:#586e75></span>            <span style=color:#719e07>for</span> <span style=color:#719e07>(</span>Class<span style=color:#719e07>&lt;?</span> <span style=color:#268bd2>extends</span> LoggerAdapter<span style=color:#719e07>&gt;</span> clazz <span style=color:#719e07>:</span> candidates<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                    LoggerAdapter loggerAdapter <span style=color:#719e07>=</span> clazz<span style=color:#719e07>.</span>getConstructor<span style=color:#719e07>().</span>newInstance<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>                    loggerAdapter<span style=color:#719e07>.</span>getLogger<span style=color:#719e07>(</span>LoggerFactory<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                    <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>loggerAdapter<span style=color:#719e07>.</span>isConfigured<span style=color:#719e07>())</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                        setLoggerAdapter<span style=color:#719e07>(</span>loggerAdapter<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                        found <span style=color:#719e07>=</span> <span style=color:#cb4b16>true</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>                        <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>                    <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>                <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>Exception <span style=color:#719e07>|</span> LinkageError ignored<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                    <span style=color:#586e75>// ignore
+</span></span></span><span style=display:flex><span><span style=color:#586e75></span>                <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>found<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>            System<span style=color:#719e07>.</span>err<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>&#34;Dubbo: Unable to find a proper configured logger to log out.&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>for</span> <span style=color:#719e07>(</span>Class<span style=color:#719e07>&lt;?</span> <span style=color:#268bd2>extends</span> LoggerAdapter<span style=color:#719e07>&gt;</span> clazz <span style=color:#719e07>:</span> candidates<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                    LoggerAdapter loggerAdapter <span style=color:#719e07>=</span> clazz<span style=color:#719e07>.</span>getConstructor<span style=color:#719e07>().</span>newInstance<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>                    loggerAdapter<span style=color:#719e07>.</span>getLogger<span style=color:#719e07>(</span>LoggerFactory<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                    setLoggerAdapter<span style=color:#719e07>(</span>loggerAdapter<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                    found <span style=color:#719e07>=</span> <span style=color:#cb4b16>true</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>                    <span style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>                <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>Throwable ignored<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                    <span style=color:#586e75>// ignore
+</span></span></span><span style=display:flex><span><span style=color:#586e75></span>                <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>found<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                System<span style=color:#719e07>.</span>err<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>&#34;Dubbo: Using default logger: &#34;</span> <span style=color:#719e07>+</span> loggerAdapter<span style=color:#719e07>.</span>getClass<span style=color:#719e07>().</span>getName<span style=color:#719e07>()</span> <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;. &#3 [...]
+</span></span><span style=display:flex><span>                    <span style=color:#2aa198>&#34;If you cannot see any log, please configure -Ddubbo.application.logger property to your preferred logging framework.&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>}</span> <span style=color:#719e07>else</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                System<span style=color:#719e07>.</span>err<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>&#34;Dubbo: Unable to find any available logger adapter to log out. Dubbo logs will be ignored. &#34;</span> <span style=color:#719e07>+</span>
+</span></span><span style=display:flex><span>                    <span style=color:#2aa198>&#34;Please configure -Ddubbo.application.logger property and add corresponding logging library to classpath.&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>            <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>    <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
+</span></span></code></pre></div><p>上面这段静态块是在LoggerFactory里面,说明只要LoggerFactory类一加载就会去选择对应的日志提供方。大家可能会发现对日志的提供方其实是可以通过配置来指定的,因为静态块一开始是从当前jvm环境中获取dubbo.application.logger,这个参数是同java -Ddubbo.application.logger=xxxx去指定的,如果是放在容器里面,就需要配置在容器启动的jvm参数里面。</p><h2 id=使用log4j来提供日志输出>使用Log4j来提供日志输出</h2><p>你不用做过多的处理就可以开启dubbo的日志,因为dubbo默认就是使用log4j。你唯一需要做的就是配置一个name是"com.alibaba.dubbo"的logger就可以了,然后关联到对应的appender。如下:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-m [...]
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;param</span> name=<span style=color:#2aa198>&#34;File&#34;</span> value=<span style=color:#2aa198>&#34;E:/dubbo.log&#34;</span> <span style=color:#268bd2>/&gt;</span>  
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;param</span> name=<span style=color:#2aa198>&#34;DatePattern&#34;</span> value=<span style=color:#2aa198>&#34;&#39;.&#39;yyyy-MM-dd&#39;.log&#39;&#34;</span> <span style=color:#268bd2>/&gt;</span>  
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;layout</span> class=<span style=color:#2aa198>&#34;org.apache.log4j.PatternLayout&#34;</span><span style=color:#268bd2>&gt;</span> 
+</span></span><span style=display:flex><span>         <span style=color:#268bd2>&lt;param</span> name=<span style=color:#2aa198>&#34;ConversionPattern&#34;</span>
+</span></span><span style=display:flex><span>            value=<span style=color:#2aa198>&#34;[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n&#34;</span> <span style=color:#268bd2>/&gt;</span> 
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;/layout&gt;</span>  
+</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/appender&gt;</span> 
+</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;logger</span> name=<span style=color:#2aa198>&#34;com.alibaba.dubbo&#34;</span> additivity=<span style=color:#2aa198>&#34;false&#34;</span><span style=color:#268bd2>&gt;</span> 
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;priority</span> value =<span style=color:#2aa198>&#34;info&#34;</span><span style=color:#268bd2>/&gt;</span>  
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;appender-ref</span> ref=<span style=color:#2aa198>&#34;dubboAppender&#34;</span> <span style=color:#268bd2>/&gt;</span>  
+</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/logger&gt;</span>
+</span></span></code></pre></div><h2 id=使用logback来提供日志输出>使用logback来提供日志输出</h2><p>这种情况,默认是看不到dubbo的日志输出的,除非出现异常,被你当前系统的日志框架拦截住了。我这里就拿当前使用最多的日志框架logback来做示例。我们知道logback天生和slf4j进行了集成,所以要在项目里面使用logback,调用slf4j暴露的接口就可以。所以要把dubbo的日志输出切换到logback,也就变成了切换到slf4j了。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;timestamp</ [...]
+</span></span><span style=display:flex><span>    <span style=color:#586e75>&lt;!-- dubbo log --&gt;</span>
+</span></span><span style=display:flex><span>    <span style=color:#268bd2>&lt;appender</span> name=<span style=color:#2aa198>&#34;dubboRolling&#34;</span> class=<span style=color:#2aa198>&#34;ch.qos.logback.core.rolling.RollingFileAppender&#34;</span><span style=color:#268bd2>&gt;</span>
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;Encoding&gt;</span>UTF-8<span style=color:#268bd2>&lt;/Encoding&gt;</span>
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;file&gt;</span>${LOG_HOME_DUBBO}/MTP-DUBBO.log<span style=color:#268bd2>&lt;/file&gt;</span>
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;rollingPolicy</span> class=<span style=color:#2aa198>&#34;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&#34;</span><span style=color:#268bd2>&gt;</span>
+</span></span><span style=display:flex><span>            <span style=color:#268bd2>&lt;fileNamePattern&gt;</span>${LOG_HOME_DUBBO}/DEMO-%d{yyyy-MM-dd}.%i-DUBBO.zip<span style=color:#268bd2>&lt;/fileNamePattern&gt;</span>
+</span></span><span style=display:flex><span>            <span style=color:#268bd2>&lt;maxHistory&gt;</span>30<span style=color:#268bd2>&lt;/maxHistory&gt;</span>
+</span></span><span style=display:flex><span>            <span style=color:#268bd2>&lt;TimeBasedFileNamingAndTriggeringPolicy</span> class=<span style=color:#2aa198>&#34;ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP&#34;</span><span style=color:#268bd2>&gt;</span>
+</span></span><span style=display:flex><span>                <span style=color:#268bd2>&lt;MaxFileSize&gt;</span>100MB<span style=color:#268bd2>&lt;/MaxFileSize&gt;</span>
+</span></span><span style=display:flex><span>            <span style=color:#268bd2>&lt;/TimeBasedFileNamingAndTriggeringPolicy&gt;</span>
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;/rollingPolicy&gt;</span>
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;encoder&gt;</span>
+</span></span><span style=display:flex><span>            <span style=color:#268bd2>&lt;pattern&gt;</span>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n<span style=color:#268bd2>&lt;/pattern&gt;</span>
+</span></span><span style=display:flex><span>            <span style=color:#268bd2>&lt;immediateFlush&gt;</span>true<span style=color:#268bd2>&lt;/immediateFlush&gt;</span>
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;/encoder&gt;</span>
+</span></span><span style=display:flex><span>    <span style=color:#268bd2>&lt;/appender&gt;</span>
+</span></span><span style=display:flex><span>    <span style=color:#268bd2>&lt;logger</span> name=<span style=color:#2aa198>&#34;com.alibaba.dubbo&#34;</span> level=<span style=color:#2aa198>&#34;DEBUG&#34;</span><span style=color:#268bd2>&gt;</span>
+</span></span><span style=display:flex><span>        <span style=color:#268bd2>&lt;appender-ref</span> ref=<span style=color:#2aa198>&#34;dubboRolling&#34;</span><span style=color:#268bd2>/&gt;</span>
+</span></span><span style=display:flex><span>    <span style=color:#268bd2>&lt;/logger&gt;</span>
+</span></span></code></pre></div><p>Dubbo 也可以将日志信息记录或者保存到文件中。</p><ol><li>使用<code>accesslog</code>输出到<code>log4j</code></li></ol><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:protocol</span> accesslog=<span style=color:#2aa198>&#34;true&#34;</span> name=<span style=color:#2aa198>&#34;dubbo&#34;</span> port=<s [...]
+</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:protocol</span> accesslog=<span style=color:#2aa198>&#34;true&#34;</span> name=<span style=color:#2aa198>&#34;rmi&#34;</span> port=<span style=color:#2aa198>&#34;1099&#34;</span> <span style=color:#268bd2>/&gt;</span>
+</span></span></code></pre></div><ol start=2><li>输出到文件</li></ol><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:protocol</span> accesslog=<span style=color:#2aa198>&#34;http://localhost/log.txt&#34;</span> name=<span style=color:#2aa198>&#34;dubbo&#34;</span> port=<span style=color:#2aa198>&#34;20880&#34;</spa [...]
+</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:protocol</span> accesslog=<span style=color:#2aa198>&#34;http://localhost/log2.txt&#34;</span> name=<span style=color:#2aa198>&#34;rmi&#34;</span> port=<span style=color:#2aa198>&#34;1099&#34;</span> <span style=color:#268bd2>/&gt;</span>
+</span></span></code></pre></div><style>.feedback--answer{display:inline-block}.feedback--answer-no{margin-left:1em}.feedback--response{display:none;margin-top:1em}.feedback--response__visible{display:block}</style><div class=d-print-none><h2 class=feedback--title>Feedback</h2><p class=feedback--question>Was this page helpful?</p><button class="btn btn-primary mb-4 feedback--answer feedback--answer-yes">Yes</button>
+<button class="btn btn-primary mb-4 feedback--answer feedback--answer-no">No</button><p class="feedback--response feedback--response-yes">Glad to hear it! Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to hear that. Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback [...]
 <script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script>
 <script src=/js/main.min.9f304eb79b67eb331e2b22923c361575b563af25c0fd56279cf20f3a2417cff4.js integrity="sha256-nzBOt5tn6zMeKyKSPDYVdbVjryXA/VYnnPIPOiQXz/Q=" crossorigin=anonymous></script>
 <script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml
index 490564b447..1d98db2cc2 100644
--- a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml
+++ b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml
@@ -99,9 +99,7 @@ Dubbo协议支持,以及Qos协议支持。这些协议的识别都是由一个
 &lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">// reference.setProtocol(CommonConstants.TRIPLE);
 &lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://dubbo.apache.org/imgs/blog/pu-server/reference-service.png" alt="pu-server-imgs4">&lt;/p></description></item><item><title>Docs3-V2: 分布式事务</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/</gu [...]
 &lt;h2 id="特性说明">特性说明&lt;/h2>
-&lt;p>提供了对补偿事务的支持。这使开发人员能够在事务失败时回滚事务的影响。分布式事务特性还支持全局事务超时,这允许开发人员指定事务完成的超时时间。&lt;/p>
-&lt;p>为分布式事务日志提供了支持。这允许开发人员查看分布式应用程序中所有服务中发生的事务的历史记录。这使他们能够轻松地调试和排除事务。&lt;/p>
-&lt;p>提供了对分布式事务恢复的支持。&lt;/p>
+&lt;p>分布式事务提供对补偿事务的支持,能够在事务失败时回滚事务的影响,支持全局事务超时,能够指定事务完成的超时时间,对日志提供支持,能够查看分布式应用程序中所有服务中发生的事务的历史记录,能够轻松地调试和排除事务。&lt;/p>
 &lt;h2 id="使用场景">使用场景&lt;/h2>
 &lt;ol>
 &lt;li>电商:当客户在线购买商品时,提供分布式交易。可以确保订单和付款在不同的数据库和服务中保持同步,有助于防止付款丢失和订单错误。&lt;/li>
diff --git a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html
index 2614d55eab..c8da2b6ad4 100644
--- a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html
+++ b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html
@@ -1,9 +1,9 @@
-<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons [...]
+<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons [...]
 <link rel=preload href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css as=style><link href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script>
 <link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3></head><body class=td-page><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand href=/zh/><span class=navbar-logo><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 321.39 78.54"><title id="title19">DUBBO LOGO</title><path class="cls-1" d="M68.46 50.38c0 14.06 11.39 22.11 25.45 22.11s25.45-8.05 25.45-22.11V7.25H68.46zm21.24-28h8.6V31H89.7zm0  [...]
 <a href="https://github.com/apache/dubbo-website/new/master/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2 [...]
 <a href="https://github.com/apache/dubbo-website/issues/new?title=%e5%88%86%e5%b8%83%e5%bc%8f%e4%ba%8b%e5%8a%a1" target=_blank><i class="fab fa-github fa-fw"></i> 提交文档问题</a>
-<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav id=TableOfContents><ul><li><a href=#特性说明>特性说明</a></li><li><a href=#使用场景>使用场景</a></li><li><a href=#使用方式>使用方式</a><ul><li><a href=#第一步><strong>第一步</strong></a></li><li><a href=#第二步><strong>第二步</strong></a></li><li><a href=#第三步><strong>第三步</strong></a></li><li><a href=#第四步><strong>第四步</strong></a></li><li><a href=#第五步><strong>第五步</strong></a></li><li><a h [...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav id=TableOfContents><ul><li><a href=#特性说明>特性说明</a></li><li><a href=#使用场景>使用场景</a></li><li><a href=#使用方式>使用方式</a><ul><li><a href=#第一步><strong>第一步</strong></a></li><li><a href=#第二步><strong>第二步</strong></a></li><li><a href=#第三步><strong>第三步</strong></a></li><li><a href=#第四步><strong>第四步</strong></a></li><li><a href=#第五步><strong>第五步</strong></a></li><li><a h [...]
 </span></span></span><span style=display:flex><span><span style=color:#586e75></span><span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span style=color:#719e07>NOT</span> <span style=color:#719e07>EXISTS</span> <span style=color:#719e07>`</span>undo_log<span style=color:#719e07>`</span>
 </span></span><span style=display:flex><span>(
 </span></span><span style=display:flex><span>    <span style=color:#719e07>`</span>branch_id<span style=color:#719e07>`</span>     <span style=color:#b58900>BIGINT</span>(<span style=color:#2aa198>20</span>)   <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> <span style=color:#719e07>COMMENT</span> <span style=color:#2aa198>&#39;branch transaction id&#39;</span>,
@@ -281,7 +281,7 @@
 </span></span></code></pre></div><p>windows</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#b58900>cd</span> bin
 </span></span><span style=display:flex><span>./seata-server.bat
 </span></span></code></pre></div><p>运行 seata-server,成功后,运行自己的服务 dubbo provider&consumer</p><h3 id=第八步高可用-seata-server-搭建><strong>第八步高可用 Seata-server 搭建</strong></h3><p>由于 seata-server 支持计算与存储分离模式,并支持暴露服务地址至多种注册中心,仅需按照第六步配置完毕后水平扩展即可</p><p>详情请访问:https://seata.io/</p><style>.feedback--answer{display:inline-block}.feedback--answer-no{margin-left:1em}.feedback--response{display:none;margin-top:1em}.feedback--response__visible{display:block}</style><div class=d-print-none><h2 class=feedback--t [...]
-<button class="btn btn-primary mb-4 feedback--answer feedback--answer-no">No</button><p class="feedback--response feedback--response-yes">Glad to hear it! Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to hear that. Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback [...]
+<button class="btn btn-primary mb-4 feedback--answer feedback--answer-no">No</button><p class="feedback--response feedback--response-yes">Glad to hear it! Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to hear that. Please <a href=https://github.com/apache/dubbo-website/issues/new>tell us how we can improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback [...]
 <script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script>
 <script src=/js/main.min.9f304eb79b67eb331e2b22923c361575b563af25c0fd56279cf20f3a2417cff4.js integrity="sha256-nzBOt5tn6zMeKyKSPDYVdbVjryXA/VYnnPIPOiQXz/Q=" crossorigin=anonymous></script>
 <script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git a/zh/sitemap.xml b/zh/sitemap.xml
index 3ed6e3556c..925d68a1fb 100644
--- a/zh/sitemap.xml
+++ b/zh/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://dubbo.apache.org/zh/docs3-v2/java-sdk/faq/0/</loc><lastmod>2022-08-01T10:49:31+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link rel="alternate" hreflang="en" href="https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/"/><xhtml:link rel="alternate" hreflang="zh" href="https://dubbo.a [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://dubbo.apache.org/zh/docs3-v2/java-sdk/faq/0/</loc><lastmod>2022-08-01T10:49:31+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link rel="alternate" hreflang="en" href="https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/"/><xhtml:link rel="alternate" hreflang="zh" href="https://dubbo.a [...]
\ No newline at end of file