EPCL 0.0.0.5: rewritten

Модераторы: hinst, Модераторы

EPCL 0.0.0.5: rewritten

Сообщение hinst » 07.08.2011 12:37:34

Недавно я начал работу над одним масштабным проектом на паскале, в связи с чем возобновил работу над своей библиотекой EPCL. Возобновление работы произошло путём полного стирания того, что было и написанием всего заново.

теперь исходники я заливаю на GitHub: https://github.com/hinst/EPCL, там на странице есть такая замечательная кнопочка "Download", которая позволяет все их разом откачать.
На данный момент я запилил только модули для лога. Теперь они совсем не такие, как были, а сделаны по типу log4j

Собственно, получить представление о том, как оно теперь всё запилено, можно из этого небольшого примера:

Код: Выделить всё
program log_demo_project;

{$mode objfpc}{$H+}

uses
  Classes, log_unit, log_appenders;

{$R *.res}

type

  { TMy }

  TMy = class
    constructor Create;
  private
    log: ILogClient;
  public
    procedure test;
    destructor Destroy; override;
  end;

var
  logman: TLogManager;

{ TMy }

constructor TMy.Create;
begin
  inherited Create;
  log:=logman.getLogClient(self);
end;

procedure TMy.test;
begin
  log.fatal('Fatal error');
  log.error('Error');
  log.info('Info');
  log.debug('Debug');
  log.trace('Trace');
  log.m(66, 'Custom');
end;

destructor TMy.Destroy;
begin
  log.info('Destroyed.');
  inherited Destroy;
end;

type

  { TMyAppender }

  TMyAppender = class(TLogAppender, ILogAppender)
    function appendMessage(const aMessage: PLogMessage): boolean;
  end;

{ TMyAppender }

function TMyAppender.appendMessage(const aMessage: PLogMessage): boolean;
begin
  if aMessage^.kind <= TLog.error then
    WriteLN('  [Application panic]');
end;

var
  my: TMy;

begin
  logman:=TLogManager.Create(nil);
  logman.addAppender(TWritelnLogAppender);
  logman.addAppender(TFileLogAppender.Create('log.text'));
  logman.addAppender(TMyAppender);
  my:=TMy.Create;
  my.test;
  my.Free;
  logman.getLogClient(nil).info('Bye.');
  logman.Free;
end.


Смотреть модуль: https://github.com/hinst/EPCL/blob/master/log_unit.pas

:arrow: Центральный объект - TLogManager, он должен быть, по идее, один на всё приложение
:arrow: К нему пришпиливаются объекты, которые будут записывать все сообщения. Они реализовывать интерфейс ILogAppender, в котором надо перекрыть единственный метод - appendMessage(...). Работает подсчёт ссылок, и если вы руками не держите указателей на свой аппендер, то он освободится тогда же, когда и TLogManager, то есть, вручную ни один аппендер освобождать не надо.
:arrow: От экземпляра TLogManager'а можно брать методом getLogClient(тут указывать self) клиенты лога. Они тоже интерфейсы. опять же, работает подсчёт ссылок, ни у кого, кроме вашего объекта, который захотел пописать в лог, указателей после вызова getLogClient не остаётся. То есть, опять же, освобождать клиента лога вручную не надо, он освобождается при смерти писавшего в лог объекта. Всё это я проверял, что так оно всё и работает.

Короче, в сравнении с той схемой, которая была у меня раньше, стало, по-моему, намного лучше.

Вкладываю в сообщение архив с библиотекой, в котором модули, связанные с логгированием, точно работают. Пример использования модулей для лога тоже там лежит, он в подпапке examples/log_demo.

Вот ещё диаграмма, которая как бэ символизирует структуру модуля log_unit.pas:
Изображение

Изображение
Вложения
hinst-EPCL.zip
Extended Pascal Component Library 0.0.0.5 with logging features [at 2011.08.07]
(136.11 КБ) Скачиваний: 358
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 782
Зарегистрирован: 12.04.2008 18:32:38

Re: EPCL 0.0.0.5: rewritten

Сообщение Sash0k » 08.08.2011 17:46:34

спасибо.
А в этом log4j временные метки есть? Без них нельзя же, по идее.
У меня сейчас ведутся логи типа:
Код: Выделить всё
[dd.mm hh:mm:ss,000{msec}]: some text
Sash0k
новенький
 
Сообщения: 43
Зарегистрирован: 19.01.2009 11:39:27
Откуда: Вятка - Киров

Re: EPCL 0.0.0.5: rewritten

Сообщение hinst » 11.08.2011 00:24:22

в log4j для java есть, а у меня нету :shock:
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 782
Зарегистрирован: 12.04.2008 18:32:38


Вернуться в Extended Pascal Component Library

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru