Началось все с желания иметь более комфортное средство отладки скриптов чем stdout.printf(), т.к. сначала их в коде расставлять, потом убирать поднадоело. Потом "остапа понесло" и вместо простецкого api под конкретную задачу получилось несложное и универсальное (надеюсь) решение с возможностью настройки форматирования сообщений в зависимости от их типа (debug, info, error), возможностью добавлять новые типы сообщений, блокировать сообщения отдельных типов, задавать свои хранилища сообщений отличные от stdout-а.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, alsemm, Вы писали:
CS>Клёво! Я правда практически и не понял что там делается.
Не понятно как пользоваться или как работает? Если есть конкретные предложения что подправить, чтобы было понятнее (доки, примеры) — welcome, поправлю.
CS>"Приятный внешний вид, компактный, модульный" (С) из рекламы утюга.
Примерно это у меня получилось в первом варианте, все было просто и понятно Только лепил без декораторов — не разбирался как они работают.
А когда добавил возможность изменять формат вывода сообщений, еще всякие полезные вещи оно и распухло. Но юзерский api там довольно простой остался.
Здравствуйте, alsemm, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Здравствуйте, alsemm, Вы писали:
CS>>Клёво! Я правда практически и не понял что там делается. A>Не понятно как пользоваться или как работает? Если есть конкретные предложения что подправить, чтобы было понятнее (доки, примеры) — welcome, поправлю.
Фиг его знает. Представляется что это как-то должно быть проще все сделано.
Ну например разбор формата "%{}" и пляски вокруг него представляются ненужными.
Ну т.е. вполне себе достаточно просто выделить склеивание сообщения в отдельную функцию — кому надо либо поправят её либо динамически заменят. И вообще есть scanf для целей парсинга по шаблону: http://terrainformatica.com/tiscript/Stream.whtm
CS>>"Приятный внешний вид, компактный, модульный" (С) из рекламы утюга. A>Примерно это у меня получилось в первом варианте, все было просто и понятно Только лепил без декораторов — не разбирался как они работают.
Декоротор это просто.
Применение декоратора:
@decname p1 p2 ... pN [funct];
есть фактически вызов
@decname(funct, p1, p2, ... pN);
Сам декоратор это обычная функция только с именем наиняющимся с '@'
function @decname(func, param1, param2, ...)
{
...
return some_other_function;
}
Здравствуйте, c-smile, Вы писали:
CS>Фиг его знает. Представляется что это как-то должно быть проще все сделано.
Всю сложность постарался спрятать внуть, public api старался сделать простым. Поэтому logging.tis — страшный, а код приложения из которого он используется — нет (только в части логирования, конечно ).
CS>Ну например разбор формата "%{}" и пляски вокруг него представляются ненужными.
Это разбор не того формата, который в String.printf-е.
CS>Ну т.е. вполне себе достаточно просто выделить склеивание сообщения в отдельную функцию — кому надо либо поправят её либо динамически заменят. И вообще есть scanf для целей парсинга по шаблону: http://terrainformatica.com/tiscript/Stream.whtm
scanf не совсем то, что нужно в данном случае.
Вот, например такая форматная строка: "${timestamp}" добавляет в каждое сообщение время его создания. Всего предопределено три формата: ${role}, ${type} и ${timestamp}. Для добавления нового формата есть public api. Вот пример использования всех стандартных форматных строк и добавление своего формата:
stdout:Sun,1 Feb 2010 11:21:02 UTC 71 sample DEBUG:Hello
stdout:Sun,1 Feb 2010 11:21:02 UTC 68 sample INFO:Hello
stdout:Sun,1 Feb 2010 11:21:02 UTC 28 sample WARN:Hello
Добавил еще формат ${msg} — placeholder для юзерского сообщения. Можно этот формат в строке форматирования не указывать, тогда сообщение будет просто дописываться после строки, которая получается из форматной строки, т.е. форматные строки "${role} message=${msg}" и "${role} message=" эквивалентны.
stdout:Sun,1 Feb 2010 12:02:33 UTC 33 sample DEBUG [Hello]
stdout:Sun,1 Feb 2010 12:02:33 UTC 71 sample INFO [Hello]
stdout:Sun,1 Feb 2010 12:02:33 UTC 54 sample WARN [Hello]