Added LoggerType function in LoggerFactory

This commit is contained in:
2022-07-27 22:48:19 +08:00
parent 84b21c0c47
commit e557133841
3 changed files with 216 additions and 21 deletions

View File

@@ -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` 异常信息,将打印异常堆栈。

View File

@@ -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 模块数据存储功能

View File

@@ -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)