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

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