Easyelectronics.ru

Электроника для всех
Текущее время: 19 фев 2020, 11:31

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Логирование данных в файл.
СообщениеДобавлено: 20 мар 2018, 14:33 
Старожил

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 243
У меня по всему коду разбросанны сообщения типа
printf ("LIB ID = %d\n", lib_id);
сообщения выводятся серийно на терминал.

Сейчас нужно некоторые сообщения логировать в файл на SD карте.
Возникли вопросы по алгоритмике логирования данных
1. Прежде всего проверить есть ли место на SD - вопрос как это сделать? и если нет места? очистить файл и начать писать сначала?
2. Если файл открыт - добавить данные в файл, посмотреть флаг закрыть файл или нет.(я не хочу часто дергать файл - открывать\закрывать)
тогда что - держать глобальный указатель на файл?
3.Если файл закрыт - открыть с опцией "а+", добавить данные в файл, посмотреть флаг закрыть файл или нет.
Как вообще сделать покрасивше?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Логирование данных в файл.
СообщениеДобавлено: 20 мар 2018, 17:01 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2550
Непонятно что за платформа.
1. Обратитесь к документации вашей библиотеки для работы с картой/ФС. Как поступать когда нет места - решать вам. Обычно делается ротация логов. Лог файлы либо по времени, либо по размеру разделяются и удаляются самые старые вплоть до лимита. Например решите для себя, что вы готовы держать 3 файла по 100Кб логов. И пишите - текущий log.txt, как только он стал 100Кб - переименовываете его в log.txt.1 и создаете новый log.txt. Потом соотв. в следующий раз надо log.txt.1 переименовать в log.txt.2, а log.txt снова в log.txt.1. Далее 2->3, 1->2, .txt->1. Далее 3->удалить, 2->3, 1->2, .txt->1 и по кругу "вращаете их".
2. Опять же в зависимости от платформы возможно лучше будет держать дескриптор файла открытым постоянно для записи до исчерпания лимита по ротации.
3. Вынесите код логированния данных в отдельные функции или класс. Пусть там делаются все проверки и ротация автоматом. А из кода программы пусть вызывается просто единая функция для добавления записи в лог.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Логирование данных в файл.
СообщениеДобавлено: 20 мар 2018, 17:27 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6466
"2->3, 1->2, .txt->1"
Интересный прием. Но, если есть место, (наверно) лучше файлы делать не "фиксированного размера", а с дискретностью по дате/времени запуска/выполнения. Результат тот-же, но появляется некоторая гибкость в управлении - удаление слишком старых файлов, обязательное хранение предыдущего запуска - ну, что нужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Логирование данных в файл.
СообщениеДобавлено: 20 мар 2018, 17:32 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1585
Откуда: Курск
Я для логирования использую sysklogd и syslog-ng
Там и ротация файлов, и ограничение размера файлов, и удалённое логирование


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Логирование данных в файл.
СообщениеДобавлено: 20 мар 2018, 17:55 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2550
u37 писал(а):
"2->3, 1->2, .txt->1"
Интересный прием. Но, если есть место, (наверно) лучше файлы делать не "фиксированного размера", а с дискретностью по дате/времени запуска/выполнения. Результат тот-же, но появляется некоторая гибкость в управлении - удаление слишком старых файлов, обязательное хранение предыдущего запуска - ну, что нужно.

Прием стандартный донельзя и известен всем, кто с *nix знаком. Там давно так реализовано. Я кстати написал, что можно по дате, а не по размеру. Обычно на ПК и серверах по дате и делаются логи. Плюс кроме текущего еще зачастую сжимается.
Только на SD карточке небольшой место может ограничено. А логи по определенным причинам могут генерироваться с неизвестной скоростью. Бывает что "сойдет какой-нибудь процесс с ума" (зачастую неправильно настроенный пользователем просто) и зафигачит гигабайты логов за день. А с фикс. размером лога на маленьком устройства это не проблема - если есть 3 лога по 100Кб, они всегда максимум 300Кб будут занимать, это место всегда под них можно зарезервировать. Поэтому и имеет место иногда.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: demiurg1978


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB