powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка 32 при Exception
44 сообщений из 44, показаны все 2 страниц
Ошибка 32 при Exception
    #40030805
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый день! Помогите, пожалуйста, с конструкцией:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
try
....
except
 on E: Exception do
   if Label5.Caption<>E.Message then
    begin
      Append(f);
      Writeln(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+E.Message);
      Flush(f);
      CloseFile(f);
      Label5.Caption:=E.Message;
    end;



Данная конструкция находится в OnTimer и ее задача - однократно вывести ошибку в лог. Но при этом возникает ошибка IO 32. Что здесь не так? Спасибо!
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030808
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
Коллеги, добрый день! Помогите, пожалуйста, с конструкцией:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
try
....
except
 on E: Exception do
   if Label5.Caption<>E.Message then
    begin
      Append(f);
      Writeln(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+E.Message);
      Flush(f);
      CloseFile(f);
      Label5.Caption:=E.Message;
    end;




Данная конструкция находится в OnTimer и ее задача - однократно вывести ошибку в лог. Но при этом возникает ошибка IO 32. Что здесь не так? Спасибо!


файл кем-то занят.
и в любом случае надо всегда делать проверку на ошибку
Код: pascal
1.
2.
3.
4.
{$I-}
 Append(f);
{$I+}
if IOresult <> 0 then ...



И таки где в коде assignfile ?
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030810
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно это означает что файл занят другим приложением.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030811
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cobalt747
Обычно это означает что файл занят другим приложением.


возможно, ТС не выполнил CloseFile - где-то свалилось ДО этого
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030814
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
И таки где в коде assignfile ?


Он выше, в Try.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030815
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
И таки где в коде assignfile ?


Он выше, в Try.[/quote]

и зачем он в TRY ?
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030816
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
и зачем он в TRY ?


Там тоже есть, что писать в лог
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030821
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator

файл кем-то занят.
и в любом случае надо всегда делать проверку на ошибку
Код: pascal
1.
2.
3.
4.
{$I-}
 Append(f);
{$I+}
if IOresult <> 0 then ...




Так тоже не работает - в лог ничего не попадает
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030824
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
defecator

файл кем-то занят.
и в любом случае надо всегда делать проверку на ошибку
Код: pascal
1.
2.
3.
4.
{$I-}
 Append(f);
{$I+}
if IOresult <> 0 then ...





Так тоже не работает - в лог ничего не попадает


а почему должно попадать, если у тебя ошибка никуда не делась ?

Давай, вываливай сюда весь код, а не кусок
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030827
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
procedure TForm1.Timer1Timer(Sender: TObject);
var

fwNew, ActiveWindow : HWND;
 f,fil:TextFile;
 FileDir, result, resultfin, resultpath, filedesc :String;
 Path: array [0..MAX_PATH] of Char;
 today, totime : TDateTime;
 pProcID : ^DWORD;
 procid: cardinal;


begin
 Try
  ActiveWindow:=GetForegroundWindow;

if GetWindowTitle(ActiveWindow)<>ttl then

begin

fw:=GetForegroundWindow;
if ShGetSpecialFolderPath(Application.Handle, Path, CSIDL_APPDATA, False) then
      if not DirectoryExists(Path+'\winactivitybeat')
              then if not CreateDir(Path+'\winactivitybeat') then raise Exception.Create('Ошибка создания каталога') ;

   Filedir:=Path+'\winactivitybeat'+'\log.txt';
AssignFile(f,FileDir);
if not FileExists(FileDir) then
 begin
  Rewrite(f);
  CloseFile(f);
 end;
Append(f);
today := Date;
totime := Time;
result:=getprocimagename(TakeProcessID(GetWindowTitle(ActiveWindow)));
resultpath:=Getpathfrompid(TakeProcessID(GetWIndowTitle(ActiveWindow)));
label2.Caption:=result;
memo1.Lines.Clear;
memo1.Lines.Add(GetExeVersionData(resultpath).FileDescription);
 filedesc:=memo1.Lines.Text;
Write(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+GetWindowTitle(fw)+'       '+filedesc);
Flush(f);
CloseFile(f);
ttl:=GetWindowTitle(fw);
Label1.Caption:='Пишем в '+filedir;
Form1.ClientWidth:=Label1.ClientWidth+15;
end;
except
 on E: Exception do
   if Label5.Caption<>E.Message then
    begin
      closefile(f);
      {$I-}
      Append(f);
      {$I+}
      if IOresult <> 0 then begin
      Writeln(f,DateToStr(today)+' '+TimeToStr(totime)+'   '+label2.caption+'    '+E.Message+'     '+Message1);
      Flush(f);
      CloseFile(f);
      Label5.Caption:=E.Message;
      end;
      closefile(f);
    end
end;
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030832
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fresh Meat,

работай через TStringList. И Label не понадобится, да и вообще...
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030833
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko
да и вообще...

Такой извращенный дебаггинг у меня))
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030837
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat,

чудовищная мешанина

сделай отдельную процедуру записи данных в лог
типа такой (это только образец, писал в блокнотике)
ну и не забудь эксепшены ловить где-то, или используй IOResult и {$I-}/{$I+}

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure AppendLog(const aFileName : string; const aData : string);
var
  f : TextFile ;
begin   
   AssignFile(f, aFileName);
   try
     if not FileExists(aFileName)  then 
        Rewrite(f) 
      else 
        begin
               Reset(f) ;
               Append(f) ;
        end ;

     Write(f, aData) ;
   finally
     CloseFile(f) ;
   end ;
end ;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030839
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В результате вся твоя помойка сведётся к такому коду

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
procedure TForm1.Timer1Timer(Sender: TObject);
var
  fwNew, ActiveWindow: HWND;
  f, fil: TextFile;
  FileDir, Result, resultfin, resultpath, filedesc: String;
  Path: array [0 .. MAX_PATH] of Char;
  today, totime: TDateTime;
  pProcID: ^DWORD;
  procid: cardinal;
begin
  Try
    ActiveWindow := GetForegroundWindow;

    if GetWindowTitle(ActiveWindow) <> ttl then

    begin

      fw := GetForegroundWindow;
      if ShGetSpecialFolderPath(Application.Handle, Path, CSIDL_APPDATA, False)
      then
        if not DirectoryExists(Path + '\winactivitybeat') then
          if not CreateDir(Path + '\winactivitybeat') then
            raise Exception.Create('Ошибка создания каталога');

      FileDir := Path + '\winactivitybeat' + '\log.txt';

      today := Date;
      totime := Time;
      Result := getprocimagename(TakeProcessID(GetWindowTitle(ActiveWindow)));
      resultpath := Getpathfrompid(TakeProcessID(GetWindowTitle(ActiveWindow)));
      label2.Caption := Result;
      memo1.Lines.Clear;
      memo1.Lines.Add(GetExeVersionData(resultpath).FileDescription);
      filedesc := memo1.Lines.Text;

      { пишем в лог }
      AppendLog(FileDir, DateToStr(today) + ' ' + TimeToStr(totime) + '   ' +
        label2.Caption + '    ' + GetWindowTitle(fw) + '       ' + filedesc);

      ttl := GetWindowTitle(fw);
      Label1.Caption := 'Пишем в ' + FileDir;
      Form1.ClientWidth := Label1.ClientWidth + 15;
    end;
  except
    on E: Exception do
      if Label5.Caption <> E.Message then
      begin
        { пишем в лог }
        AppendLog(FileDir, DateToStr(today) + ' ' + TimeToStr(totime) + '   ' +
          label2.Caption + '    ' + E.Message + '     ' + Message1);

        Label5.Caption := E.Message;
      end
  end;
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030843
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,
Большое спасибо за помощь, но теперь вываливает 103 ошибку..
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030850
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fresh Meat
defecator,
Большое спасибо за помощь, но теперь вываливает 103 ошибку..


reset выкини, я же сказал, что в блокнотике писал.
ТЫ вообще подумать не хочешь ?
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030860
Fresh Meat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
reset выкини

Все заработало, ура! Большое спасибо за помощь!
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030869
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жуть! Вот вы открыл файл в верхнем блоке, потом у вас вывалилось исключение, потом вы опять открываете (уже открытый файл) в except блоке.

Как должно быть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
AssignFile(F, FileName);
// Открываем файл
if FileExists(FileName) then
  Append(F)
else
  Rewrite(F);
try
  try
    // что-то делаем
    Writeln(F, 'Process');  // логируем
    // еще что-то делаем
  except
    on E: Exception do
      Writeln(F, E.Message); // Если произошло исключение, то записываем
  end;
finally
  CloseFile(F);  // всегда закрываем файл
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030950
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офф: сталкивался с такой проблемой:

записывал в файл через Поток.SaveToFile()
Повторное действие SaveToFile() иногда заканчивалось "Файл занят".
При этом он прекрасно открывался и редактировался блокнотом.

Никаких конкурентных записей в файл заведома не было.
Между записями были длинные паузы.
Выходит SaveToFile() иногда оставляет блокировку ?

Проблема плавающая и ее сложно повторить.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030985
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Выходит SaveToFile() иногда оставляет блокировку ?
Зависит от реализации. Если там по классике
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure SaveToFile(const AFileName: string);
var
  Strm: TStream;
begin
  Strm := TFileStream.Create(AFileName, fmCreate);
  try
    SaveToStream(Strm);
  finally
    Strm.Free;
  end;
end;

то никаких блокировок, после выхода из метода, быть не может
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40030998
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
то никаких блокировок, после выхода из метода, быть не может
Бывает, антивирус некоторое время держит файл после редактирования (любым способом).
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031149
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
24.12.2020 22:33, YuRock пишет:
> Бывает, антивирус некоторое время держит файл после редактирования (любым способом).

антивирус - ЗЛО
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031157
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антивирус не зло, а источник дохода для его разработчика,
но ставить антивирусное ПО на девелоперскую машину,
действительно, довольно странно. Это для тупых юзеров
в основном (вирусы разные бывали, особенно в прошлом).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031161
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fresh Meat,
IMHO, заниматься открытием файла (а это операция, которая способна приводить к проблемам), когда уже что-то пошло не так - идея не очень. Проще и лучше, если программа ведет лог - при старте (в секции Initialize модуля логирования) программы открыть файл лога, если не получилось, открыть другой файл или еще как-то компенсировать проблему. Потом, в отдельной процедуре WriteLog, обвешав try/except и критической секцией выводить в уже открытый файл. В секции finalize модуля логирования закрыть файл.
Вместо того, чтобы при каждом исключении думать об открытии файла и решении всяких связанных с этим проблем, просто пишете:
Код: sql
1.
2.
3.
4.
5.
6.
uses ...,UMyLogger,...;

...
except
  on e:exception do WriteLog('Beda v MyProc: %s',[e.Message]);
end;
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031184
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
x1ca4064
Код: sql
1.
UMyLogger



тут бы ещё содержание UMyLogger посмотреть
а то ведь на словах-то одно, а как оно там получится реально - совсем другое
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031200
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator

тут бы ещё содержание UMyLogger посмотреть
а то ведь на словах-то одно, а как оно там получится реально - совсем другое


UMyLogger у каждого свой :)
С годами там много чего отрастает - переоткрытия логов, архивирование, удаление старых и пр.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031208
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Антивирус не зло, а источник дохода для его разработчика,
но ставить антивирусное ПО на девелоперскую машину,
действительно, довольно странно.

А что, прикольно бывает, нажимаешь F9, а приложуха незапускается.
И каспер такой: "Хозяин! Я вирус нашёл! И съел! Правда я классный?".

Гаджимурадов Рустам

Это для тупых юзеров
в основном (вирусы разные бывали, особенно в прошлом).

В истории был вирус, который заражал машины с дельфёй и встраивал себя в исходники всех новых приложений, которые на ней компилировали. Правда больше на демку был похож.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031874
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Антивирус не зло, а источник дохода для его разработчика,
но ставить антивирусное ПО на девелоперскую машину,
действительно, довольно странно. Это для тупых юзеров
в основном (вирусы разные бывали, особенно в прошлом).
В том-то и дело, что проблемы, вызванные антивирусами, возникают у клиентов.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031878
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
IMHO, заниматься открытием файла (а это операция, которая способна приводить к проблемам), когда уже что-то пошло не так - идея не очень. Проще и лучше, если программа ведет лог - при старте (в секции Initialize модуля логирования) программы открыть файл лога,

Вставлять в initialization такую страшную операцию, как открытие файла - это ад.
Ну и еще.
Файлы логов почти всегда надо разбивать не только по именам бизнес-процессов, а и по месяцам, или дням, а часто даже по часам.
Так что не только открывать, а еще и имя файла придумывать часто приходится при записи.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031882
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
28.12.2020 17:28, YuRock пишет:
> Файлы логов почти всегда надо разбивать не только по именам бизнес-процессов, а и по месяцам, или дням, а часто даже по часам.
> Так что не только открывать, а еще и имя файла придумывать часто приходится при записи.

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

зы: собранные логи анализируются "отделом качества", после чего формируется баг-репорт кодерам.
конечные юзеры в этом всём не участвуют.
вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40031929
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock

Вставлять в initialization такую страшную операцию, как открытие файла - это ад.
Ну и еще.

А что там такое адовое происходит?
Стартовать потоки - не стоит, а открытие файла и в инициализации dll работает

Файлы логов почти всегда надо разбивать не только по именам бизнес-процессов, а и по месяцам, или дням, а часто даже по часам.
Так что не только открывать, а еще и имя файла придумывать часто приходится при записи.
Это сложный вопрос - разбитие на несколько логов показало себя с плохой стороны, т.к. приходилось долго объяснять какие логи нужны, где они лежат и пр., в итоге пришлось сделать опцию (по-умолчанию включена), которая сообщения в разные логи дублирует в основном. Проще в анализаторе лога разобрать.
IMHO, зависит от того, кому эти логи и для чего нужны.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032070
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
28.12.2020 17:28, YuRock пишет:
> Файлы логов почти всегда надо разбивать не только по именам бизнес-процессов, а и по месяцам, или дням, а часто даже по часам.
> Так что не только открывать, а еще и имя файла придумывать часто приходится при записи.

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

зы: собранные логи анализируются "отделом качества", после чего формируется баг-репорт кодерам.
конечные юзеры в этом всём не участвуют.
вообще.
У нас процесс работает неделями бывает, и более.
Некоторые логи - логи действий юзера.
Некоторые - обмен с железками. Они по часам, десятки метров в час.
Еще куча всяких систем/плагинов, у каждой свой лог. Плюс логи репликатора.
Всё это раз в сутки семьзипится (почасовые большие - отдельно, дневные все скопом), и сохраняются в папку Logs\yymmdd
И такие папочки живут по два месяца на клиентских тачках.
При необходимости разбора полётов легко вытягиваются нужные файлы.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032074
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Это сложный вопрос - разбитие на несколько логов показало себя с плохой стороны, т.к. приходилось долго объяснять какие логи нужны, где они лежат и пр.

Не очень понятно, кому и зачем объяснять. Если человек не может найти нужный лог - он в нём ничего и не поймёт, объясняй не объясняй. Если же его функция только найти файл и прислать разработчику.... никто не мешает сделать для этого функцию в своём приложении и не трахать пользователю череп.

x1ca4064
в итоге пришлось сделать опцию (по-умолчанию включена), которая сообщения в разные логи дублирует в основном. Проще в анализаторе лога разобрать.

Я привык класть логи в yyyy\month\yyyymmdd.log И от мысли смотреть в "основном логе" о чём-то, что случилось пару месяцев назад, мне несколько некомфортно. Я, конечно, верю в мощное современное железо и грамотно написанный софт, но зачем...?

x1ca4064
IMHO, зависит от того, кому эти логи и для чего нужны.

Безусловно.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032075
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
А что там такое адовое происходит?
Стартовать потоки - не стоит, а открытие файла и в инициализации dll работает

Ну вот тут
https://docs.microsoft.com/en-us/windows/win32/dlls/dllmain#remarks
Что код в секции инициализации/финализации должен быть максимально простым, и что нет списка безопасных функций для использования там.
Так же там написано, что запрещено взаимодействие с другими потоками и процессами.
А открытие файла - вообще очень сложная функция. Мало ли, что там внутри. Как там ассинхронность инициализируется/работает, например.

Короче, я лично напарывался на очень много багов, вызванных кодом в init/fin, далеко не только старт/стоп потоков, это точно.
Теперь масимум, что себе позволяю - инициализацию там простых переменных, и то - редко.
По мне так это вообще не нужно.

x1ca4064
Это сложный вопрос - разбитие на несколько логов показало себя с плохой стороны, т.к. приходилось долго объяснять какие логи нужны, где они лежат и пр.

У меня обратная ситуация. Лежат они все в одной папке и легко находятся.
Я согласен, есть другой подход: вести базу данных логов с типами событий. Минуса вижу 3:
1. она будет огромной, и ее придется все равно или как-то разбивать, или полностью реплицировать в центр.
2. нельзя будет по-быстрому в фаре посмотреть (Но это в общем решаемо, хоть и непривычно);
3. Не ясно, что делать при поломке этой базы - куда ошибку писать;
А так - да, есть и удобства.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032077
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Стартовать потоки - не стоит

О, кстати, а у вас лог что, в контексте вызывающего потока пишет что-ли? Такое не устраивает, мягко говоря. Наверно, потому вам и не понравилось открывать/закрывать файлы.

Понятно, что можно при первом вызове функции WriteLog запустить пишущий логи поток, но тогда почему бы не сделать там же условный CreateFile.
Зачем initialization насиловать - чтобы внутри него логи писать?)
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032103
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer

Не очень понятно, кому и зачем объяснять.

Сам не знаю :) - иногда звонят какие-то люди, говорят "все висит и ничего не работает". Осторожно выясняешь, кто это, что это, запрашиваешь логи.
Если человек не может найти нужный лог - он в нём ничего и не поймёт, объясняй не объясняй. Если же его функция только найти файл и прислать разработчику.... никто не мешает сделать для этого функцию в своём приложении и не трахать пользователю череп.

У меня, большей частью, службы. Отдельный баг-репортер как-то руки не дошли написать. Но идея нравится, обязательно приделаю.
Я привык класть логи в yyyy\month\yyyymmdd.log И от мысли смотреть в "основном логе" о чём-то, что случилось пару месяцев назад, мне несколько некомфортно. Я, конечно, верю в мощное современное железо и грамотно написанный софт, но зачем...?

У меня есть текущий лог, который по достижении размера/возраста сжимается и кидается в папку OldLogs с именем [DDMMHHNN-DDMMHHNN]AppName.bz2, т.е. старые данные нужно брать там.
В некоторых местах логи переносятся на файловый сервер отдельным батником, в некоторых - нет.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032105
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock

Ну вот тут
https://docs.microsoft.com/en-us/windows/win32/dlls/dllmain#remarks
Что код в секции инициализации/финализации должен быть максимально простым, и что нет списка безопасных функций для использования там.
Так же там написано, что запрещено взаимодействие с другими потоками и процессами.
А открытие файла - вообще очень сложная функция. Мало ли, что там внутри. Как там ассинхронность инициализируется/работает, например.

У каждого свой опыт - у меня это уже третья итерация системы логирования, проблем именно с открытием файлов в инициализации dll не попадалось.
x1ca4064
Это сложный вопрос - разбитие на несколько логов показало себя с плохой стороны, т.к. приходилось долго объяснять какие логи нужны, где они лежат и пр.

У меня обратная ситуация. Лежат они все в одной папке и легко находятся.
Я согласен, есть другой подход: вести базу данных логов с типами событий. Минуса вижу 3:
1. она будет огромной, и ее придется все равно или как-то разбивать, или полностью реплицировать в центр.
2. нельзя будет по-быстрому в фаре посмотреть (Но это в общем решаемо, хоть и непривычно);
3. Не ясно, что делать при поломке этой базы - куда ошибку писать;
А так - да, есть и удобства.
Думаю, отдельная БД для логов может быть оправдана только в случае какой-то распределенной большой системы, текстовые файлы для большинства остальных.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032107
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock

О, кстати, а у вас лог что, в контексте вызывающего потока пишет что-ли? Такое не устраивает, мягко говоря.

У меня расплодилось несколько объектов логов, некоторые умеют писать в отдельном потоке, но, реально используется с синхронной записью - как-то исторически.

В отдельном потоке пишет только цикличекий лог - он держит некоторое количество последних сообщений в памяти, и, если какая-то беда случается, скидывает их в файл.

Наверно, потому вам и не понравилось открывать/закрывать файлы.

нет - если файл закрыл, то далеко не факт, что сможешь открыть.

Зачем initialization насиловать - чтобы внутри него логи писать?)
Я вывожу имя и версию приложения, командную строку и прочую инфу, которая иногда может быть полезной. И, самое главное - открыть файл логов :)
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032140
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

А чем ищите данные по зазипованным файлам?
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032236
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
YuRock,

А чем ищите данные по зазипованным файлам?
В фаре нажал на архиве энтер, затем - на файле F3 или F4, и всё перед глазами. Файлы то небольшие и с временем в начале каждой строки.
Некоторые сотрудники не пользуются фаром, они раззиповывают куда-то, потом нотепадами всякими смотрят.

Для некоторых логов оборудования пришлось написать разборщики логов, которые протокол устройства переводят на русский язык.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032252
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
В фаре нажал на архиве энтер, затем - на файле F3 или F4, и всё перед глазами. Файлы то небольшие и с временем в начале каждой строки.
А FAR не умеет искать в архивах без ручного входа в каждый? О_о
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032257
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Тогда порекомендую dngrep умеет искать в архивах и много чего еще. Лейаут только у него странный...
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032306
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
YuRock
В фаре нажал на архиве энтер, затем - на файле F3 или F4, и всё перед глазами. Файлы то небольшие и с временем в начале каждой строки.
А FAR не умеет искать в архивах без ручного входа в каждый? О_о
Умеет со времен Win95. Только что искать-то? Важно посмотреть, что там происходило, параметры/данные какие-то (неизвестно, какие) посмотреть, события.
...
Рейтинг: 0 / 0
Ошибка 32 при Exception
    #40032309
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
YuRock,

Тогда порекомендую dngrep умеет искать в архивах и много чего еще. Лейаут только у него странный...
Опять же, не понимаю, как поиск чего-то по логам (или логам в архиве) может мне быть полезен.
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка 32 при Exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]