логирование работы программы? Чтобы любая ошибка на любой стадии работы сохранялась. В том числе краш программы
Логгеров много. Найдите подходящий
Я не знаю правильно это или нет, но можно так: Создаем каталог logs, в него пишем файлики, в качестве название которых выступает системная дата+время.txt от момоента запуска программы.
Тут вопрос не как и куда, а чем
отличная идея. Самое то для логов. логи ведь лолжны сильно нагружать и тормозить программу. А ещё терять часть важных данных при случайных крэшах
Ну а как еще?
Верно, вопрос был по поводу инструмента, его внедрения и использования. Спасибо за наводку, изучу готовые логгеры
Наверное логгеры делают просто так от нефиг делать. ведь есть же fopen? https://m.habr.com/ru/post/313686/
Ну или можно просто в stdout, а логированием пусть башня занимается...
пытался использовать Baical(P7) но чёт не зашло. spdlog вроде норм
Почему же? stdout-то быстро робит.
Ну давай stdout на гуёвом приложении, которое вылетело с ошибкой
Запускаешь через терминал...
Хорошо жить в мире розовых пони.
Логи нужны не для "почитать сейчас". А для того чтобы потом посмотреть и понять что случилось и почему. И пользоваться твоей прогой будешь не ты, а "опытный пользователь Тётя Клава"
$ a.out >> file.log.txt
у тебя же родители пользуются компом? Мама там, или бабушка? Главное чтобы они были с it не связаны. Вот давай ты на них поэксперементируешь с требованием запускать программу именно так в консоли а не кликом по иконке (можешь даже удалить ярлык ворда/экселя/1с/или чем они там пользуются). А потом расскажешь о том "в чем проблема-то?"
ну писать файлики можно и без консоли
Тред почитай, а...
Ну а что мешает создать run-programm.sh, в котором это и будет прописано.
Как минимум за логирование в stdout из нескольких потоков в продакте, у тебя извлекут руки из ненужного места и вставят в нужное
Используй не потоки, а std::printf() или std::puts()
При чём тут "нить"?
Любой адекватный заказчик, который хочет современное GUI-приложение, после требования запускать строго из терминала или через мутный .sh сразу поинтересуется, что за х... сотворили за его деньги
То есть вы советуете вместо написания многопоточных приложений, где каждыф поток занят своим делом, использовать std::printf? Прикольно. Поделитесь секретом, как?
@MasterZiv @anatolijs Тут какие-то интересные советы товарищь раздаёт.
Ну вместо потока std::cout использовать функцию вывода в терминал.
Многопоточные приложения это не про stream-ы а про thread-ы
Ну в UNIX это нормально. Например так делают почти все демоны такие как Apache2, Nigix, MySQL-server... Только этим занимается не bash-скрипт, а система инициализации: systemD, sysVInit, RC и т.д. ...
Нет они пишут в stdout, а оттуда их перенаправляет система инициализации в /var/log
А как иначе если используется например LD_LIBRARY_PATH? Стим тот же примерно так и работает
Тут надо было бы уточнить, говорим мы о логировании в GUI-приложениях в целом или UNIX only
https://t.me/supapro/927839 Вот изначальный вопрос
Про ОС ни слова.
Судя по вашим советам, опыта у вас пока мало. давайте вы не будете давать сомнительных советов, явно не сочитающихся с заданным вопросом?
Ладно. Ну просто я думал, что так, как делает UNIX-системы наверное правильно. Не дураки ведь её писали?
Так делают все приложения в unix или только демоны?
Не все, но многие. Например тот же GIMP: http://i115.fastpic.ru/big/2021/0719/30/47d186979265a32d080695b805e75b30.png
Ой https://gitlab.gnome.org/GNOME/gimp/-/blob/master/app/core/gimp-tags.c#L98 Ой https://people.gnome.org/~desrt/glib-docs/glib-Message-Logging.html тут тоже логгер Ой
https://github.com/GNOME/glib/blob/ff8b43a15498aeafe392acd97d1ff1107252227e/glib/gmessages.h#L320
https://github.com/GNOME/glib/blob/ff8b43a15498aeafe392acd97d1ff1107252227e/glib/gmessages.c#L1977
Но пишет-то он в stdout.
Вам не кажется что там чуть сложнее чем простой вывод в stdout?
Если у тебя проблема именно с сохранением логов, то вопрос связан с системой. Например, в юниксе стандарт это syslog.
>
А что странного? и плохого ничего нет
Тоже ничего плохого.
По-вашему совет использовать std::printf вместо std::thread - хороший? Окей, хорошо, раз вы так считаете, то пожалуй вынужден согласиться
А при чём тут потоки управления ?
Мешанина из логов - это хорошо и правильно?
не мешанина, а сортированное по времени))) Предложение то было такое
Если у тебя несколько потоков без каких-либо блокировок херачат в stdout то у тебя будут слова вперемешку а не сортировка по времени
насколько я помню printf будет выводить сообщения полностью, там какая то синхронизация присутствует. Но вообще просто делаешь по файлику на поток.....
Все чудесней и чудесней
так только std::syncstream умеет, насколько я помню
Ты думаешь, там внутри нет синхронизации ?
Обсуждают сегодня