Spec-Zone.ru › Pony

Пакет 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API