Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Юзаю std::ofstream для логирования. Собственно, возникает вопрос: при логировании строки вызывается std::endl, который вызывает flush(), который производит запись на физический диск. Мне кажется это не очень оптимально. А как правильно? (при условии что потеря логировочных данных не очень критична) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 09:28 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Если это запись в лог - очень даже критично. Процесс повис/рухнул/сняли и ты не в курсе что последнее сделала прога, т.к. буфер умер вместе с процессом. Даже если не умер - смотришь параллельно лог - действие реально сделано, а в логе не видно, т.к. на диск еще не сбросилось. ИМХУ flush() после каждой записи в лог обязательно должен быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 10:02 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли это запись в лог - очень даже критично. Процесс повис/рухнул/сняли и ты не в курсе что последнее сделала прога, т.к. буфер умер вместе с процессом. Даже если не умер - смотришь параллельно лог - действие реально сделано, а в логе не видно, т.к. на диск еще не сбросилось. ИМХУ flush() после каждой записи в лог обязательно должен быть. зависит от задачи, у меня задача не в логировании приложения 24/7, а воткнуть логирование в чужой код чтобы узнать что там происходит(собрать статистику) - увы логирование сильно притормаживает работу и приложение аз-за этого не может нормально работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 11:22 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
gamedev_12.15Юзаю std::ofstream для логирования. Собственно, возникает вопрос: при логировании строки вызывается std::endl, который вызывает flush(), который производит запись на физический диск. Мне кажется это не очень оптимально. А как правильно? (при условии что потеря логировочных данных не очень критична) никто же тебя не заставляет использовать endl. не нужно тебе - не используй. кстати именно в логировании наоборот важно делать flush после каждого сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 11:46 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
MasterZivgamedev_12.15Юзаю std::ofstream для логирования. Собственно, возникает вопрос: при логировании строки вызывается std::endl, который вызывает flush(), который производит запись на физический диск. Мне кажется это не очень оптимально. А как правильно? (при условии что потеря логировочных данных не очень критична) никто же тебя не заставляет использовать endl. не нужно тебе - не используй. кстати именно в логировании наоборот важно делать flush после каждого сообщения. (потеря последних запискей в логе для меня не критична) 1)Насколько существенным будет прирост производительности если не использовать flush() для каждой строки? 2)Как часто нужно его использовать чтобы не потерять в производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 13:16 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
gamedev_12.15, замени endl на "\n" и затести. Будет быстрее. Если поток закрывается корректно - в итоге все будет на диске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 13:19 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
автор1)Насколько существенным будет прирост производительности если не использовать flush() для каждой строки? Это зависит от средней длины твоей записи и соотношения этой длины с размером буфера в CRT и файловой системе. Соотношения их длин даст примерный коэффициент ускорения. автор2)Как часто нужно его использовать чтобы не потерять в производительности? std::endl ? Вообще не использовать, если тебе не нужна непосредственная запись единицы лога в файл (что довольно странно, но допустимо), то не используй std::endl вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 13:25 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
MasterZivавтор1)Насколько существенным будет прирост производительности если не использовать flush() для каждой строки? Это зависит от средней длины твоей записи и соотношения этой длины с размером буфера в CRT и файловой системе. Соотношения их длин даст примерный коэффициент ускорения. автор2)Как часто нужно его использовать чтобы не потерять в производительности? std::endl ? Вообще не использовать, если тебе не нужна непосредственная запись единицы лога в файл (что довольно странно, но допустимо), то не используй std::endl вообще. ok, если не использовать flush() запись в файл будет только закрытии файла и при переполнении CRT буфера. Тогда во сколько раз время записи на диск полного CRT буфера может отличаться от flush() для строки?(при исп. OS:windows msvc2008) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 14:36 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
gamedev_12.15Тогда во сколько раз время записи на диск полного CRT буфера может отличаться от flush() для строки?(при исп. OS:windows msvc2008) Может отличаться только в 1 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 14:44 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
gamedev_12.15ok, если не использовать flush() запись в файл будет только закрытии файла и при переполнении CRT буфера. Тогда во сколько раз время записи на диск полного CRT буфера может отличаться от flush() для строки?(при исп. OS:windows msvc2008) Какой размер буфера и от чего он зависит - ХЗ. Какой размер строки - тебе виднее. Затести: 1. Размер буфера: пиши блоки по килобайту одновременно в консоль пиши размер отправленного в поток, снимай задачу и сравнивай что в консоле и что на диске. 2. Скорость записи: запиши гиг с flush() и без. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 15:16 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
ты задаешь вопросы, на которые можно ответить только тестами реальной системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 15:19 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли это запись в лог - очень даже критичноВ морг.Процесс повис/рухнул/сняли и ты не в курсе что последнее сделала прога, т.к. буфер умер вместе с процессом.Вот когда действительно потребуется логирование предсмертных конвульсий - тогда и надо думать, как затормозить работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 17:27 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
MasterZivкстати именно в логировании наоборот важно делать flush после каждого сообщения.Ещё один ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 17:28 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВот когда действительно потребуется логирование предсмертных конвульсий - тогда и надо думать, как затормозить работу. Когда конвульсии начинаются - уже нет времени думать, надо пациента воскрешать. Чтоб не тормозило - не засирай логи чем попало. Если сотня строк в минуту пройдет - ничего не затормозится. Для подробностей - предусмотри режим отладки - пиши каждый чих, пусть тормозит, будет повод отключить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 18:12 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Я, как бы, несколько лет администрировал систему, где режим отладочных логов был чаще включен, чем выключен. Была масса ошибок и аварийных ситуаций, включая фатальные, но не разу не возникло вопроса: "А что было за секунду до падения???". А вот вопросов: "Когда же, блин, началась-то эта фигня и что вообще происходит?" - выше крыши. Ситуаций, когда разбирался даже не активный лог, а архивный - множество. И никогда не мешало, что логи пишутся поблочно, а не построчно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 18:18 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
В тех случаях, когда приложение реально падает - просят не логи, а дампы. И это не гипотеза. А ваши рассуждения очень похожи на рекомендации гонщика формулы-раз механику питстопа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 18:33 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЯ, как бы, несколько лет администрировал систему, где режим отладочных логов был чаще включен, чем выключен. Была масса ошибок и аварийных ситуаций, включая фатальные, но не разу не возникло вопроса: "А что было за секунду до падения???". Это проблема того что пишут в логи, а не подхода как писать логи. К разработчику хоть раз обращался? Лично я пишу в логи самое-самое важное. Мою систему администрируют посторонние админы. Все живет в полном автомате. Чего там у них происходит я понятия не имею. Происходит все: от кривых рук до кривого железа. Если ко мне (разработчику) обращается админ с какой-то проблемой, то первое что я прошу - логи. Фатальные проблемы крайне редки, там где они учащаются - включаем отладку. По итогу разбора какие-то отладочные записи переходят в самое-самое, т.е. пишутся всегда. В итоге в 99% случаев по просмотру лога я всегда ставлю правильный диагноз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 18:44 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Dima TЭто проблема того что пишут в логи, а не подхода как писать логи. К разработчику хоть раз обращался?Когда в системе работает две-две с половиной сотни пользователей, событий будет много и подход "не пиши лишнего" перестаёт работать. Но ваше "лог надо писать построчно" - заблуждение и глупость. И от объёмов протоколирования это не зависит. P.S. К разработчикам я, конечно, обращался и то, что я говорю - не теория, а вполне себе практический опыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 19:08 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovвполне себе практический опыт. Вот теперь понятно. Опыт разный т.к. задачи разные. У тебя система с пользователями, у меня автомат, который должен работать нисмотря ни на что. У тебя система упала - тутже пользователи закипишили. У меня упала - никто не заметил, через 1-3 часа юзеры начинают подозревать неладное (не видя моих результатов в своей системе), пинают админа, он быстро реанимирует (если получится, обычно получается) и ко мне - что это было? За что я огреб? Что сделать чтоб этого больше не было? И тут я ему должен убедительно ответить что было. А если он пока реанимировал снимал задачи, ребутил и т.п. то я должен это знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 19:29 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Скорость чтения рядового человека 100-200 слов в минуту. Какой смысл писать гигабайты логов если они не смогут быть прочитаны? Для гигабайтов есть БД, такие логи лучше писать туда с мало-мальской формализацией, чтобы потом фильтровать можно было под 100-200 слов в минуту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 20:34 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Dima TУ меня упала - никто не заметил, через 1-3 часа юзеры начинают подозревать неладное (не видя моих результатов в своей системе), пинают админа, он быстро реанимирует (если получится, обычно получается) и ко мне - что это было? За что я огреб? Что сделать чтоб этого больше не было?Аникейщик это а не админ. Если человек не вчера начал работать, то о проблемах он должен знать раньше пользователей. Хотя бы для того, чтобы не огребаться. И логи разбирать - прямая его обязанность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 20:49 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Dima TКакой смысл писать гигабайты логов если они не смогут быть прочитаны? grep на что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 21:05 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovАникейщик это а не админ. Если человек не вчера начал работать, то о проблемах он должен знать раньше пользователей. Хотя бы для того, чтобы не огребаться. И логи разбирать - прямая его обязанность. Согласен, только презумпция невиновности в его пользу. Начнись разбор проблемы на уровне начальства - крайний я. Потому что он в штате, а я просто поставщик услуги, обещающий конкретные параметры в договоре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 21:12 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
alexy_blackты задаешь вопросы, на которые можно ответить только тестами реальной системы. да нет, примерно можно прикинуть и теоретически... размеры буфера обычно сейчас 8 или 16 КБ, размер строки - 100-200 символов, далее с учетом кодировки можно все посчитать, примерно, конечно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2015, 09:15 |
|
||
|
Эффективное(быстрое) логирование в файл
|
|||
|---|---|---|---|
|
#18+
[quot Basil A. Sidorov]Dima TЕсли это запись в лог - очень даже критичноВ морг.[quot ] ну он там вроде бы узнать, что связано это с анализом производительности, т. е. он в логи время записывает, так что действительно может быть не критично. ему бы конечно профайлер больше помог бы... OProfile например почти не тормозит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2015, 09:18 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39120139&tid=2018698]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 191ms |

| 0 / 0 |
