说我有一个日志记录功能:
fun log(message: String)
不幸的是,该函数会在协程中和协程外部被调用。对于协程,我想记录来自协程上下文的其他信息(例如,协程的名称)。
我该如何实现?
这些是我的想法,但我没有解决办法:
log
内部是否存在于协程中并得到coroutineContext
。这可能吗?log
版本,例如log
和logSuspend
。但是,我如何确保正确的人被呼叫?如果我在suspend
内,则不会阻止我意外地致电log
。此外,我可能会定期提供帮助功能。应该叫哪个?ThreadLocal
可以用coroutineContext
放在ThreadLocal
里面,但是如何确保它保持最新状态?答案 0 :(得分:0)
以某种方式找出日志中是否包含在协程中并获取 coroutineContext。这可能吗?
我认为没有很好的解决方案。
我将创建两个log
函数,第一个用于一般用途,第二个-在CoroutineScope
上用于协程的扩展函数:
fun log(message: String) {...}
fun CoroutineScope.log(message: String) {
//here you can access coroutineContext
}
如果您从协程调用log
函数,如下所示:
GlobalScope.launch {
log("CoroutineScope.log")
}
扩展功能将被调用,您将可以访问 coroutineContext 。
注意:不建议使用 GlobalScope ,它仅用于演示目的。