Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 TMS logger  [new]
ktv
Member

Откуда:
Сообщений: 245
Проблема возникла с данной технологией логгирования.
Периодически сваливается процесс с ошибкой
EFOpenError: Cannot open file "NNN.log". Процесс не может получить доступ к файлу, так как этот файл занят другим процессом

Сугубо путем экспериментов выяснил, что вероятность падения зависит от интервала между записями в лог. Сделал непрервыную запись - падает почти сразу; сделал интервал в секунду - пока вот висит процесс и капают записи. При этом я файл сам мониторю в онлайне через LogExpert.
Если честно, впервые сталкиваюсь с такой проблемой на практике. По данной ошибке сеть мало что дала, потому вопрос к знатокам:
1) Можно ли что-то сделать с TMS логгером по части данной проблемы?
2) Может, стоить использовать другое средство логгирования. Что-то порекомендуете, желательно, чтобы умело безглючно выводить логгирование нескольких потоков в один файл?
3 окт 17, 18:23    [20839991]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
defecator
Member

Откуда:
Сообщений: 34674
я делаю на каждый поток свой файл лога,
чтобы избежать проблем и потом не разгребать мешанину данных из разных потоков.
3 окт 17, 20:44    [20840183]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
JaDi
Member

Откуда: JayDi из Сызрани
Сообщений: 3022
В документанции к этому логгеру написано, что он thread safe... Так что может где-то в другом месте косяк? Например, с тем же LogExpert'ом, который для чтения временно блокирует файл? Или файл большой и его кривой антивирус долго проверяет при каждой записи?
3 окт 17, 21:24    [20840232]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
schi
Member

Откуда: Москва
Сообщений: 2222
ktv
Что-то порекомендуете, желательно, чтобы умело безглючно выводить логгирование нескольких потоков в один файл?


Я использую mutex + writeln, несколько процессов (и потоков) пишут в файл.
3 окт 17, 22:21    [20840381]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 724
Из логгеров ничего навороченнее SmartInspect не видел.
4 окт 17, 11:08    [20841334]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
ktv
Member

Откуда:
Сообщений: 245
В общем, победил изменением одного из исходников TMS логгера TMSLoggingUtils.pas путем добавления флага fmShareDenyNone в оба вызова конструктора TFileStream.Create, которые изначально были без них. Конечный код TTMSLoggerUtils.AppendStream:

unit TMSLoggingUtils;
..
class procedure TTMSLoggerUtils.AppendStream(const AFileName: string; const AStream: TStringStream);
var
  f: TFileStream;
begin
  if FileExists(AFileName) then
    f := TFileStream.Create(AFileName, fmOpenWrite Or fmShareDenyNone)
  else
    f := TFileStream.Create(AFileName, fmCreate Or fmShareDenyNone);

  try
    f.Seek(0, TSeekOrigin.soEnd);
    AStream.SaveToStream(f);
  finally
    FreeAndNil(f);
  end;
end;
4 окт 17, 12:58    [20841813]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
ktv
Member

Откуда:
Сообщений: 245
Все спасибо :)
4 окт 17, 12:59    [20841817]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
asviridenkov
Member

Откуда:
Сообщений: 3696
ktv,

вот тупые тмс-овцы, не могли догадаться что в файл можно одновременно писать из разных потоков.
4 окт 17, 13:05    [20841845]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 22968
ktv
Что-то порекомендуете, желательно, чтобы умело безглючно выводить логгирование нескольких потоков в один файл?

wlog.pas https://github.com/wadman/wthread
4 окт 17, 15:12    [20842462]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1536
Если нужно отлаживать в процессе разработки, то весьма неплох по возможностям штатный CodeSite
4 окт 17, 16:14    [20842751]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 11196
white_nigger, т.е. в designtime? При не запущенном приложении? Или как?
4 окт 17, 16:32    [20842838]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 22968
X11
т.е. в designtime? При не запущенном приложении?

Это как?
4 окт 17, 16:35    [20842850]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9750
X11
Или как?
До релиза. В процессе поиска багов
4 окт 17, 16:43    [20842880]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
JaDi
Member

Откуда: JayDi из Сызрани
Сообщений: 3022
У CodeSite'а вообще отдельный процесс висит, который принимает все логи в порядке очереди и потом их передает/сохраняет куда надо. Так что там проблем с многопоточностью по определению быть не должно.
4 окт 17, 16:54    [20842937]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
alekcvp
Member

Откуда:
Сообщений: 397
asviridenkov
ktv,
вот тупые тмс-овцы, не могли догадаться что в файл можно одновременно писать из разных потоков.


Сарказм понятен, непонятно как за такое ещё и денег хотят (много).
Отдельный поток с монопольным доступом к файлу и синхронизированная запись из других потоков?.. Не, зачем, можно ведь открыть файл, записать и закрыть. А если он уже открыт, то зачем ждать - можно же исключение кинуть. Пипл хавает (С) :)
4 окт 17, 19:30    [20843375]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1536
_Vasilisk_
X11
Или как?
До релиза. В процессе поиска багов
Да
JaDi
У CodeSite'а вообще отдельный процесс висит, который принимает все логи в порядке очереди и потом их передает/сохраняет куда надо. Так что там проблем с многопоточностью по определению быть не должно.
Помимо этого дофига плюшек. Возможность структурирования, сравнение состояния объектов и тд. Можно найти видео где это хорошо показано
4 окт 17, 20:09    [20843460]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
vavan
Member

Откуда: Казань
Сообщений: 2852
white_nigger
_Vasilisk_
пропущено...
До релиза. В процессе поиска багов
Да
баги есть всегда, можно даже и в продакшне
6 окт 17, 13:15    [20848025]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
vavan
Member

Откуда: Казань
Сообщений: 2852
schi
использую mutex + writeln, несколько процессов (и потоков) пишут в файл
из разных процессов в один мне кажется не приходится а чтобы потоки одного развести (и заодно не тупить вдруг на записи) юзаю lf-очередь и отдельный поток-писатель
6 окт 17, 13:21    [20848057]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
defecator
Member

Откуда:
Сообщений: 34674
если из разных потоков струячить всё в один файл, как потом разбираться в этой мешанине ?
6 окт 17, 13:38    [20848150]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
schi
Member

Откуда: Москва
Сообщений: 2222
defecator
если из разных потоков струячить всё в один файл, как потом разбираться в этой мешанине ?


Например также, как в виндовом Event log
6 окт 17, 13:45    [20848178]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
schi
Member

Откуда: Москва
Сообщений: 2222
vavan
schi
использую mutex + writeln, несколько процессов (и потоков) пишут в файл
из разных процессов в один мне кажется не приходится а чтобы потоки одного развести (и заодно не тупить вдруг на записи) юзаю lf-очередь и отдельный поток-писатель


В моем случае мне важна полнота (у меня некий отладочный протокол), поэтому чем проще, тем лучше.
6 окт 17, 13:47    [20848195]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
defecator
Member

Откуда:
Сообщений: 34674
schi
defecator
если из разных потоков струячить всё в один файл, как потом разбираться в этой мешанине ?


Например также, как в виндовом Event log

а я в разные файлы пишу, один файл - один поток.
Потом проще, чем разгребать "как в виндовом Event log"
6 окт 17, 13:47    [20848199]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
vavan
Member

Откуда: Казань
Сообщений: 2852
defecator
если из разных потоков струячить всё в один файл, как потом разбираться в этой мешанине ?
например указывать идентификатор потока или чего угодно еще
defecator
я в разные файлы пишу
ну я тоже в одном приложении несколько независимых лог-файлов веду но разделение логическое
6 окт 17, 14:25    [20848413]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
vavan
Member

Откуда: Казань
Сообщений: 2852
schi
В моем случае мне важна полнота (у меня некий отладочный протокол), поэтому чем проще, тем лучше
непонятно как одно связано с другим хотя достоинства принципа самого по себе конечно широко известны
6 окт 17, 14:32    [20848463]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
alekcvp
Member

Откуда:
Сообщений: 397
defecator
а я в разные файлы пишу, один файл - один поток.
Потом проще, чем разгребать "как в виндовом Event log"

Зато потом наверное в кайф по десятку файлов хронологию событий восстанавливать?
6 окт 17, 14:37    [20848496]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
schi
Member

Откуда: Москва
Сообщений: 2222
vavan
schi
В моем случае мне важна полнота (у меня некий отладочный протокол), поэтому чем проще, тем лучше
непонятно как одно связано с другим хотя достоинства принципа самого по себе конечно широко известны


Когда все падает, меньше вероятности, что останется несброшенной некая очередь. Как-то так.
6 окт 17, 15:14    [20848684]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9750
vavan
баги есть всегда, можно даже и в продакшне
А никто не говорил, что их нет. Говорили, что прекращается процесс их поиска
6 окт 17, 16:06    [20848822]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
vavan
Member

Откуда: Казань
Сообщений: 2852
schi
Когда все падает, меньше вероятности, что останется несброшенной некая очередь
а, ну если настолько падучая одолевает то вероятно есть определенный смысл
6 окт 17, 16:07    [20848827]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9750
defecator
если из разных потоков струячить всё в один файл, как потом разбираться в этой мешанине ?
Собственный велосипед - XML. Каждый поток отдельный узел. И две XSL. Одна показывает инфу, сгруппированную по потокам, а вторая все записи сортирует просто по времени с указанием имени потока
6 окт 17, 16:09    [20848835]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
vavan
Member

Откуда: Казань
Сообщений: 2852
_Vasilisk_
никто не говорил, что их нет. Говорили, что прекращается процесс их поиска
я к тому что можно задействовать не только для поиска багов а и просто для логирования/мониторинга
6 окт 17, 16:09    [20848837]     Ответить | Цитировать Сообщить модератору
 Re: TMS logger  [new]
defecator
Member

Откуда:
Сообщений: 34674
alekcvp
defecator
а я в разные файлы пишу, один файл - один поток.
Потом проще, чем разгребать "как в виндовом Event log"

Зато потом наверное в кайф по десятку файлов хронологию событий восстанавливать?

зачем сразу по десятку ?
хронология каждого потока в своём файле.
для анализа работы конкретного потока остальные файлы не нужны.
раве чот восстанавливать общую картинку.
Но такое бывает редко, да и ведь общий файл (не для потоков) в системе тоже ведётся
6 окт 17, 19:58    [20849483]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить