From e65d3302c6fe4a1648e03eede112122843f6b4fc Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Mon, 13 Apr 2026 21:57:10 +0800 Subject: [PATCH] feat(trace): support create advice for method with no return value --- .../framework/agent/log/LogAdviceProvider.kt | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt index 6f75e98b..86c1caf4 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt @@ -30,7 +30,7 @@ object LogAdviceProvider : Configurable, ConfigRegistration inputType: Class, outputType: Class, meta: Map = emptyMap(), - invoker: (I) -> O + invoker: (I) -> O? ): LogAdvice { return LogAdvice( adviceTarget = adviceTarget, @@ -61,7 +61,7 @@ object LogAdviceProvider : Configurable, ConfigRegistration class LogAdvice internal constructor( val adviceTarget: String, - private val invoker: (I) -> O, + private val invoker: (I) -> O?, private val adviceMeta: AdviceMeta ) { @@ -69,7 +69,7 @@ class LogAdvice internal constructor( private val log = LoggerFactory.getLogger(LogAdvice::class.java) } - fun invoke(input: I): Result { + fun invoke(input: I): Result { val startAt = ZonedDateTime.now() return try { logEnter(input) @@ -92,7 +92,7 @@ class LogAdvice internal constructor( } } - private fun logOutput(output: O) { + private fun logOutput(output: O?) { when (LogAdviceProvider.logLevel) { AdviceLoggingConfig.LogLevel.NONE -> return AdviceLoggingConfig.LogLevel.ABSTRACT -> log.info("${adviceMeta.adviceTarget} ended.") @@ -100,7 +100,7 @@ class LogAdvice internal constructor( try { log.info("${adviceMeta.adviceTarget} ended with output: ${JSONObject.toJSONString(output)}") } catch (_: Exception) { - log.info("${adviceMeta.adviceTarget} ended with output: ${output.toString()}, which cannot be printed as json string.") + log.info("${adviceMeta.adviceTarget} ended with output: ${output ?: "null"}, which cannot be printed as json string.") } } } @@ -120,17 +120,9 @@ class LogAdvice internal constructor( } } - private fun createResult(input: I, output: O, startAt: ZonedDateTime) { - val inputSerialized = try { - JSONObject.toJSONString(input) - } catch (_: JSONException) { - input.toString() - } - val outputSerialized = try { - JSONObject.toJSONString(output) - } catch (_: JSONException) { - output.toString() - } + private fun createResult(input: I, output: O?, startAt: ZonedDateTime) { + val inputSerialized = serializeRequired(input) + val outputSerialized = serializeNullable(output) LogAdviceProvider.record( AdviceResult.Normal( adviceTarget, @@ -143,11 +135,7 @@ class LogAdvice internal constructor( } private fun createUnexpectedResult(input: I, throwable: Throwable, startAt: ZonedDateTime) { /* 落盘 */ - val inputSerialized = try { - JSONObject.toJSONString(input) - } catch (_: JSONException) { - input.toString() - } + val inputSerialized = serializeRequired(input) LogAdviceProvider.record( AdviceResult.Unexpected( adviceTarget, @@ -159,6 +147,26 @@ class LogAdvice internal constructor( ) ) } + + private fun serializeRequired(value: Any?): String { + return try { + JSONObject.toJSONString(value) + } catch (_: JSONException) { + value?.toString() ?: "null" + } + } + + private fun serializeNullable(value: Any?): String? { + return if (value == null) { + null + } else { + try { + JSONObject.toJSONString(value) + } catch (_: JSONException) { + value.toString() + } + } + } } data class AdviceMeta( @@ -191,7 +199,7 @@ sealed class AdviceResult { override val input: String, override val startAt: ZonedDateTime, override val adviceMeta: AdviceMeta, - val output: String, + val output: String?, ) : AdviceResult() { override val type: Type = Type.NORMAL }