Глобальный регистратор в Котлине
В настоящее время я работаю над относительно крупным проектом в Котлине. Я хотел бы реализовать метод ведения журналов, однако по многим причинам (в частности, потому что мне нужен очень специфический тип управления часами и широкий набор приложений, которые будут непросто реализовать в других средах), я не могу использовать типичные средства ведения журналов, такие как Log4J.
Я хотел бы - если это возможно - иметь возможность вести журнал из всех классов без явной передачи им объекта Logger. Мне нравится схема ведения журнала, которую предоставляет Kotlin-logging (с использованием объекта-компаньона), но она использует существующие платформы, что не требуется.
В некотором смысле, мне нужен какой-то способ определения глобального регистратора. Любые рекомендации? Синглтоны и сопутствующие объекты, вероятно, являются частью решения, но я не совсем понимаю, как создать что-то удобное.
Примечание. Мне нужен один из приложений для записи в ZMQ, поэтому я бы предпочел не создавать экземпляры нескольких регистраторов.
1 ответ
Вы можете просто определить приватный val верхнего уровня для регистратора и получить к нему доступ из функций в том же файле:
// Logging.kt
private class Logger(...) { ... }
private val logger = Logger(...)
fun log_debug(message: String) = logger.debug(message)
// etc.
То, что это не обеспечивает, является именем класса для регистратора, но это должно быть легко объединено со схемой регистрации Kotlin, которую Вы упоминаете, чтобы исправить это при желании.