Я использую «LazyLogging
» и настроил «logback
» для печати класса и номера строки оператора print.
Я хочу создать небольшую функцию-обертку в моем коде, которая печатаетнекоторый контекст наряду с обычным сообщением.Но поскольку фактический «вызывающий» из функции log находится внутри этой новой функции-оболочки, я теряю свой класс и номер строки истинного оператора print.
Например:
class Foo(context: Context) extends LazyLogging {
...
...
logger.info("some message") // assume this is line "41"
...
...
}
полученный консольный журнал выглядит следующим образом:
14:40:39 INFO [Foo:41] some message
Но, скажем, я создаю небольшую оболочку, которая должна печатать «контекст» с каждым оператором журнала:
class Foo(context: Context) extends LazyLogging {
...
...
def logWithContext(msg: String) = logger.info(s"[$context] $msg") // assume this is line 5
...
...
logWithContext("some message") // assume this is line "41"
...
...
logWithContext("a different message") // assume this is line "51"
...
...
}
Но теперь получилась консольвсегда появляется в строке 5
14:40:39 INFO [Foo:5] some message
14:40:39 INFO [Foo:5] a different message
Я предполагаю, что мне нужно вернуть "не примененную" функцию вызывающей стороне и применить в их контексте (в их строке), или какой-то другой вид макроса (такойкак те, что я сделал бы в старой школе C / C ++ и т. д., фиксируя контекст вызывающей стороны)