# LoggerFactory - kt | Yuki Hook API
An efficient Kotlin version of the Xposed Hook API

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

# # LoggerFactory - kt

Change Records

`v1.0` `first`

Function Illustrate

> 这是 `YukiHookAPI` 的日志封装类，可实现同时向 `Logcat` 和 `XposedBridge.log` 打印日志的功能。

## # LoggerType - class

    enum class LoggerType

Change Records

`v1.1.0` `added`

Function Illustrate

> 需要打印的日志类型。

决定于模块与 (Xposed) 宿主环境使用的打印方式。

### # LOGD - enum

    LOGD

Change Records

`v1.1.0` `added`

Function Illustrate

> 仅使用 `android.util.Log`。

### # XPOSEDBRIDGE - enum

    XPOSEDBRIDGE

Change Records

`v1.1.0` `added`

Function Illustrate

> 仅使用 `XposedBridge.log`。

Pay Attention

只能在 (Xposed) 宿主环境中使用，模块环境将不生效。

### # SCOPE - enum

    SCOPE

Change Records

`v1.1.0` `added`

Function Illustrate

> 分区使用。

(Xposed) 宿主环境仅使用 `XPOSEDBRIDGE`。

模块环境仅使用 `LOGD`。

### # BOTH - enum

    BOTH

Change Records

`v1.1.0` `added`

Function Illustrate

> 同时使用。

(Xposed) 宿主环境使用 `LOGD` 与 `XPOSEDBRIDGE`。

模块环境仅使用 `LOGD`。

## # YukiLoggerData - class

    class YukiLoggerData internal constructor(
        var timestamp: Long,
        var time: String,
        var tag: String,
        var priority: String,
        var packageName: String,
        var userId: Int,
        var msg: String,
        var throwable: Throwable?
    )

Change Records

`v1.1.2` `added`

Function Illustrate

> 调试日志数据实现类。

## # YukiHookLogger - object

    object YukiHookLogger

Change Records

`v1.1.0` `added`

Function Illustrate

> 调试日志实现类。

### # inMemoryData - field

    val inMemoryData: HashSet<YukiLoggerData>

Change Records

`v1.1.2` `added`

Function Illustrate

> 当前全部已记录的日志数据。

### # contents - field

    val contents: String

Change Records

`v1.1.0` `added`

Function Illustrate

> 获取当前日志文件内容。

如果当前没有已记录的日志会返回空字符串。

### # clear - method

    fun clear()

Change Records

`v1.1.0` `added`

Function Illustrate

> 清除全部已记录的日志。

你也可以直接获取 inMemoryData 来清除。

### # saveToFile - method

    fun saveToFile(fileName: String)

Change Records

`v1.1.0` `added`

Function Illustrate

> 保存当前日志到文件。

若当前未开启 `Configs.isRecord` 或记录为空则不会进行任何操作。

日志文件会追加到 `fileName` 的文件结尾，若文件不存在会自动创建。

Pay Attention

文件读写权限取决于当前宿主已获取的权限。

### # Configs - object

    object Configs

Change Records

`v1.1.0` `added`

Function Illustrate

> 配置 `YukiHookLogger`。

#### # TAG - field

    const val TAG: Int

Change Records

`v1.1.0` `added`

Function Illustrate

> 标签。

#### # PRIORITY - field

    const val PRIORITY: Int

Change Records

`v1.1.0` `added`

Function Illustrate

> 优先级。

#### # PACKAGE_NAME - field

    const val PACKAGE_NAME: Int

Change Records

`v1.1.0` `added`

Function Illustrate

> 当前宿主的包名。

#### # USER_ID - field

    const val USER_ID: Int

Change Records

`v1.1.0` `added`

Function Illustrate

> 当前宿主的用户 ID (主用户不显示)。

#### # isEnable - field

    var isEnable: Boolean

Change Records

`v1.1.0` `added`

Function Illustrate

> 是否启用调试日志的输出功能。

关闭后将会停用 `YukiHookAPI` 对全部日志的输出。

但是不影响当你手动调用下面这些方法输出日志。

`loggerD`、`loggerI`、`loggerW`、`loggerE`。

当 `isEnable` 关闭后 `YukiHookAPI.Configs.isDebug` 也将同时关闭。

#### # isRecord - field

    var isRecord: Boolean

Change Records

`v1.1.0` `added`

Function Illustrate

> 是否启用调试日志的记录功能。

开启后将会在内存中记录全部可用的日志和异常堆栈。

需要同时启用 isEnable 才能有效。

Pay Attention

过量的日志可能会导致宿主运行缓慢或造成频繁 GC。

开启后你可以调用 YukiHookLogger.saveToFile 实时保存日志到文件或使用 YukiHookLogger.contents 获取实时日志文件。

#### # tag - field

    var tag: String

Change Records

`v1.1.0` `added`

Function Illustrate

> 这是一个调试日志的全局标识。

默认文案为 `YukiHookAPI`。

你可以修改为你自己的文案。

#### # elements - method

    fun elements(vararg item: Int)

Change Records

`v1.1.0` `added`

Function Illustrate

> 自定义调试日志对外显示的元素。

只对日志记录和 `XposedBridge.log` 生效。

日志元素的排列将按照你在 `item` 中设置的顺序进行显示。

你还可以留空 `item` 以不显示除日志内容外的全部元素。

可用的元素有：`TAG`、`PRIORITY`、`PACKAGE_NAME`、`USER_ID`。

Function Example

打印的日志样式将按照你设置的排列顺序和元素内容进行。

> The following example

    elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)

以上内容定义的日志将显示为如下样式。

> The following example

    [YukiHookAPI][D][com.demo.test][999]--> This is a log

如果我们调整元素顺序以及减少个数，那么结果又会不一样。

> The following example

    elements(PACKAGE_NAME, USER_ID, PRIORITY)

以上内容定义的日志将显示为如下样式。

> The following example

    [com.demo.test][999][D]--> This is a log

## # loggerD - method

    fun loggerD(tag: String, msg: String, type: LoggerType)

Change Records

`v1.0` `first`

`v1.1.0` `modified`

新增 `type` 参数

Function Illustrate

> 向 `Logcat` 和 `XposedBridge` 打印日志，级别 `D`。

`tag` 的默认参数为 `YukiHookAPI.Configs.debugTag`，你可以进行自定义。

## # loggerI - method

    fun loggerI(tag: String, msg: String, type: LoggerType)

Change Records

`v1.0` `first`

`v1.1.0` `modified`

新增 `type` 参数

Function Illustrate

> 向 `Logcat` 和 `XposedBridge` 打印日志，级别 `I`。

`tag` 的默认参数为 `YukiHookAPI.Configs.debugTag`，你可以进行自定义。

## # loggerW - method

    fun loggerW(tag: String, msg: String, type: LoggerType)

Change Records

`v1.0` `first`

`v1.1.0` `modified`

新增 `type` 参数

Function Illustrate

> 向 `Logcat` 和 `XposedBridge` 打印日志，级别 `W`。

`tag` 的默认参数为 `YukiHookAPI.Configs.debugTag`，你可以进行自定义。

## # loggerE - method

    fun loggerE(tag: String, msg: String, e: Throwable?, type: LoggerType)

Change Records

`v1.0` `first`

`v1.1.0` `modified`

新增 `type` 参数

Function Illustrate

> 向 `Logcat` 和 `XposedBridge` 打印日志，级别 `E`，可携带 `e` 异常信息，将打印异常堆栈。

`tag` 的默认参数为 `YukiHookAPI.Configs.debugTag`，你可以进行自定义。