Глобальный регистратор в Котлине - PullRequest
0 голосов
/ 21 января 2019

В настоящее время я работаю над относительно крупным проектом в Котлине. Я хотел бы реализовать метод ведения журналов, однако по многим причинам (в частности, потому что мне нужен очень специфический тип управления часами и широкий набор приложений, которые будут непросто реализовать в других средах), я не могу использовать типичные средства ведения журналов, такие как Log4J.

Я хотел бы - если это возможно - иметь возможность регистрировать все классы без явной передачи им объекта Logger. Мне нравится схема журналирования, которую предоставляет Kotlin-logging (с использованием объекта-компаньона), но она использует существующие фреймворки, что запрещено.

В некотором смысле, мне нужен какой-то способ определения глобального регистратора. Любые рекомендации? Синглтоны и сопутствующие объекты, вероятно, являются частью решения, но я действительно не понимаю, как создать что-то удобное.

Примечание. Мне нужен один из приложений для записи в ZMQ, поэтому я бы предпочел не создавать экземпляры нескольких регистраторов.

1 Ответ

0 голосов
/ 21 января 2019

Вы можете просто определить приватный val верхнего уровня для регистратора и получить к нему доступ из функций в том же файле:

// Logging.kt
private class Logger(...) { ... }

private val logger = Logger(...)

fun log_debug(message: String) = logger.debug(message) 
// etc.

То, что это не обеспечивает, является именем класса для регистратора, но это должно быть просто объединено со схемой регистрации Kotlin, которую Вы упоминаете, чтобы исправить это при желании.

...