Easyelectronics.ru

Электроника для всех
Текущее время: 15 окт 2018, 18:16

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

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

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


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

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


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

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


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

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

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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