Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Log-файл к программе

27.01.2015, 17:56. Показов 8523. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите, каким способом максимально быстро можно записать действия программы в log-файл с последущей дозаписью и просотром этого файла.
У меня есть вот такой во вариант

C++
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int iNom;
String Rez_f = "Rezylt_f"; // Файл с данными
iNom = FileCreate(Rez_f);//Создаём файл Rez_f
 
 if(iNom==-1)
   {
    ShowMessage("Файл не удалось создать");
   }
//Объявляем переменную Sx_1 и записываем в неё данные
 String Sx_1 = "Запись в файл 67576";
 
//Копируем данные из переменной Sx_1 и записываем в неё данные
 
 FileWrite(iNom, Sx_1.c_str(), Sx_1.Length());
//Закрываем файл Rez_f с номером iNom
 FileClose(iNom);
 
//Открываем файл Rez_z в режиме только чтения
   iNom = FileOpen(Rez_f,fmOpenRead);
   int FileLength = FileSeek(iNom, 0, 2); // определяем длину файла
   FileSeek(iNom,0,0); // переходим на начало файла
   char* Sx_2 = new char[FileLength+1];//Объявляем ещё одну переменную
   FileRead(iNom, Sx_2, FileLength); // читаем
   Sx_2[FileLength] = '\0'; // в конец добавляем \0
   ShowMessage(AnsiString(Sx_2));
   FileClose(iNom);
   delete [] Sx_2;
   Sx_2 = NULL;
 
}
//---------------------------------------------------------------------------
Мне просто надо записывать в текстовый файл время какого-то действия в программе. Приведённого выше подхода достаточно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2015, 17:56
Ответы с готовыми решениями:

Запись события в log-файл
Всем здравствуйте. Опять проблемы с Unicod-ом. Вод код функции: void WriteToLogFile(String s) // Запись события в log-файл { ...

Как очистить log-файл запущенной программы?
Как очистить log-файл запущенной программы ? Не удаляя log файла

