+ Добавил действия: + Выделение в верхний регистр + Выделение в нижний регистр + Выделение в нормальный регистр + Выравнять по равно + Выравнять по первой запятой + Выравнять по выбранному значению + Очистить модуль (убирает комментарии (исключения в скрипте), лишние пустые строки (оставляет только 1 пустую), убирает пробелы в конце строк) + Убрать пробелы на конце строк * Вынес действия по хоткеям в отдельный файл actions.ahk * Стабилизировал блок навигации по метаданным * Мелкие правки в других блоках
Логирование в стиле log4j
Библиотека предназначена для удобного вывода сообщений в привязке к их "уровням важности"
Функционал logos не повторяет полностью log4j, а, скорее, берет из него какие-то аспекты поведения.
Использование
Именованные журналы сообщений (Логи)
Каждый лог имеет собственное имя, по которому он может быть идентифицирован. Имена логов глобально видимы и любой из них может быть получен по имени лога.
Для того, чтобы начать логирование, требуется вызвать метод ПолучитьЛог модуля Логирование
Лог = Логирование.ПолучитьЛог("oscript.app.messages");
Соглашение об именовании
Принята следующая схема именования логов:
область.класс_приложения.имя_лога
- Область - это произвольное имя, определяющее некую совокупность возможных логов. Часто, в качестве области используется имя поставщика приложения, либо имя набора библиотек. Для всех пакетов, входящих в oscript-library используется имя области "oscript". Приложения, создаваемые, например, в рамках гипотетического проекта "Аврора" могут использовать область "aurora".
- Класс_приложения - это разделитель на тип модуля - библиотека, или приложение. Например, библиотечный пакет "cmdline" использует класс
lib, а консольное приложение "gitsync" - класс 'app' - Имя_лога - это, собственно, идентификатор журнала.
Примечание
В отличие от log4j логи в logos не являются иерархическими, но в перспективе могут стать таковыми.
Уровни логирования
Существует 5 уровней важности сообщений:
- Отладка
- Информация
- Предупреждение
- Ошибка
- Критичная ошибка
Для каждого из уровней logos предоставляет отдельный метод, который выводит сообщение с данным уровнем важности. В процессе эксплуатации приложения для каждого из логов можно устанавливать уровень выводимых сообщений. Например, если установлен уровень "Предупреждение", то выводиться будут только предупреждения или более важные сообщения (Ошибка, КритичнаяОшибка)
Лог.УстановитьУровень(УровниЛога.Отладка) // выводить все, в т.ч. отладочные сообщения
По умолчанию установлен уровень "Информация".
Пример использования
Лог = Логирование.ПолучитьЛог("oscript.test.levels");
Лог.УстановитьУровень(УровниЛога.Ошибка);
Лог.Отладка("Переменная А = 7");
Лог.Информация("Переменная А = 7");
Лог.Ошибка("Неверно указан путь к файлу!");
Способы вывода (appenders)
Приложение выводит сообщения в лог, а сам лог может выводиться в произвольное место. За конкретную реализацию вывода отвечает Способ вывода. В Log4j это называется appender.
В составе logos поставляется 2 способа вывода - в консоль и в файл. Причем, способы вывода - это список, т.е. лог может писаться в несколько мест одновременно.
ФайлЖурнала = Новый ВыводЛогаВФайл
ФайлЖурнала.ОткрытьФайл("/var/log/oscript.test.log");
Лог.ДобавитьСпособВывода(ФайлЖурнала);
Лог.Информация("Это строка лога");
Лог.Закрыть(); // при включении логирования в файл рекомендуется закрывать лог.
Особенности добавления Способов вывода
При создании лога в него автоматически будет добавлен способ вывода ВыводЛогаВКонсоль. Однако, если вручную в лог будет добавлен другой способ вывода, то "автоспособ" будет удален. Иными словами, пример кода выше будет писать только в файл, т.к. консольный вывод при ручном добавлении способа вывода будет отключен.
Форматирование сообщений
За форматирование выводимых сообщений отвечает Раскладка. Раскладка по умолчанию форматирует сообщения следующим образом:
УРОВЕНЬСООБЩЕНИЯ - ТекстСообщения
Раскладка - это класс, реализующий метод Форматировать(Знач Уровень, Знач Сообщение). Установить собственную раскладку можно методом "УстановитьРаскладку".
Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт
Возврат СтрШаблон("%1: %2 - %3", ТекущаяДата(), УровниЛога.НаименованиеУровня(Уровень), Сообщение);
КонецФункции
Лог.УстановитьРаскладку(ЭтотОбъект);
В приведенной раскладке в сообщение помимо уровня и текста будет добавлено текущая дата.