Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296

Запись логов в файл. Последствия для памяти

04.11.2024, 22:06. Показов 5587. Ответов 65
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вечер добрый!
У меня давно есть некий код, который я использую для логгирования своих приложений. Суть его в том, что при инициализации логгера задается максимальное количество строк для файла и приложение передает в него по одной строке, которая добавляется в конец файла. Каждый раз при добавлении проверяется, превысили ли мы максимально допустимое количество строк и если да, то логгер удаляет самую верхнюю строку текстового файла и т.д.
При добавлении каждой строки происходит процедура открытия и закрытия файла.
Подскажите пожалуйста, есть ли принципиальная разница в том, оставлять файл открытым или открывать и закрывать его при каждом добавлении сроки?
Интересуют нюансы работы с памятью, в частности, не происходит ли при открытии и закрытии записи какой-то инфы в файл, что при частых манипуляциях может затирать досмерти ячейки памяти и т.п.
Всем спасибо за участие!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2024, 22:06
Ответы с готовыми решениями:

Запись логов в файл
Добрый день. Есть небольшое клиент-серверное приложение на сокетах, работающее с БД. Вопрос: как лучше написать небольшой логгер,...

Запись логов в файл
Добрый день, подскажите в чём проблема, необходимо сделать след: 1. Логи с приоритетом info - пишутся только в консоль 2. Логи с...

SpringBoot и запись логов в файл. - не пишет
Всем доброго дня! Подскажите вопрос, почему одна и та-же настройка но в первом случе пишет логи, во втором - нет... Пример ...

65
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
06.11.2024, 05:54
Студворк — интернет-сервис помощи студентам
В utf8, utf16, utf32, какая разница?)))
Откуда у вас такое понимание странное? Есть источник?

Добавлено через 2 минуты
Seek установит курсор в произвольное место файла, а write запишет туда то, что сказано. Если текстовый или иной файл повредится, юзер сам дурак.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3457 / 2778 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
06.11.2024, 06:03
Rius, это к порядку считывания. Как вы системе даете понять, что считывать надо с ЭТОГО места и до ЭТОГО, причем учитывая кодировки и прочую лабуду... ?
Как СИСТЕМА вставит в конец файла часть, не изучив перед этим где этот КОНЕЦ и как его интерпретировать?

Добавлено через 2 минуты
Rius, я не знаю как вписать данные в определенное место обычного файла. Если Вы знаете, то поделитесь секретом.

Добавлено через 3 минуты
Rius, напомню, что речь идет не за эвалуированные инструкции, а именно за внутренние механизмы, которые заснеженному взгляду не видны..
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
06.11.2024, 06:11
я не знаю как вписать данные в определенное место обычного файла. Если Вы знаете, то поделитесь секретом
Сообщением выше.
Остальное делает система. Понадобится считать блок - считает. Но не весь файл.

Добавлено через 4 минуты
этим где этот КОНЕЦ
Файловая система знает.

как его интерпретировать
А зачем это изучать? Содержимое файла это всего лишь последовательность байт.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3457 / 2778 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
06.11.2024, 06:15
Rius, ты не понял... Вы не поняли... (я путаюсь с ты/вы)
Допустим, есть файл:
Code
1
2
3
4
Онегин был по мненью многих
(Судей решительных и строгих)
Ученый малый, но педант:
Имел он счастливый талант
нужно заменить в третьей строке двоеточие на тире...
Что сделает твой (тьфу, Ваш) механизм в этом случае?

Добавлено через 1 минуту
P.S. у меня есть ответ, но я хочу услышать мнения...
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
06.11.2024, 06:20
А я не про изменение текста в середине текстового файла.
В этом случае вам придётся читать, да.

Я про дозапись данных в конец файла. Запись логов это дозапись именно в конец. Предыдущее содержимое не важно.

Добавлено через 3 минуты
Вот про изменение текстовых файлов в середине: Добавление записи в XML-файл без его перезаписи
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3457 / 2778 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
06.11.2024, 06:25
Цитата Сообщение от Rius Посмотреть сообщение
дозапись данных в конец файла
Так, дозапись все таки. Система как-то должна определить куда дозаписывать...