Запись истории просматриваемых папок в log-файл
На форме имеется DirectoryListBox. Как записать все просматриваемые папки и подпапки (в DirectoryListBox'е) в log-файл? Пытался...

13
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.01.2015, 18:45
Вероятно через сишные ф-ции было бы удобнее.

Добавлено через 44 секунды
http://www.cplusplus.com/refer... /?kw=fopen
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.01.2015, 13:57  [ТС]
Таким кодом я заношу данные в текстовый файл. Данные заносятся, но новые строки создаются внизу. Можно ли как-то сделать, чтобы строки заносились сверху?
C++
1
2
3
FILE *logFile =  fopen("log.txt", "a+");
fprintf(logFile, AnsiString(FormatDateTime("dd.mm.yyyy hh:nn:ss\n", Now())).c_str());
fclose(logFile);
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.01.2015, 14:48
Цитата Сообщение от Sasha Посмотреть сообщение
Таким кодом я заношу данные в текстовый файл. Данные заносятся, но новые строки создаются внизу. Можно ли как-то сделать, чтобы строки заносились сверху?
А зачем тебе это? Что бы больше времени занимала вставка когда файл разрастется?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.01.2015, 14:58  [ТС]
Просто неудобно, чтобы посмотреть новую строку это надо прокрутить вниз ползунок в текстовом редеакторе, а так бы ты открыл новые строки на верху, а старые строки внизу
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.01.2015, 14:59
Либо удобно либо быстро...

Не ну можно конечно хранить все в памяти а в лог сбрасывать только по завершению программы, но думаю это не то что требуется.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.01.2015, 16:46
Можно еще при чтении выводить в обратном порядке.
0
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
29.01.2015, 11:41
Могу предложить свою, достаточно универсальную функцию логирования, с учетом настраиваемого уровня вывода
C++
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
void __fastcall TfOption::Log(String s,int level)
{
  FILE *f;
  String nf;
  String t;
  int i;
  if (!bUseLog) return;//флаг использования лога
  if (level<=iLevelLog) {//уровень логирования
    t = DateTimeToStr(Now())+": ";
    for (i=0;i<level;i++) t = t + "  ";
    s = t + s;
    fMain->mLog->Lines->Add(s);//вывод в мемо на главной форме
    try {
      if (bUseLogFile) {//флаг использования логирования в файл
        s = s + "\n";
        nf = fMain->LogDir;//путь хранения логов
        Sysutils::ForceDirectories(nf);
        t = ExtractFileName(ParamStr(0));// определение имени лог-файла в формате progname_dd.mm.gg.log
        nf = nf + t.Delete(t.Length()-3,4);
        t = nf + "_"+ DateToStr(Now())+".log";
        f=fopen(t.c_str(),"a+");
        fwrite(s.c_str(),s.Length(),1,f);
        fclose(f);
        t = nf + "_"+ DateToStr(Now()-CNTDAY)+".log";//храним CNTDAY дней - константа
        if (FileExists(t))
        DeleteFile(t);
      }
    } catch (...) {
      bUseLogFile = false;
    }
  }
}
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.01.2015, 12:32  [ТС]
krv, а по скорости как?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
29.01.2015, 12:45
krv, и что такое уровень логирования?
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
29.01.2015, 13:01
Цитата Сообщение от SatanaXIII Посмотреть сообщение
krv, и что такое уровень логирования?
часто используется в Scada системах.
Уровень логирования, определяет количество информации, которая будет записываться в лог по критерию (подробности). Чем Выше уровень логирования тем подробнее описание лога.
Я думаю krv имел виду именно это, но могу ошибаться.
1
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
29.01.2015, 13:32
По скорости не очень.
Все таки и автопостроение имени файла(строки 18-20), и добавка времени в лог (9 строка), и добавка лишних пробелов (декорирование для лучшей читабельности) (строки 10-11)
Но это можно выбросить.

В общем, это отладочная функция, которая в релизе используется очень и очень мало.
Просто предложил как удобный инструмент (для меня как минимум)

А уровень логирования - да, количество подробностей в логе.
К примеру, уровень 0 у меня в программе используется при выводе критических ошибок
типа
C++
1
Log("400 Cервер обнаружил в запросе клиента синтаксическую ошибку "+sURL,0);
а уровень 5 - чисто отладочные сообщения для меня
C++
1
Log("Прошло времени "+FloatToStrF(d,ffNumber,5,2)+" сек",5);
В настройках программы можно указать какой уровень использовать.
Тестеры работают с максимальным, чтобы мне прислать лог любого чиха программы, а пользователи - вообще отключают либо с уровнем 1-2.
Идея взята у Оракла, у которого 10 уровней логирования

Ай, при копировании вкралась ошибка. Строка 5 выглядит так:

AnsiString t;

Вообще код переносился еще со старых версий, намешано типов строк у меня как то.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
29.01.2015, 14:30
Хм. Я думал уровень логирования это типа:

Уровень Сообщение
0 Такого-то числа, в такое-то время, на таком-то компутере, с таким-то пользователем, работающим семь часов подряд, два раза сходившим попить кофе с тремя ложками сахара, произошла ошибка в третьей планке памяти, рядом со вспученым конденсатором синего цвета. Текст ошибки: "Такие-то нехорошие вещи по таким-то адресам происходят и происходят. Что ж такое-то."
... ...
5 7:30 Произошла ошибка такая: "Что-то не так как-то сработало вот здесь"
... ...
10 Навернулось.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.01.2015, 14:33
Цитата Сообщение от krv Посмотреть сообщение
По скорости не очень.
Ясень пень, ты ведь каждый раз открываешь/закрываешь файл + нафига использовать fwrite для текста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2015, 14:33
Помогаю со студенческими работами здесь

Не удаётся удалить файл - Windows 10 пишет, что невозможно открыть файл INSTALL.LOG
Возникла проблема, что при попытке удалить файл игры в разделе Приложения и возможности Windows 10 выскакивает надпись, что невозможно...

Запись в .log файл
Здравствуйте! Написал небольшой скриптик, но нужно что бы весь процесс его работы записывался в лог-файл. Подскажите, пожалуйста, как это...

Запись в log файл
Есть log файл в него необходимо записывать: 1 - Запуск программы (осуществлен или нет запуск программы, кто запустил/имя компьютера) 2...

Log файл, создание
Здравствуйте, могли бы Вы помочь мне с созданием лог файла куда бы записывались ошибки программы (возникающие во время работы, если...

По заданым значениям х и у найти значение величины log x y (log с основанием х)
Подскажите,где ошибка в if-else.Потому-что,когда вводить вместо х или у 0,почему-то еррор не выдает,а что-то непонятное каждый раз.Спасибо....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru