mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
48 lines
20 KiB
JavaScript
48 lines
20 KiB
JavaScript
import{_ as o,r as e,o as l,c as p,b as s,d as a,e as c,a as i}from"./app-BpUB8-Q8.js";const t={},r=s("h1",{id:"调试日志",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#调试日志","aria-hidden":"true"},"#"),a(" 调试日志")],-1),d=s("blockquote",null,[s("p",null,[a("日志是调试过程最重要的一环,"),s("code",null,"YukiHookAPI"),a(" 为开发者封装了一套稳定高效的调试日志功能。")])],-1),u={class:"custom-container tip"},y=s("p",{class:"custom-container-title"},"小提示",-1),b=s("code",null,"KavaRef",-1),g={href:"https://highcapable.github.io/KavaRef/zh-cn/library/kavaref-core#%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86",target:"_blank",rel:"noopener noreferrer"},A=s("code",null,"KavaRef",-1),m=s("p",null,[s("code",null,"YukiHookAPI"),a(" 默认接管了 "),s("code",null,"KavaRef"),a(" 的日志功能,你也可以自己配置 "),s("code",null,"KavaRef"),a(" 的日志功能。")],-1),v=i(`<h2 id="普通日志" tabindex="-1"><a class="header-anchor" href="#普通日志" aria-hidden="true">#</a> 普通日志</h2><p>你可以调用 <code>YLog.debug</code>、<code>YLog.info</code>、<code>YLog.warn</code> 来向控制台打印普通日志。</p><p>使用方法如下所示。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">debug</span><span style="color:#ADBAC7;">(msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"This is a log"</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>此时,<code>YukiHookAPI</code> 会调用 <code>android.util.Log</code> 与 (Xposed) 宿主环境中的日志功能同时打印这条日志。</p><p>日志默认的 <code>TAG</code> 为你在 <code>YLog.Configs.tag</code> 中设置的值。</p><p>你也可以动态自定义这个值,但是不建议轻易修改 <code>TAG</code> 防止过滤不到日志。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">debug</span><span style="color:#ADBAC7;">(tag </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"YukiHookAPI"</span><span style="color:#ADBAC7;">, msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"This is a log"</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>打印的结果为如下所示。</p><blockquote><p>示例如下</p></blockquote><div class="language-text" data-ext="text"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#adbac7;">[YukiHookAPI][D][宿主包名] This is a log</span></span>
|
|
<span class="line"><span style="color:#adbac7;"></span></span></code></pre></div><p>你还可以使用 <code>YLog.EnvType</code> 自定义日志打印的环境,可选择使用 <code>android.util.Log</code> 还是 (Xposed) 宿主环境中的日志功能来打印日志。</p><p>默认类型为 <code>YLog.EnvType.BOTH</code>,含义为同时使用这两个方法来打印日志。</p><p>比如我们仅使用 <code>android.util.Log</code> 来打印日志。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">debug</span><span style="color:#ADBAC7;">(tag </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"YukiHookAPI"</span><span style="color:#ADBAC7;">, msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"This is a log"</span><span style="color:#ADBAC7;">, env </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> YLog.EnvType.LOGD)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>或仅使用 (Xposed) 宿主环境中的日志功能来打印日志,此方法仅可在 (Xposed) 宿主环境使用。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">debug</span><span style="color:#ADBAC7;">(tag </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"YukiHookAPI"</span><span style="color:#ADBAC7;">, msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"This is a log"</span><span style="color:#ADBAC7;">, env </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> YLog.EnvType.XPOSED_ENVIRONMENT)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>若你想智能区分 (Xposed) 宿主环境与模块环境,可以写为如下形式。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">debug</span><span style="color:#ADBAC7;">(tag </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"YukiHookAPI"</span><span style="color:#ADBAC7;">, msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"This is a log"</span><span style="color:#ADBAC7;">, env </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> YLog.EnvType.SCOPE)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>这样 API 就会在不同环境智能选择指定的方法类型去打印这条日志。</p><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>更多功能请参考 <a href="../public/com/highcapable/yukihookapi/hook/log/YLog#debug-method">YLog.debug</a>、<a href="../public/com/highcapable/yukihookapi/hook/log/YLog#info-method">YLog.info</a> 及 <a href="../public/com/highcapable/yukihookapi/hook/log/YLog#warn-method">YLog.warn</a> 方法。</p></div><h2 id="错误日志" tabindex="-1"><a class="header-anchor" href="#错误日志" aria-hidden="true">#</a> 错误日志</h2><p>你可以调用 <code>YLog.error</code> 来向控制台打印 <code>E</code> 级别的日志。</p><p>使用方法如下所示。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">error</span><span style="color:#ADBAC7;">(msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"This is an error"</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>错误日志的级别是最高的,无论你有没有过滤仅为 <code>E</code> 级别的日志。</p><p>对于错误级别的日志,你还可以在后面加上一个异常堆栈。</p><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;">// 假设这就是被抛出的异常</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> throwable </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Throwable</span><span style="color:#ADBAC7;">(</span><span style="color:#F47067;">..</span><span style="color:#ADBAC7;">.)</span></span>
|
|
<span class="line"><span style="color:#768390;">// 打印日志</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">error</span><span style="color:#ADBAC7;">(msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"This is an error"</span><span style="color:#ADBAC7;">, e </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> throwable)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>打印的结果为如下所示。</p><blockquote><p>示例如下</p></blockquote><div class="language-text" data-ext="text"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#adbac7;">[YukiHookAPI][E][宿主包名] This is an error</span></span>
|
|
<span class="line"><span style="color:#adbac7;"></span></span></code></pre></div><p>同时,日志会帮你打印整个异常堆栈。</p><blockquote><p>示例如下</p></blockquote><div class="language-text" data-ext="text"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#adbac7;">java.lang.Throwable</span></span>
|
|
<span class="line"><span style="color:#adbac7;"> at com.demo.Test.<init>(...) </span></span>
|
|
<span class="line"><span style="color:#adbac7;"> at com.demo.Test.doTask(...) </span></span>
|
|
<span class="line"><span style="color:#adbac7;"> at com.demo.Test.stop(...) </span></span>
|
|
<span class="line"><span style="color:#adbac7;"> at com.demo.Test.init(...) </span></span>
|
|
<span class="line"><span style="color:#adbac7;"> at a.a.a(...) </span></span>
|
|
<span class="line"><span style="color:#adbac7;"> ... 3 more</span></span>
|
|
<span class="line"><span style="color:#adbac7;"></span></span></code></pre></div><p>在错误日志中,你同样也可以使用 <code>YLog.EnvType</code> 来指定当前打印日志所用到的方法类型。</p><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>更多功能请参考 <a href="../public/com/highcapable/yukihookapi/hook/log/YLog#error-method">YLog.error</a> 方法。</p></div><h2 id="保存日志与自定义元素" tabindex="-1"><a class="header-anchor" href="#保存日志与自定义元素" aria-hidden="true">#</a> 保存日志与自定义元素</h2><p>你可以使用 <code>YLog.saveToFile</code> 方法直接保存当前已打印的全部日志到文件。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;">// 请注意保存的文件路径必须拥有读写权限,否则会抛出异常</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">saveToFile</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"/sdcard/Documents/debug_log.log"</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>你还可以使用 <code>YLog.contents</code> 获取当前已打印的全部日志文件内容。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;">// 获取当前已打印的全部日志文件内容</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> fileContent </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> YLog.contents</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>如果你需要一个实时日志的数据结构数组,你可以直接获取 <code>YLog.inMemoryData</code> 的内容。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;">// 获取当前已打印的实时日志数据结构数组</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">YLog.inMemoryData.</span><span style="color:#DCBDFB;">forEach</span><span style="color:#ADBAC7;"> {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> it.timestamp </span><span style="color:#768390;">// 获取时间戳</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> it.time </span><span style="color:#768390;">// 获取 UTC 时间</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> it.priority </span><span style="color:#768390;">// 获取优先级</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> it.msg </span><span style="color:#768390;">// 获取消息</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> it.throwable </span><span style="color:#768390;">// 获取异常</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果你想对得到的自定义日志数据进行格式化或保存到文件,你只需要使用如下方法即可。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;">// 假设这就是你得到的自定义日志数据</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">data</span><span style="color:#ADBAC7;">: </span><span style="color:#F69D50;">List</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">YLogData</span><span style="color:#ADBAC7;">></span></span>
|
|
<span class="line"><span style="color:#768390;">// 格式化日志数据到字符串</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> dataString </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> YLog.</span><span style="color:#DCBDFB;">contents</span><span style="color:#ADBAC7;">(</span><span style="color:#F47067;">data</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"><span style="color:#768390;">// 保存日志数据到文件</span></span>
|
|
<span class="line"><span style="color:#768390;">// 请注意保存的文件路径必须拥有读写权限,否则会抛出异常</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">YLog.</span><span style="color:#DCBDFB;">saveToFile</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"/sdcard/Documents/debug_log.log"</span><span style="color:#ADBAC7;">, </span><span style="color:#F47067;">data</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container danger"><p class="custom-container-title">特别注意</p><p>你需要启用 <strong>YLog.Configs.isRecord</strong> 才能获取到 <strong>YLog.inMemoryData</strong> 的内容。</p><p>获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。</p><p>你只能在对应的进程中获取对应的日志数据,如果你需要在任何地方实时得到这些日志数据,请参考 <a href="xposed-channel">Xposed 模块与宿主通讯桥</a>、<a href="host-inject#%E6%B3%A8%E5%86%8C%E6%A8%A1%E5%9D%97-activity">注册模块 Activity</a>。</p><p>如果你只想通过模块或宿主来实时得到日志数据,请参考可选方案 <a href="../public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel#obtainloggerinmemorydata-method">YukiHookDataChannel.obtainLoggerInMemoryData</a> 方法。</p></div><p>你还可以使用 <code>YLog.Configs.elements</code> 自定义调试日志对外显示的元素。</p><p>此功能需要在 Hook 入口类的 <code>onInit</code> 中对 <code>YukiHookAPI.Configs</code> 进行配置。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">onInit</span><span style="color:#ADBAC7;">() </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">configs</span><span style="color:#ADBAC7;"> {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">debugLog</span><span style="color:#ADBAC7;"> {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">elements</span><span style="color:#ADBAC7;">(TAG, PRIORITY, PACKAGE_NAME, USER_ID)</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>更多功能请参考 <a href="../public/com/highcapable/yukihookapi/hook/log/YLog#inmemorydata-field">YLog.inMemoryData</a>、<a href="../public/com/highcapable/yukihookapi/hook/log/YLog#contents-field">YLog.contents</a>、<a href="../public/com/highcapable/yukihookapi/hook/log/YLog#contents-method">YLog.contents</a>、<a href="../public/com/highcapable/yukihookapi/hook/log/YLog#savetofile-method">YLog.saveToFile</a> 方法以及 <a href="../public/com/highcapable/yukihookapi/hook/log/YLog#configs-object">YLog.Configs</a>。</p></div>`,61);function h(k,D){const n=e("ExternalLinkIcon");return l(),p("div",null,[r,d,s("div",u,[y,s("p",null,[b,a(" 的日志可以由其自身单独管理,详细的配置方案你可以参考 "),s("a",g,[a("这里"),c(n)]),a(",这将跳转到 "),A,a(" 的文档。")]),m]),v])}const C=o(t,[["render",h],["__file","logger.html.vue"]]);export{C as default};
|