Добавлено через 2 минуты
Rius, все это наводит на мысль, что система все же, скрывая от лишних глаз, "проигрывает" все это в своих внутренностях, прежде чем что-то куда-то записать...
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
06.11.2024, 06:31
Вы говорите установить курсор в конец файла и записать массив байт.
Система ищет место в файловой системе и пишет туда. Если это середина блока, а не чисто новый, то считывает его и дополняет.

Добавлено через 1 минуту
Можете fatfs от Чана собрать в программе на C и посмотреть на работу внутренней кухни.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3457 / 2778 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
06.11.2024, 06:35
В конец файла.... А где это конец, как его определяет система? Где его начало? Именно ЭТОГО участка памяти, который меня интересует.

Добавлено через 1 минуту
Rius, ну, я размышляю от имени машины... как бы с ее точки зрения.
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
06.11.2024, 06:36
А где это конец, как его определяет система? Где его начало? Именно ЭТОГО участка памяти, который меня интересует.
А для этого есть файловая таблица, где записано расположение всех блоков файла .
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3457 / 2778 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
06.11.2024, 06:41
Цитата Сообщение от Rius Посмотреть сообщение
А для этого есть файловая таблица
Верно. Так... что же на самом деле делает Append() в таком случае? Действительно ли дописывает в КОНЕЦ файла, или производит иллюзию этого?
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.11.2024, 06:47
Цитата Сообщение от wizard41 Посмотреть сообщение
у автора не тот уровень логирования. Т.е. пояснять за эти вещи ... рановато.
Пусть сразу работает адекватно, чем страдает фигней. Изначальная идея делать из лог-файла строковую очередь -- не самый лучший подход.

Цитата Сообщение от wizard41 Посмотреть сообщение
ну вот при чем здесь файловая система, в контексте вопроса?
Цитата Сообщение от a13428711 Посмотреть сообщение
что при частых манипуляциях может затирать досмерти ячейки памяти и т.п.
SSD и Flash имеет лимит на перезапись. Для SSD хз как работает выравнивание (кажись там вообще контролер за это в ответе), но для флешек ещё с семерки можно выставить файловою систему exFAT, которая оптимизировано для флешек в плане долговечности.

По общему спору, с тем что система просто выставляет указатель в конец файла и начитает шарашить туда байты: для 100% доказательства нужно на самом низком уровне отлавливать непосредственные обращения к диску и смотреть что там происходит. Подозреваю что там ворох оптимизаций и ньюансов для каждой "железяки" (виртуальные диски передают привет). Но как заметил выше Rius:
- вроде как открытие файла и выставление указателя в конец одинаково быстро как для 1МБ, так и для 100ГБ.
- дозапись любой кодировки не основывается на ранее записанных символах, а подразумевает тупо добавление новых блоков байт.

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

Либо я не врубаюсь, и вы подразумеваете что "в рандомном месте поменяли 10 запятых на 5 точек, и пытаемся это адекватно сохранить". Тогда "да": потенциально перелопачивать весь файл, но как писал в самом начале -- таким лучше не страдать.
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
06.11.2024, 06:55
Так... что же на самом деле делает Append() в таком случае? Действительно ли дописывает в КОНЕЦ файла, или производит иллюзию этого?
С точки зрения приложения - дописывает. Остальное - забота операционной системы
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.11.2024, 06:57
Цитата Сообщение от a13428711 Посмотреть сообщение
Пардон, когда написал понял, что это чушь какая-то)
ок, только сейчас увидел что изначальная идея не актуальна.

