Debug Logs
Log is the most important part of the debugging process,
YukiHookAPI
encapsulates a set of stable and efficient debugging log functions for developers.
Normal Logs
You can call YLog.debug
, YLog.info
, YLog.warn
to print normal logs to the console.
The usage method is as follows.
The following example
YLog.debug(msg = "This is a log")
At this ponit, YukiHookAPI
will call android.util.Log
and log function in (Xposed) Host environment to print this log at the same time.
The default TAG
of the log is the value you set in YLog.Configs.tag
.
You can also customize this value dynamically, but it is not recommended to modify TAG
easily to prevent logs from being filtered.
The following example
YLog.debug(tag = "YukiHookAPI", msg = "This is a log")
The printed result is as shown below.
The following example
[YukiHookAPI][D][host package name] This is a log
You can also use YLog.EnvType
to customize the type of log printing.
You can choose to use android.util.Log
or the log function in the (Xposed) Host environment to print logs.
The default type is YLog.EnvType.BOTH
, which means that both methods are used to print logs.
For example we only use android.util.Log
to print logs.
The following example
YLog.debug(tag = "YukiHookAPI", msg = "This is a log", env = YLog.EnvType.LOGD)
Or just use the log function that in the (Xposed) Host environment to print the log, this method can only be used in the (Xposed) Host environment.
The following example
YLog.debug(tag = "YukiHookAPI", msg = "This is a log", env = YLog.EnvType.XPOSED_ENVIRONMENT)
If you want to intelligently distinguish the (Xposed) Host environment from the Module environment, you can write it in the following form.
The following example
YLog.debug(tag = "YukiHookAPI", msg = "This is a log", env = YLog.EnvType.SCOPE)
In this way, the API will intelligently select the specified method type to print this log in different environments.
Tips
For more functions, please refer to YLog.debug, YLog.info and YLog.warn methods.
Error Logs
You can call YLog.error
to print E
level logs to the console.
The usage method is as follows.
The following example
YLog.error(msg = "This is an error")
The error log is the highest level, regardless of whether you have filtered only E
level logs.
For error-level logging, you can also append an exception stack.
// Assume this is the exception that was thrown
val throwable = Throwable(...)
// Print log
YLog.error(msg = "This is an error", e = throwable)
The printed result is as shown below.
The following example
[YukiHookAPI][E][host package name] This is an error
At the same time, the log will help you print the entire exception stack.
The following example
java.lang.Throwable
at com.demo.Test.<init>(...)
at com.demo.Test.doTask(...)
at com.demo.Test.stop(...)
at com.demo.Test.init(...)
at a.a.a(...)
... 3 more
In the error log, you can also use YLog.EnvType
to specify the method type currently used to print the log.
Tips
For more functions, please refer to the YLog.error method.
Save Logs and Custom Elements
You can save all currently printed logs directly to a file using the YLog.saveToFile
method.
The following example
// Please note
// The saved file path must have read and write permissions
// Otherwise an exception will be thrown
YLog.saveToFile("/sdcard/Documents/debug_log.log")
You can also use YLog.contents
to get all the log file contents that have been printed so far.
The following example
// Get the contents of all log files that have been printed so far
val fileContent = YLog.contents
If you need an array of real-time log data structures, you can directly get the content of YLog.inMemoryData
.
The following example
// Get the currently printed real-time log data structure array
YLog.inMemoryData.forEach {
it.timestamp // Get timestamp
it.time // Get UTC time
it.priority // Get priority
it.msg // Get message
it.throwable // Get exception
// ...
}
If you want to format or save the obtained custom log data to a file, you only need to use the following method.
The following example
// Assume this is the custom log data you get
val data: List<YLogData>
// Format log data to String
val dataString = YLog.contents(data)
// Save log data to file
// Please note
// The saved file path must have read and write permissions
// Otherwise an exception will be thrown
YLog.saveToFile("/sdcard/Documents/debug_log.log", data)
Pay Attention
You need to enable YLog.Configs.isRecord to get the contents of YLog.inMemoryData.
The obtained log data is isolated from each other in the Host App and the Module App's process.
You can only get the corresponding log data in the corresponding process.
If you need to get these log data in real time anywhere, please refer to Xposed Module and Host Channel, Register Module App's Activity.
If you only want to get log data in real time through Module App or Host App, Please refer to the optional solution YukiHookDataChannel.obtainLoggerInMemoryData method.
You can also use YLog.Configs.elements
to customize the elements that debug logs display externally.
This function requires YukiHookAPI.Configs
to be configured in onInit
of the Hook entry class.
The following example
override fun onInit() = configs {
debugLog {
// ...
elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
}
// ...
}
Tips
For more functions, please refer to YLog.inMemoryData, YLog.contents, YLog.contents, YLog.saveToFile methods and YLog.Configs.