{"id":18879900,"url":"https://github.com/gusenov/examples-spdlog","last_synced_at":"2026-02-20T05:30:15.344Z","repository":{"id":130182039,"uuid":"482148152","full_name":"gusenov/examples-spdlog","owner":"gusenov","description":"Примеры логирования с помощью C++ библиотеки spdlog.","archived":false,"fork":false,"pushed_at":"2022-08-06T09:48:49.000Z","size":247,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-31T03:12:41.907Z","etag":null,"topics":["cpp","examples","logging-library","spdlog"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gusenov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-16T03:47:43.000Z","updated_at":"2023-04-13T08:36:10.000Z","dependencies_parsed_at":"2023-03-20T18:32:48.553Z","dependency_job_id":null,"html_url":"https://github.com/gusenov/examples-spdlog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fexamples-spdlog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fexamples-spdlog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fexamples-spdlog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fexamples-spdlog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gusenov","download_url":"https://codeload.github.com/gusenov/examples-spdlog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239841742,"owners_count":19705981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","examples","logging-library","spdlog"],"created_at":"2024-11-08T06:40:21.718Z","updated_at":"2026-02-20T05:30:15.302Z","avatar_url":"https://github.com/gusenov.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"spdlog - header only библиотека.\nПредоставляет python like formatting API используя идущий в комплекте [fmt](https://github.com/fmtlib/fmt) lib (см. [reference](https://fmt.dev/latest/syntax.html)).\nspdlog использует подход \"include what you need\" - в коде следует подключать только фактически используемые фичи.\n\n# Thread Safety\n\nДля создания thread safe логгеров используются ```_mt``` фабричные функции:\n\n- ```auto logger = spdlog::basic_logger_mt(...);```\n\nДля создания single threaded логгеров используются ```_st``` фабричные функции:\n\n- ```auto logger = spdlog::basic_logger_st(...);```\n\nКаждый логгер содержит vector из одного или нескольких ```std::shared_ptr\u003cspdlog::sink\u003e```.\nНа каждом log call (если log level правильный) logger на каждом из них вызывает функцию ```sink(log_msg)```.\nСуффиксы sink'ов говорят об их thread safety:\n\n- ```_mt``` (multi threaded) - могут использоваться одновременно из множества потоков.\n   - ```daily_file_sink_mt```\n- ```_st``` (single threaded) - быстрее потому что нет блокировок.\n   - ```daily_file_sink_st```\n\nСледующие функции не могут быть вызваны concurrently из множества потоков на одном и том же logger объекте:\n\n- ```set_error_handler(log_err_handler);```\n- ```logger::sinks()``` - возвращает reference на non thread safe vector, поэтому нельзя его модифицировать concurrently\n   - например, ```logger-\u003esinks().push_back(new_sink);```\n\nЭти ограничения применимы ко всем видам логгеров (```_mt``` или ```_st```).\n\n# Sinks\n\nНачиная с версии 1.5.0, spdlog при необходимости создает папки содержащие log файлы. \nРанее папки нужно было создавать вручную.\n\n| ```#include \"spdlog/sinks/.h\"``` | ```spdlog::sinks::```  | ```spdlog::``` |\n| - | - | - |\n| ```ansicolor_sink``` | ```ansicolor_stdout_sink_st``` | |\n| ```ansicolor_sink``` | ```ansicolor_stdout_sink_mt``` | |\n| ```ansicolor_sink``` | ```ansicolor_stderr_sink_st``` | |\n| ```ansicolor_sink``` | ```ansicolor_stderr_sink_mt``` | |\n| ```stdout_color_sinks``` | ```stdout_color_sink_st``` | ```stdout_color_st``` |\n| ```stdout_color_sinks``` | ```stdout_color_sink_mt``` | ```stdout_color_mt``` |\n| ```stdout_color_sinks``` | ```stderr_color_sink_st``` | ```stderr_color_st``` |\n| ```stdout_color_sinks``` | ```stderr_color_sink_mt``` | ```stderr_color_mt``` |\n| ```stdout_sinks``` | ```stdout_sink_st``` | ```stdout_logger_st``` |\n| ```stdout_sinks``` | ```stdout_sink_mt``` | ```stdout_logger_mt``` |\n| ```stdout_sinks``` | ```stderr_sink_st``` | ```stderr_logger_st``` |\n| ```stdout_sinks``` | ```stderr_sink_mt``` | ```stderr_logger_mt``` |\n| ```basic_file_sink``` | ```basic_file_sink_st``` | ```basic_logger_st``` |\n| ```basic_file_sink``` | ```basic_file_sink_mt``` | ```basic_logger_mt``` |\n| ```rotating_file_sink``` | ```rotating_file_sink_st``` | ```rotating_logger_st``` |\n| ```rotating_file_sink``` | ```rotating_file_sink_mt``` | ```rotating_logger_mt``` |\n| ```daily_file_sink``` | ```daily_file_sink_st``` | ```daily_logger_st``` |\n| ```daily_file_sink``` | ```daily_file_sink_mt``` | ```daily_logger_mt``` |\n| ```daily_file_sink``` | ```daily_file_format_sink_st``` | ```daily_logger_format_st``` |\n| ```daily_file_sink``` | ```daily_file_format_sink_mt``` | ```daily_logger_format_mt``` |\n| ```hourly_file_sink``` | ```hourly_file_sink_st``` | ```hourly_logger_st``` |\n| ```hourly_file_sink``` | ```hourly_file_sink_mt``` | ```hourly_logger_mt``` |\n| ```ostream_sink``` | ```ostream_sink_st``` | |\n| ```ostream_sink``` | ```ostream_sink_mt``` | |\n| ```dist_sink``` | ```dist_sink_st``` | |\n| ```dist_sink``` | ```dist_sink_mt``` | |\n| ```dup_filter_sink``` | ```dup_filter_sink_st``` | |\n| ```dup_filter_sink``` | ```dup_filter_sink_mt``` | |\n| ```ringbuffer_sink``` | ```ringbuffer_sink_st``` | |\n| ```ringbuffer_sink``` | ```ringbuffer_sink_mt``` | |\n| ```syslog_sink``` | ```syslog_sink_st``` | ```syslog_logger_st``` |\n| ```syslog_sink``` | ```syslog_sink_mt``` | ```syslog_logger_mt``` |\n| ```tcp_sink``` | ```tcp_sink_st``` | |\n| ```tcp_sink``` | ```tcp_sink_mt``` | |\n| ```udp_sink``` | ```udp_sink_st``` | |\n| ```udp_sink``` | ```udp_sink_mt``` | ```udp_logger_mt``` |\n| ```null_sink``` | ```null_sink_st``` | ```null_logger_st``` |\n| ```null_sink``` | ```null_sink_mt``` | ```null_logger_mt``` |\n\n# Usage samples\n\n- 1 Быстрый старт\n   - [Hello, World!](hello)\n   - [Подход \"include what you need\"](include-what-you-need)\n   - [Асинхронный логгер использующий фабричный метод](asynchronous-logger-using-factory-method)\n   - [Создание асинхронного логгера и изменение настроек пула потоков](async-logger-and-thread-pool-settings)\n   - [**Несколько логгеров совместно использующих один файл (sink)**](multiple-loggers-sharing-same-sink)\n   - [**Логгер со множеством sink'ов**](logger-with-multiple-sinks)\n   - [Макросы логирования](logging-macros)\n   - [Логирование пользовательских объектов](log-user-defined-objects)\n   - [Логирование пользовательских объектов с продвинутым форматированием](log-user-defined-objects-advanced-formatting)\n- 2 Создание логгеров\n   - [Создание логгера с помощью фабричной функции](create-logger-using-factory-fn)\n   - [**Доступ к логгеру через ```spdlog::get(\"...\")```**](spdlog-get)\n   - [Логгеры созданные вручную, т.е. прямым конструированием, автоматически не регистрируются](manually-created-logger)\n   - [Создание rotating файлового логгера](create-rotating-file-logger)\n   - [Создание асинхронного логгера](create-async-logger)\n   - [Создание логгера вручную](create-logger-manually)\n   - [Создание логгера со множеством sink'ов](create-logger-with-multiple-sinks)\n   - [Создание нескольких файловых логгеров с одним и тем же выходным файлом](create-multiple-file-loggers-with-same-output-file)\n- [Basic usage](basic-usage)\n- [Create stdout/stderr logger object](create-stdout-stderr-logger-object)\n- [Basic file logger](basic-file-logger)\n- [Исследование API](aio)\n- [Sink'и одного типа но с разным уровнем логирования](same-sink-type-but-different-log-level)\n- [Генерация сигнатур виртуальных методов печати для обертки вокруг логгера(signatures)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusenov%2Fexamples-spdlog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgusenov%2Fexamples-spdlog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusenov%2Fexamples-spdlog/lists"}