В общем ответ: ничего страшного не должно происходить. На C# файл -- абстракция, причем лютейшая. Непосредственная перезапись ячейки на SSD произойдет через десяток посредников, начиная от внутреннего кода CLR и заканчивая контроллером железки. И так уж сложилось, что человечество заинтересовано в производительности всего этого зоопарка, и закладывает различные оптимизации прям на низком уровне, чтобы не страдали прикладные программы.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3457 / 2778 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
06.11.2024, 06:57
Rius, Wolfdp, обыкновенный дискусс с умными людьми - это всегда интересно. Кто-то свою истину найдет. Простите меня, я немного отдыхаю (др у дочки), с пьяну завел диалог... Хотя, тема актуальная, все же. Я не верю в волшебные свойства виндовых ридеров - по любому захватывают дамп, чтобы что-то вписать.
Rius, Wolfdp, спасибо за диалог, добра вам!
0
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
04.02.2025, 05:28  [ТС]
Возрождаю тему уточняющим вопросом)
Выше писали про то, что Append именно ДОБАВЛЯЕТ текст в конец файла. Но как именно происходит добавление?
Например, я добавляю текстовому файлу в конец точку. Размер текста 6кб, размер кластера на диске 4кб, соответственно, размер файла 8кб. В таком случае дозаписывается только заданное количество байт или перезаписывается весь последний кластер?
Вопрос возник глядя на БД, в которых данные могут добавляться сотни раз в секунду, при этом они не висят в оперативной памяти ожидая сохранения, а пишутся сразу на диск, и тем не менее ssd как-то вывозят по ресурсу.
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
04.02.2025, 06:41
Цитата Сообщение от a13428711 Посмотреть сообщение
Но как именно происходит добавление?
Открывается файл (читается информация из файловой таблицы). Курсор ставится в конец файла. Дописывается.

Цитата Сообщение от a13428711 Посмотреть сообщение
В таком случае дозаписывается только заданное количество байт или перезаписывается весь последний кластер?
На FAT и HDD может перезаписаться последний кластер.

Цитата Сообщение от a13428711 Посмотреть сообщение
тем не менее ssd как-то вывозят по ресурсу
Задача решается алгоритмами Wear Leveling на уровнях файловой системы и прошивки SSD.
Тем не менее, торренты не рекомендуется качать на SSD. А сам SSD - расходник, сдох - меняют.
0
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
04.02.2025, 12:16  [ТС]
Rius,
На FAT и HDD может перезаписаться последний кластер
А что будет с ssd на каком-нибудь exFat? Или может есть где почитать на эту тему подробнее? А то в сети везде информация поверхностная
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
04.02.2025, 12:24
Память в SSD имеет очень ограниченное количество стираний, поэтому там вынужденно применяются алгоритмы Wear Leveling.
Также есть файловые системы, учитывающие низкий ресурс SSD.

Цитата Сообщение от a13428711 Посмотреть сообщение
Или может есть где почитать на эту тему подробнее?
Про Wear Leveling.

Цитата Сообщение от a13428711 Посмотреть сообщение
А то в сети везде информация поверхностная
Пользователям ПК это знать не нужно. Поддержку TRIM включили и забыли.
2
04.02.2025, 12:56

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
Память в SSD имеет очень ограниченное количество стираний
поделюсь своими наблюдениями
вот не раз слышал об этом, но у меня на компе SSD (старенький кингстон SATA 500 гигов) уже живет около 10 лет. активно пользую, что-то удаляю, что-то устанавливаю и никак диск не помрет, а там еще виндовый файл подкачи и всякая виндовая закулисная деятельность, но две файловые помойки на HDD сдохли всего за 5 лет при менее активном использовании, вот такой парадокс, так что когда говорят про долговечность HDD мне кажется имеют ввиду сами диски, а механика и контролер там ломаются куда чаще, чем появляется много битых секторов

0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
04.02.2025, 12:58
Долговечность HDD в том, что количество перезаписей одного участка не ограничено (в сравнении с SSD).
А у SSD - 1000 стираний и всё, ячейка сдохла.

Остальное, у кого сколько проработало, это сочетание качества, брака и удачи. Ну и условий эксплуатации.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2025, 12:58

Как вести запись логов в файл?
Создал такой класс: public class ExceptionLogger { private static final Logger logger =...

Запись логов в файл из службы Windows
В классе задаю StreamWriter sw = File.AppendText("Log.txt"); В методе OnStart вызываю Writetolog("onstart"); async void...

Запись логов в файл с ограниченным числом строк
Всем привет. Как лучше писать логи в файл, который должен содержать не больше 100 тыс. строк? На данным момент у меня...

Уровни логирования SpringBoot и запись логов в файл. - не пишет :(
Всем доброго дня! Столкнулся с таким вопросам... Есть приложение на SpringBoot завернутое в контейнер Docker в .yml файле...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru