powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Эффективное(быстрое) логирование в файл
17 сообщений из 42, страница 2 из 2
Эффективное(быстрое) логирование в файл
    #39121260
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно взять за правило flush-ить только важные события (ERROR,FATAL) или события от особого логера.
Таковых должно быть (наобум) 1-5% от всех остальных. А остальной трафик ... ну пускай течёт в фоне.
По мере возможности.

Или взять к примеру ОС. Она вобщем-то не логгирует свои "ядерные" события. И ЕМНИП техподдержка
анализирует "посметрные дампы" memory. Это тоже вобщем-то метод. И экономно. И из поля зрения
ничто не утекает.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39121301
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСогласен, только презумпция невиновности в его пользу.Если есть косяк админа - он должен получать люлей. Чтобы нюх не терял.
Именно поэтому админ должен знать больше, чем ему положено по должностным обязанностям.Начнись разбор проблемы на уровне начальства - крайний я.Это вообще не техническая проблема и лично я не вижу смысла обсуждать общие вопросы там, где каждый случай содержит частные ньюансы.Потому что он в штате, а я просто поставщик услуги, обещающий конкретные параметры в договоре.И это то же не техническая проблема.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39121439
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИли взять к примеру ОС. Она вобщем-то не логгирует свои "ядерные" события. И ЕМНИП техподдержка
анализирует "посметрные дампы" memory. Это тоже вобщем-то метод. И экономно. И из поля зрения
ничто не утекает.
Чтобы с этих дампов что-то понять надо как минимум асм знать хорошо, инструментарий соответствующий освоить. Совсем не свойственные знания для прикладного программиста.
Да и в дампах думаю не все гладко: если компилятор при сборке релиза осмысленные имена функций и переменных выкинул, половину кода заинлайнил, причем там в перемешку и твой код, и STL и т.д. и т.п. Как это читать? ХЗ.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39121454
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

это крайние случаи. Админы (большинство) адекватные и грамотные. Из частого (опять же в моей практике) не падение, а "зависание". Тот же админ пишет/звонит: "Прога молотит уже 20-30 минут, проц на 100% грузит. Что делать?" Смотрим лог и сразу все понятно: из его системы (где он тоже только админ) вывалилось что-то большое и обрабатывается, тут снять задачу вообще не вариант - обработка начнется с начала. Без flush() запись о том что конкретно обрабатывается висела бы в буфере, а мы бы с админом судорожно гадали что случилось.

ИМХУ в этом вопросе нет одного правильного ответа на все случае жизни. Не надо тебе - не пользуй flush(). Если логи не читаешь, то вообще не пиши,так еще эффективнее работать будет.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39122827
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТот же админ пишет/звонит: "Прога молотит уже 20-30 минут, проц на 100% грузит. Что делать?" Смотрим лог и сразу все понятно: из его системы (где он тоже только админ) вывалилось что-то большое и обрабатываетсяЕсли человек не вчера работает, то он должен знать или, как минимум, представлять что и когда может "свалиться".
И потом - что за паника? "А-а-а! Усё пропало! Полчаса стопроцентной загрузки!" - где трагедия?
Ну и самое главное: если вы, заглянул в лог, поняли, что происходит, то я вижу только одну причину, по которой этого не понял админ - он вообще не заглядывал в лог.Без flush() запись о том что конкретно обрабатывается висела бы в буфереВремена Windows 9x, которая могла сутками держать данные в буфере - давно прошли.
Максимум, который вы получите при отсутствии flush - секунды (десятки секунд) отложенной записи.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123053
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВремена Windows 9x, которая могла сутками держать данные в буфере - давно прошли.
Максимум, который вы получите при отсутствии flush - секунды (десятки секунд) отложенной записи.
Тестами не подтверждается.
Исходник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#include <fstream>
#include <iostream>
#include <windows.h>

void test_log(const char* filename)
{
	std::ofstream ofs(filename, std::ofstream::out);
	int cnt = 0;
	while(1) {
		cnt++;
		ofs << cnt << ". 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\n";
		std::cout <<  cnt << "\r";
		Sleep(10000);
	}
}

int main(int argc, char* argv[])
{
	test_log("test.log");
	return 0;
}


Компилировал MSVC 2012 Express. Запускал на W7. Пишет ровно по 4096 байт (~40 строчек) каждые 400 секунд. Т.е. по наполнению. Какой-то ИИ не наблюдается.
Можно паузу побольше поставить - будет раз в сутки писать.
Единственное полезное: при закрытии окна крестиком - скидывает весь буфер. Если с диспетчера снимать задачу - не скидывает.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123073
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем в 99% случаев можно не париться с флашами.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123157
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivalexy_blackты задаешь вопросы, на которые можно ответить только тестами реальной системы.
да нет, примерно можно прикинуть и теоретически... ...

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

даже если например снизить время записи в лог, то в последствии может оказаться, что на это приходится только 0.01% верени работы системы. а, скажем, 38% она просиживает в какой-то функции. вот если оптимизировать эту функцию, в которой 38%, то это даст реальный плюс, даже если она от этого станет быстрее очень не на много, суммарный эффект будет больше, чем у лога..
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123178
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TBasil A. SidorovВремена Windows 9x, которая могла сутками держать данные в буфере - давно прошли.
Максимум, который вы получите при отсутствии flush - секунды (десятки секунд) отложенной записи.
Тестами не подтверждается.
Код: plaintext
1.
std::ofstream




Процитированное утверждение - про дисковые буферы ОС, а не про буфер потока, который естественно сам по себе не сбрасывается на диск, потому что это просто участок памяти процесса, и все действия над ним происходят во время операций над потоком, а никак не в фоне.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123515
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКомпилировал MSVC 2012 Express. Запускал на W7. Пишет ровно по 4096 байт (~40 строчек) каждые 400 секунд. Т.е. по наполнению.Как мониторили?
Код: plaintext
type файл > nul
ничего не меняет?
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123521
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123558
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovDima TКомпилировал MSVC 2012 Express. Запускал на W7. Пишет ровно по 4096 байт (~40 строчек) каждые 400 секунд. Т.е. по наполнению.Как мониторили?
Код: plaintext
type файл > nul
ничего не меняет?
Как обычно, в фаре F3 на файле лога. Можно любую другую смотрелку логов использовать.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123604
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для надёжности я-бы сравнил работу просмотрщика FAR с утилитой tail.exe
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123636
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКак обычно, в фаре F3 на файле лога. Можно любую другую смотрелку логов использовать.Могу и ошибаться, но если "смотрелка логов" использует Directory Change Notifications , то ваш пример проходит по сценарию "данные пишутся, но метаданные (каталожные записи) не обновляются". Проверяется тем самым "type > nul".
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123701
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати поведение Far при переходе от Win2003 к Windows7 изменилось в части наблюдения
за directory list. В старой версии размеры файлов обновлялись динамически (очевидно
по нотификациям от directory change). В семёрке эти нотификации толи исчезли совмем
толи стали отложенные.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123739
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не настаиваю на фаре. Просто я привык смотреть логи фаром и он показывает сразу после появления записи на диске.
Можно брать любой другой инструмент вызывающий доверие. Например
Код: plaintext
1.
type test.log


а дальше давим в консоли кнопки: стрелка вверх, enter. С любой частотой, какая нравится.
Тут 100% полное перечитывание файла, все что есть на диске в момент запуска, без всяких оптимизаций с использованием Notifications
Результат тот же самый. Пишет ровно по 4096 байт (~40 строчек) каждые 400 секунд.
...
Рейтинг: 0 / 0
Эффективное(быстрое) логирование в файл
    #39123870
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда остаются грабли реализации стандартной библиотеки, по которым разработчики ОС уже потоптались пятнадцать назад.
Если реализация "оптимизирует" число (системных) вызовов write() - это её проблемы. Навешивать костыль в виде flush() - именно, что навешивать костыль.

P.S. Разумеется, могут быть и ньюансы с 512e (эмуляция 512-байтовых секторов поверх 4КБайт физических), но принудительный сброс в лог каждой строчки - был и остаётся костылём.
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Эффективное(быстрое) логирование в файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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