Глобальный регистратор в Котлине

В настоящее время я работаю над относительно крупным проектом в Котлине. Я хотел бы реализовать метод ведения журналов, однако по многим причинам (в частности, потому что мне нужен очень специфический тип управления часами и широкий набор приложений, которые будут непросто реализовать в других средах), я не могу использовать типичные средства ведения журналов, такие как 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, которую Вы упоминаете, чтобы исправить это при желании.

Другие вопросы по тегам