Пакет Logger
Предоставляет базовые средства ведения журнала. В большинстве случаев будет использоваться класс StringLogger. При создании он принимает 2 параметра и необязательный 3-й:
- LogLevel ниже которого вывод не будет регистрироваться
- OutStream для записи журнала
- Необязательный LogFormatter
Если вам нужно регистрировать произвольные объекты, обратитесь к ObjectLogger[A], который может регистрировать произвольные объекты, если вы предоставите лямбда-функцию для преобразования из A в String.
Философия API
API для использования Logger пытается придерживаться философии Pony: во-первых, быть корректным, а во-вторых, стремиться к производительности. Один из способов, которым ведение журнала может замедлить вашу систему, заключается в необходимости оценивать выражения, которые будут регистрироваться или нет (в зависимости от уровня ведения журнала). Например:
logger.log(Warn, name + ": " + reason)
построит новую строку независимо от того, будем ли мы в итоге регистрировать сообщение или нет.
API Logger использует краткое замыкание boolean для избежания этого.
logger(Warn) and logger.log(name + ": " + reason)
не будет оценивать выражение, которое нужно записать в журнал, пока уровень журнала Warn не будет равен или выше общего уровня журнала для нашего ведения журнала. Это максимально приближает к нулевой стоимости для элементов, которые в итоге не будут записаны в журнал.
Примеры программ
String Logger
Следующая программа выведет 'my warn message' и 'my error message' в стандартный вывод (STDOUT) в стандартном формате журнала.
use "logger"
actor Main
new create(env: Env) =>
let logger = StringLogger(
Warn,
env.out)
logger(Fine) and logger.log("my fine message")
logger(Info) and logger.log("my info message")
logger(Warn) and logger.log("my warn message")
logger(Error) and logger.log("my error message")
Logger[A]
Следующая программа выведет '42' в стандартный вывод (STDOUT) в стандартном формате журнала.
use "logger"
actor Main
new create(env: Env) =>
let logger = Logger[U64](Fine, env.out, {(a) => a.string() })
logger(Error) and logger.log(U64(42))
Настройка форматирования ваших журналов
Пакет Logger предоставляет интерфейс для форматирования журналов. Если вы хотите переопределить стандартное форматирование, вы можете создать объект, который реализует:
interface val LogFormatter
fun apply(
msg: String,
file_name: String,
file_linenum: String,
file_linepos: String): String
Это может быть класс или, поскольку интерфейс содержит только один метод apply, также может быть лямбда-функция.
Общедоступные типы
- тип LogLevel
- примитив Fine
- примитив Info
- примитив Warn
- примитив Error
- класс Logger
- примитив StringLogger
- интерфейс LogFormatter
- примитив DefaultLogFormatter
© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/logger--index