mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Added LoggerType function in LoggerFactory
This commit is contained in:
@@ -8,16 +8,102 @@
|
||||
|
||||
> 这是 `YukiHookAPI` 的日志封装类,可实现同时向 `Logcat` 和 `XposedBridge.log` 打印日志的功能。
|
||||
|
||||
### LoggerType [class]
|
||||
|
||||
```kotlin
|
||||
enum class LoggerType
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0.93` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 需要打印的日志类型。
|
||||
|
||||
决定于模块与 (Xposed) 宿主环境使用的打印方式。
|
||||
|
||||
#### LOGD [enum]
|
||||
|
||||
```kotlin
|
||||
LOGD
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0.93` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 仅使用 `android.util.Log`。
|
||||
|
||||
#### XPOSEDBRIDGE [enum]
|
||||
|
||||
```kotlin
|
||||
XPOSEDBRIDGE
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0.93` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 仅使用 `XposedBridge.log`。
|
||||
|
||||
!> 只能在 (Xposed) 宿主环境中使用,模块环境将不生效。
|
||||
|
||||
#### SCOPE [enum]
|
||||
|
||||
```kotlin
|
||||
SCOPE
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0.93` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 分区使用。
|
||||
|
||||
(Xposed) 宿主环境仅使用 `XPOSEDBRIDGE`。
|
||||
|
||||
模块环境仅使用 `LOGD`。
|
||||
|
||||
#### BOTH [enum]
|
||||
|
||||
```kotlin
|
||||
BOTH
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0.93` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 同时使用。
|
||||
|
||||
(Xposed) 宿主环境使用 `LOGD` 与 `XPOSEDBRIDGE`。
|
||||
|
||||
模块环境仅使用 `LOGD`。
|
||||
|
||||
### loggerD [method]
|
||||
|
||||
```kotlin
|
||||
fun loggerD(tag: String, msg: String)
|
||||
fun loggerD(tag: String, msg: String, type: LoggerType)
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0` `添加`
|
||||
|
||||
`v1.0.93` `修改`
|
||||
|
||||
新增 `type` 参数
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 向 `Logcat` 和 `XposedBridge` 打印日志,级别 `D`。
|
||||
@@ -27,13 +113,17 @@ fun loggerD(tag: String, msg: String)
|
||||
### loggerI [method]
|
||||
|
||||
```kotlin
|
||||
fun loggerI(tag: String, msg: String)
|
||||
fun loggerI(tag: String, msg: String, type: LoggerType)
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0` `添加`
|
||||
|
||||
`v1.0.93` `修改`
|
||||
|
||||
新增 `type` 参数
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 向 `Logcat` 和 `XposedBridge` 打印日志,级别 `I`。
|
||||
@@ -43,13 +133,17 @@ fun loggerI(tag: String, msg: String)
|
||||
### loggerW [method]
|
||||
|
||||
```kotlin
|
||||
fun loggerW(tag: String, msg: String)
|
||||
fun loggerW(tag: String, msg: String, type: LoggerType)
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0` `添加`
|
||||
|
||||
`v1.0.93` `修改`
|
||||
|
||||
新增 `type` 参数
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 向 `Logcat` 和 `XposedBridge` 打印日志,级别 `W`。
|
||||
@@ -59,13 +153,17 @@ fun loggerW(tag: String, msg: String)
|
||||
### loggerE [method]
|
||||
|
||||
```kotlin
|
||||
fun loggerE(tag: String, msg: String, e: Throwable?)
|
||||
fun loggerE(tag: String, msg: String, e: Throwable?, type: LoggerType)
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0` `添加`
|
||||
|
||||
`v1.0.93` `修改`
|
||||
|
||||
新增 `type` 参数
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 向 `Logcat` 和 `XposedBridge` 打印日志,级别 `E`,可携带 `e` 异常信息,将打印异常堆栈。
|
||||
|
@@ -949,6 +949,36 @@ loggerD(tag = "YukiHookAPI", msg = "This is a log")
|
||||
[YukiHookAPI][D]--> This is a log
|
||||
```
|
||||
|
||||
你还可以使用 `LoggerType` 自定义日志打印的类型,可选择使用 `android.util.Log` 还是 `XposedBridge.log` 来打印日志。
|
||||
|
||||
默认类型为 `LoggerType.BOTH`,含义为同时使用这两个方法来打印日志。
|
||||
|
||||
比如我们仅使用 `android.util.Log` 来打印日志。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
loggerD(tag = "YukiHookAPI", msg = "This is a log", type = LoggerType.LOGD)
|
||||
```
|
||||
|
||||
或又仅使用 `XposedBridge.log` 来打印日志,此方法仅可在 (Xposed) 宿主环境使用。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
loggerD(tag = "YukiHookAPI", msg = "This is a log", type = LoggerType.XPOSEDBRIDGE)
|
||||
```
|
||||
|
||||
若你想智能区分 (Xposed) 宿主环境与模块环境,可以写为如下形式。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
loggerD(tag = "YukiHookAPI", msg = "This is a log", type = LoggerType.SCOPE)
|
||||
```
|
||||
|
||||
这样 API 就会在不同环境智能选择指定的方法类型去打印这条日志。
|
||||
|
||||
更多用法可参考 [loggerD](api/document?id=loggerd-method)、[loggerI](api/document?id=loggeri-method) 及 [loggerW](api/document?id=loggerw-method) 方法。
|
||||
|
||||
### 错误日志
|
||||
@@ -996,6 +1026,8 @@ java.lang.Throwable
|
||||
... 3 more
|
||||
```
|
||||
|
||||
在错误日志中,你同样也可以使用 `LoggerType` 来指定当前打印日志所用到的方法类型。
|
||||
|
||||
更多用法可参考 [loggerE](api/document?id=loggere-method) 方法。
|
||||
|
||||
## Xposed 模块数据存储功能
|
||||
|
@@ -31,8 +31,78 @@ package com.highcapable.yukihookapi.hook.log
|
||||
|
||||
import android.util.Log
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.YukiHookBridge
|
||||
import de.robv.android.xposed.XposedBridge
|
||||
|
||||
/**
|
||||
* 需要打印的日志类型
|
||||
*
|
||||
* 决定于模块与 (Xposed) 宿主环境使用的打印方式
|
||||
*/
|
||||
enum class LoggerType {
|
||||
/** 仅使用 [Log] */
|
||||
LOGD,
|
||||
|
||||
/**
|
||||
* 仅使用 [XposedBridge.log]
|
||||
*
|
||||
* - ❗只能在 (Xposed) 宿主环境中使用 - 模块环境将不生效
|
||||
*/
|
||||
XPOSEDBRIDGE,
|
||||
|
||||
/**
|
||||
* 分区使用
|
||||
*
|
||||
* (Xposed) 宿主环境仅使用 [XPOSEDBRIDGE]
|
||||
*
|
||||
* 模块环境仅使用 [LOGD]
|
||||
*/
|
||||
SCOPE,
|
||||
|
||||
/**
|
||||
* 同时使用
|
||||
*
|
||||
* (Xposed) 宿主环境使用 [LOGD] 与 [XPOSEDBRIDGE]
|
||||
*
|
||||
* 模块环境仅使用 [LOGD]
|
||||
*/
|
||||
BOTH
|
||||
}
|
||||
|
||||
/**
|
||||
* 向控制台和 [XposedBridge] 打印日志 - 最终实现方法
|
||||
* @param format 日志打印的格式
|
||||
* @param type 日志打印的类型
|
||||
* @param tag 日志打印的标签
|
||||
* @param msg 日志打印的内容
|
||||
* @param e 异常堆栈信息
|
||||
*/
|
||||
private fun baseLogger(format: String, type: LoggerType, tag: String, msg: String, e: Throwable? = null) {
|
||||
/** 打印到 [Log] */
|
||||
fun loggerInLogd() = when (format) {
|
||||
"D" -> Log.d(tag, msg)
|
||||
"I" -> Log.i(tag, msg)
|
||||
"W" -> Log.w(tag, msg)
|
||||
"E" -> Log.e(tag, msg, e)
|
||||
else -> Log.wtf(tag, msg, e)
|
||||
}
|
||||
|
||||
/** 打印到 [XposedBridge.log] */
|
||||
fun loggerInXposed() = runCatching {
|
||||
XposedBridge.log("[$tag][$format]--> $msg")
|
||||
e?.also { XposedBridge.log(it) }
|
||||
}
|
||||
when (type) {
|
||||
LoggerType.LOGD -> loggerInLogd()
|
||||
LoggerType.XPOSEDBRIDGE -> loggerInXposed()
|
||||
LoggerType.SCOPE -> if (YukiHookBridge.hasXposedBridge) loggerInXposed() else loggerInLogd()
|
||||
LoggerType.BOTH -> {
|
||||
loggerInLogd()
|
||||
if (YukiHookBridge.hasXposedBridge) loggerInXposed()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - D
|
||||
* @param msg 日志打印的内容
|
||||
@@ -76,11 +146,10 @@ internal fun yLoggerE(msg: String, e: Throwable? = null, isDisableLog: Boolean =
|
||||
* [XposedBridge] 中的日志打印风格为 [[tag]]「类型」--> [msg]
|
||||
* @param tag 日志打印的标签 - 建议和自己的模块名称设置成一样的 - 默认为 [YukiHookAPI.Configs.debugTag]
|
||||
* @param msg 日志打印的内容
|
||||
* @param type 日志打印的类型 - 默认为 [LoggerType.BOTH]
|
||||
*/
|
||||
fun loggerD(tag: String = YukiHookAPI.Configs.debugTag, msg: String) = runCatching {
|
||||
Log.d(tag, msg)
|
||||
XposedBridge.log("[$tag][D]--> $msg")
|
||||
}
|
||||
fun loggerD(tag: String = YukiHookAPI.Configs.debugTag, msg: String, type: LoggerType = LoggerType.BOTH) =
|
||||
baseLogger(format = "D", type, tag, msg)
|
||||
|
||||
/**
|
||||
* 向控制台和 [XposedBridge] 打印日志 - I
|
||||
@@ -88,11 +157,10 @@ fun loggerD(tag: String = YukiHookAPI.Configs.debugTag, msg: String) = runCatchi
|
||||
* [XposedBridge] 中的日志打印风格为 [[tag]]「类型」--> [msg]
|
||||
* @param tag 日志打印的标签 - 建议和自己的模块名称设置成一样的 - 默认为 [YukiHookAPI.Configs.debugTag]
|
||||
* @param msg 日志打印的内容
|
||||
* @param type 日志打印的类型 - 默认为 [LoggerType.BOTH]
|
||||
*/
|
||||
fun loggerI(tag: String = YukiHookAPI.Configs.debugTag, msg: String) = runCatching {
|
||||
Log.i(tag, msg)
|
||||
XposedBridge.log("[$tag][I]--> $msg")
|
||||
}
|
||||
fun loggerI(tag: String = YukiHookAPI.Configs.debugTag, msg: String, type: LoggerType = LoggerType.BOTH) =
|
||||
baseLogger(format = "I", type, tag, msg)
|
||||
|
||||
/**
|
||||
* 向控制台和 [XposedBridge] 打印日志 - W
|
||||
@@ -100,11 +168,10 @@ fun loggerI(tag: String = YukiHookAPI.Configs.debugTag, msg: String) = runCatchi
|
||||
* [XposedBridge] 中的日志打印风格为 [[tag]]「类型」--> [msg]
|
||||
* @param tag 日志打印的标签 - 建议和自己的模块名称设置成一样的 - 默认为 [YukiHookAPI.Configs.debugTag]
|
||||
* @param msg 日志打印的内容
|
||||
* @param type 日志打印的类型 - 默认为 [LoggerType.BOTH]
|
||||
*/
|
||||
fun loggerW(tag: String = YukiHookAPI.Configs.debugTag, msg: String) = runCatching {
|
||||
Log.w(tag, msg)
|
||||
XposedBridge.log("[$tag][W]--> $msg")
|
||||
}
|
||||
fun loggerW(tag: String = YukiHookAPI.Configs.debugTag, msg: String, type: LoggerType = LoggerType.BOTH) =
|
||||
baseLogger(format = "W", type, tag, msg)
|
||||
|
||||
/**
|
||||
* 向控制台和 [XposedBridge] 打印日志 - E
|
||||
@@ -113,9 +180,7 @@ fun loggerW(tag: String = YukiHookAPI.Configs.debugTag, msg: String) = runCatchi
|
||||
* @param tag 日志打印的标签 - 建议和自己的模块名称设置成一样的 - 默认为 [YukiHookAPI.Configs.debugTag]
|
||||
* @param msg 日志打印的内容
|
||||
* @param e 可填入异常堆栈信息 - 将自动完整打印到控制台
|
||||
* @param type 日志打印的类型 - 默认为 [LoggerType.BOTH]
|
||||
*/
|
||||
fun loggerE(tag: String = YukiHookAPI.Configs.debugTag, msg: String, e: Throwable? = null) = runCatching {
|
||||
Log.e(tag, msg, e)
|
||||
XposedBridge.log("[$tag][E]--> $msg")
|
||||
e?.also { XposedBridge.log(it) }
|
||||
}
|
||||
fun loggerE(tag: String = YukiHookAPI.Configs.debugTag, msg: String, e: Throwable? = null, type: LoggerType = LoggerType.BOTH) =
|
||||
baseLogger(format = "E", type, tag, msg, e)
|
Reference in New Issue
Block a user