У меня есть программа, которая должна обрабатывать файлы в пакетном режиме. Вместо того, чтобы показывать ошибки в окнах сообщений на экране (что приостанавливает выполнение программы), мне нужно показать эти сообщения об ошибках в журнале, который пользователь может видеть по мере выполнения программы.Разработка системы регистрации
Так что я не нужен журнал программа-исполнение, как этот Which logging library is better?
Я использую сейчас что-то производное от TRichEdit. В основном, богатые редактирования с несколькими дополнительными методами, как AddError (ов), AddWarn (ов), AddVerbose (ов) и т.д.
TRichLog = class(TMyRichEdit)
private
protected
Indent: Integer; { Indent new added lines x spaces }
public
constructor Create(AOwner: TComponent); override;
procedure AddBold (CONST Mesaj: string);
procedure AddMsg (CONST Mesaj: string);
procedure AddMsgLvl (CONST Mesaj: string; MsgType: Integer);
procedure AddColorMsg (CONST Mesaj: string; Culoare: TColor);
procedure AddVerb (CONST Mesaj: string);
procedure AddHint (CONST Mesaj: string);
procedure AddInfo (CONST Mesaj: string);
procedure AddPath (CONST Mesaj: string);
procedure AddWarn (CONST Mesaj: string);
procedure AddError (CONST Mesaj: string);
procedure AddMsgInt (CONST Mesaj: string; i: Integer); { Adds a message text followed by an integer }
procedure AddInteger (CONST i: Integer);
procedure AddFromFile (CONST FileName: string; MsgType: Integer); { Reads lines from the specified file and adds them to the log using the specified color. }
procedure AddEmptyRow;
procedure AddDateStamp;
procedure Append (RamLog: TObject); { RamLog will be typecased to TRamLog }
procedure SaveAsRtf (CONST FullPath: string);
procedure AppendToFile(CONST FullPath: string);
function VerbosityAsString: string;
published
property InsertTime: Boolean read FInsertTime write FInsertTime default FALSE;
property InsertDate: Boolean read FInsertDate write FInsertDate default FALSE;
property AutoScroll: Boolean read FAutoScroll write FAutoScroll default TRUE; { Automatically scroll to show the last line }
property Verbosity : Integer read FVerbosity write FVerbosity default vHints;
property OnLogError: TNotifyEvent read FLogError write FLogError; { Can be used to inform the application to automatically switch to log when an error is listed }
property OnLogWarn : TNotifyEvent read FLogWarn write FLogWarn;
Но я хотел бы, чтобы пользователь динамически фильтровать контекст. Например, пользователь должен иметь возможность скрывать все сообщения Verbose и сохранять только предупреждения и ошибки. И если пользователь передумает, верните подробные сообщения.
Можно ли отфильтровать (существующий) текст в RichEdit таким образом? Если нет, я хотел бы получить несколько указаний о том, как переопределить его. Я думаю о написании собственного формата для сохранения строк/сообщений. Например:
не может открыть файл, # MsgErr, # Жирный
я бы TStringGrid, чтобы отобразить только ограниченное количество строк (те, которые видны на экране). Таким образом, я мог бы иметь миллионы строк без фактического отображения их всех на экране. Время, затрачиваемое на разбор, не имеет значения, так как мне нужно только разобрать видимые строки.
Требования:
- Поддержка цветов, как в RichEdit (красный на наличие ошибок и т.д.)
- Lightweight
- должны иметь два класса: визуальный один (на основе TStringGrid) и один невизуальный для консольных программ (войдите в ОЗУ и сохраните журнал позже или покажите сообщения как простой текст в консоли). не
- Нет жестких зависимостей (Delphi издание, Инди, двигатели DB, 3-й управляет партия и т.д.)
- Малые (TRichEdit увеличивает размер файла EXE довольно много)
- Один PAS файл
альтернативой было бы не использовать Grid и самостоятельно рисовать текст (например, в компоненте, основанном на TPanel). Или, может быть, такой контроль уже существует.
Любые конструктивные критики моих идей приветствуются. У вас есть идея лучше, чем использование Grid?
Вместо того, чтобы повторно изобретать колесо, взгляните на существующие решения. BTW, TRichEdit (как TMemo) становится довольно медленным, когда текстовое содержимое растет. TDrawGrid в виртуальном режиме намного быстрее. Для облегченной системы регистрации попробуйте наш [Open Source SynLog unit] (http://synopse.info/files/html/Synopse%20mORMot%20Framework%20SAD%201.18.html#TITL_16), который ИМХО отвечает всем вашим требованиям и имеет гораздо больше функций, включая работу с Delphi 5 и выше, исключение из трассировки стека, удаленный доступ и [хороший просмотрщик высокой производительности] (http://blog.synopse.info/post/2011/08/20/Enhanced-Log -viewer) –
@ ArnaudBouchez- Hi Arnaud. Я смотрел на другие системы, но все это сложные системы для протоколирования исходного кода/выполнения пути. Все с поддержкой DB/TCP и т. Д. Не очень легкий. Они ориентированы на программистов, а не ориентированы на пользователей. – Ampere
@ ArnaudBouchez-Я видел ваше редактирование. Я посмотрю лучше, но это кажется довольно сложным. По крайней мере, я могу украсть некоторые идеи :) Поддерживает ли ваш SynLog динамическую фильтрацию? – Ampere