diff options
author | Marcus Müller <mmueller@gnuradio.org> | 2021-08-03 13:05:37 +0200 |
---|---|---|
committer | mormj <34754695+mormj@users.noreply.github.com> | 2021-11-19 14:00:08 -0500 |
commit | 1bb08e8004aa8ba6637db3f06abdc283ea56c18a (patch) | |
tree | 39140de01d77dee6999f85e90d9fa9dc7cf8471f /gnuradio-runtime/python | |
parent | cb60862fd493a0141946ff9dddc5a98c9c67690b (diff) |
logging core: replace log4cpp by spdlog
also: enable formerly disabled qa_logger tests
This replaces log4cpp with spdlog.
Signed-off-by: Marcus Müller <mmueller@gnuradio.org>
Diffstat (limited to 'gnuradio-runtime/python')
4 files changed, 118 insertions, 259 deletions
diff --git a/gnuradio-runtime/python/gnuradio/gr/__init__.py b/gnuradio-runtime/python/gnuradio/gr/__init__.py index 5103bf97a7..0715a641ea 100644 --- a/gnuradio-runtime/python/gnuradio/gr/__init__.py +++ b/gnuradio-runtime/python/gnuradio/gr/__init__.py @@ -1,5 +1,6 @@ # # Copyright 2003-2012, 2018 Free Software Foundation, Inc. +# Copyright 2021 Marcus Müller # # This file is part of GNU Radio # @@ -39,19 +40,7 @@ from .gateway import basic_block, sync_block, decim_block, interp_block, py_io_s log = gr.logger("log") log.set_level(prefs().get_string("LOG", "log_level", "notset")) -log_file = gr.prefs().get_string("LOG", "log_file", ""); -if(log_file == "stderr" or log_file == "stdout"): - log.add_console_appender(log_file, "gr::log %d :%p: %m%n") -else: - log.add_file_appender(log_file, True, "%r :%p: %c{1} - %m%n") - log_debug = gr.logger("log_debug") -log_debug.set_level(prefs().get_string("LOG", "debug_level", "notset")) -log_debug_file = gr.prefs().get_string("LOG", "debug_file", ""); -if(log_debug_file == "stderr" or log_file == "stdout"): - log_debug.add_console_appender(log_debug_file, "gr::log %d :%p: %m%n") -else: - log_debug.add_file_appender(log_debug_file, True, "%r :%p: %c{1} - %m%n") io_signaturev = io_signature.makev io_signature3 = io_signature.make3 diff --git a/gnuradio-runtime/python/gnuradio/gr/bindings/docstrings/logger_pydoc_template.h b/gnuradio-runtime/python/gnuradio/gr/bindings/docstrings/logger_pydoc_template.h index 84d2e5e9cf..a52071098f 100644 --- a/gnuradio-runtime/python/gnuradio/gr/bindings/docstrings/logger_pydoc_template.h +++ b/gnuradio-runtime/python/gnuradio/gr/bindings/docstrings/logger_pydoc_template.h @@ -16,132 +16,26 @@ static const char* __doc_gr_logger = R"doc()doc"; - - -static const char* __doc_gr_logger_logger_0 = R"doc()doc"; - - -static const char* __doc_gr_logger_logger_1 = R"doc()doc"; - - +static const char* __doc_gr_logger_logger = R"doc()doc"; static const char* __doc_gr_logger_set_level = R"doc()doc"; - - static const char* __doc_gr_logger_get_level = R"doc()doc"; - - +static const char* __doc_gr_logger_get_string_level = R"doc()doc"; +static const char* __doc_gr_logger_trace = R"doc()doc"; static const char* __doc_gr_logger_debug = R"doc()doc"; - - static const char* __doc_gr_logger_info = R"doc()doc"; - - static const char* __doc_gr_logger_notice = R"doc()doc"; - - static const char* __doc_gr_logger_warn = R"doc()doc"; - - static const char* __doc_gr_logger_error = R"doc()doc"; - - static const char* __doc_gr_logger_crit = R"doc()doc"; - - static const char* __doc_gr_logger_alert = R"doc()doc"; - - static const char* __doc_gr_logger_fatal = R"doc()doc"; - - static const char* __doc_gr_logger_emerg = R"doc()doc"; - -static const char* __doc_gr_logger_errorIF = R"doc()doc"; - - -static const char* __doc_gr_logger_log_assert = R"doc()doc"; - - -static const char* __doc_gr_logger_add_console_appender = R"doc()doc"; - - -static const char* __doc_gr_logger_set_console_appender = R"doc()doc"; - - -static const char* __doc_gr_logger_add_file_appender = R"doc()doc"; - - -static const char* __doc_gr_logger_set_file_appender = R"doc()doc"; - - -static const char* __doc_gr_logger_add_rollingfile_appender = R"doc()doc"; - - -static const char* __doc_gr_logger_config = R"doc()doc"; - - -static const char* __doc_gr_logger_config_get_filename = R"doc()doc"; - - -static const char* __doc_gr_logger_config_get_watch_period = R"doc()doc"; - - -static const char* __doc_gr_logger_config_load_config = R"doc()doc"; - - -static const char* __doc_gr_logger_config_stop_watch = R"doc()doc"; - - -static const char* __doc_gr_logger_config_reset_config = R"doc()doc"; - - -static const char* __doc_gr_configure_default_loggers = R"doc()doc"; - - -static const char* __doc_gr_update_logger_alias = R"doc()doc"; - - -static const char* __doc_gr_logger_get_logger = R"doc()doc"; - - -static const char* __doc_gr_logger_load_config = R"doc()doc"; - - -static const char* __doc_gr_logger_reset_config = R"doc()doc"; - - -static const char* __doc_gr_logger_set_level_0 = R"doc()doc"; - - -static const char* __doc_gr_logger_set_level_1 = R"doc()doc"; - - -static const char* __doc_gr_logger_get_level_0 = R"doc()doc"; - - -static const char* __doc_gr_logger_get_level_1 = R"doc()doc"; - - -static const char* __doc_gr_logger_add_appender = R"doc()doc"; - - -static const char* __doc_gr_logger_set_appender = R"doc()doc"; - - -// static const char *__doc_gr_logger_add_console_appender = R"doc()doc"; - - -// static const char *__doc_gr_logger_set_console_appender = R"doc()doc"; - - -// static const char *__doc_gr_logger_add_file_appender = R"doc()doc"; - - -// static const char *__doc_gr_logger_set_file_appender = R"doc()doc"; - - -// static const char *__doc_gr_logger_add_rollingfile_appender = R"doc()doc"; - - -static const char* __doc_gr_logger_get_logger_names = R"doc()doc"; +static const char* __doc_gr_logging_singleton = R"doc()doc"; +static const char* __doc_gr_logging_default_level = R"doc()doc"; +static const char* __doc_gr_logging_debug_level = R"doc()doc"; +static const char* __doc_gr_logging_add_default_sink = R"doc()doc"; +static const char* __doc_gr_logging_add_debug_sink = R"doc()doc"; +static const char* __doc_gr_logging_add_default_console_sink = R"doc()doc"; +static const char* __doc_gr_logging_add_debug_console_sink = R"doc()doc"; +static const char* __doc_gr_logging_default_pattern = R"doc()doc"; diff --git a/gnuradio-runtime/python/gnuradio/gr/bindings/logger_python.cc b/gnuradio-runtime/python/gnuradio/gr/bindings/logger_python.cc index 0245cf53dd..f82cfaaebf 100644 --- a/gnuradio-runtime/python/gnuradio/gr/bindings/logger_python.cc +++ b/gnuradio-runtime/python/gnuradio/gr/bindings/logger_python.cc @@ -1,5 +1,6 @@ /* * Copyright 2020 Free Software Foundation, Inc. + * Copyright 2021 Marcus Müller * * This file is part of GNU Radio * @@ -14,152 +15,127 @@ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(logger.h) */ -/* BINDTOOL_HEADER_FILE_HASH(6a082fd5563025225373d3f117d2134c) */ +/* BINDTOOL_HEADER_FILE_HASH(7f3cbb9463e52829b27c58d9dd41b422) */ /***********************************************************************************/ #include <pybind11/complex.h> #include <pybind11/pybind11.h> #include <pybind11/stl.h> +#include <spdlog/common.h> namespace py = pybind11; #include <gnuradio/logger.h> +#include <logger_pydoc.h> void bind_logger(py::module& m) { - using logger = gr::logger; - using logger_config = gr::logger_config; + py::enum_<spdlog::level::level_enum>(m, "level_enum") + // Values directly from spdlog/common.h + .value("trace", spdlog::level::trace) + .value("debug", spdlog::level::debug) + .value("info", spdlog::level::info) + .value("warn", spdlog::level::warn) + .value("err", spdlog::level::err) + .value("critical", spdlog::level::critical) + .value("off", spdlog::level::off); + using logger = gr::logger; - py::class_<logger, std::shared_ptr<logger>>(m, "logger") + py::class_<logger, std::shared_ptr<logger>>(m, "logger", D(logger)) - .def(py::init<std::string>(), py::arg("logger_name")) + .def(py::init<std::string>(), py::arg("logger_name"), D(logger, logger)) .def(py::init<gr::logger const&>(), py::arg("arg0")) - .def("set_level", &logger::set_level, py::arg("level")) - .def("get_level", &logger::get_level, py::arg("level")) - .def("debug", &logger::debug, py::arg("msg")) - .def("info", &logger::info, py::arg("msg")) - .def("notice", &logger::notice, py::arg("msg")) - .def("warn", &logger::warn, py::arg("msg")) - .def("error", &logger::error, py::arg("msg")) - .def("crit", &logger::crit, py::arg("msg")) - .def("alert", &logger::alert, py::arg("msg")) - .def("fatal", &logger::fatal, py::arg("msg")) - .def("emerg", &logger::emerg, py::arg("msg")) - .def("errorIF", &logger::errorIF, py::arg("cond"), py::arg("msg")) - .def("log_assert", &logger::log_assert, py::arg("cond"), py::arg("msg")) - .def("add_console_appender", - &logger::add_console_appender, - py::arg("target"), - py::arg("pattern")) - .def("set_console_appender", - &logger::set_console_appender, - py::arg("target"), - py::arg("pattern")) - .def("add_file_appender", - &logger::add_file_appender, - py::arg("filename"), - py::arg("append"), - py::arg("pattern")) - .def("set_file_appender", - &logger::set_file_appender, - py::arg("filename"), - py::arg("append"), - py::arg("pattern")) - .def("add_rollingfile_appender", - &logger::add_rollingfile_appender, - py::arg("filename"), - py::arg("filesize"), - py::arg("bkup_index"), - py::arg("append"), - py::arg("mode"), - py::arg("pattern")); - - - py::class_<logger_config, std::shared_ptr<logger_config>>(m, "logger_config") - - - .def_static("get_filename", &logger_config::get_filename) - .def_static("get_watch_period", &logger_config::get_watch_period) - .def_static("load_config", - &logger_config::load_config, - py::arg("filename"), - py::arg("watch_period") = 0) - .def_static("stop_watch", &logger_config::stop_watch) - .def_static("reset_config", &logger_config::reset_config); + .def("set_level", + py::overload_cast<const std::string&>(&logger::set_level), + py::arg("level"), + D(logger, set_level)) + .def("set_level", + py::overload_cast<const gr::log_level>(&logger::set_level), + py::arg("level"), + D(logger, set_level)) + .def("get_level", + py::overload_cast<std::string&>(&logger::get_level, py::const_), + py::arg("level"), + D(logger, get_level)) + .def("get_string_level", &logger::get_string_level, D(logger, get_string_level)) + .def( + "trace", + [](logger& log, const std::string& msg) { log.trace(msg); }, + py::arg("msg"), + D(logger, trace)) + .def( + "debug", + [](logger& log, const std::string& msg) { log.debug(msg); }, + py::arg("msg"), + D(logger, debug)) + .def( + "info", + [](logger& log, const std::string& msg) { log.info(msg); }, + py::arg("msg"), + D(logger, info)) + .def( + "notice", + [](logger& log, const std::string& msg) { log.notice(msg); }, + py::arg("msg"), + D(logger, notice)) + .def( + "warn", + [](logger& log, const std::string& msg) { log.warn(msg); }, + py::arg("msg"), + D(logger, warn)) + .def( + "error", + [](logger& log, const std::string& msg) { log.error(msg); }, + py::arg("msg"), + D(logger, error)) + .def( + "crit", + [](logger& log, const std::string& msg) { log.crit(msg); }, + py::arg("msg"), + D(logger, crit)) + .def( + "alert", + [](logger& log, const std::string& msg) { log.alert(msg); }, + py::arg("msg"), + D(logger, alert)) + .def( + "fatal", + [](logger& log, const std::string& msg) { log.fatal(msg); }, + py::arg("msg"), + D(logger, fatal)) + .def( + "emerg", + [](logger& log, const std::string& msg) { log.emerg(msg); }, + py::arg("msg"), + D(logger, emerg)); + using logging = gr::logging; - // m.def("configure_default_loggers",&gr::configure_default_loggers, - // py::arg("l"), - // py::arg("d"), - // py::arg("name") - // ); - m.def("update_logger_alias", - &gr::update_logger_alias, - py::arg("name"), - py::arg("alias")); - m.def("logger_get_logger", &gr::logger_get_logger, py::arg("name")); - m.def("logger_get_configured_logger", - &gr::logger_get_configured_logger, - py::arg("name")); - m.def("logger_load_config", &gr::logger_load_config, py::arg("config_filename") = ""); - m.def("gr_logger_reset_config", &gr_logger_reset_config); - m.def("logger_set_level", - (void (*)(gr::logger_ptr, std::string const&)) & gr::logger_set_level, - py::arg("logger"), - py::arg("level")); - m.def("logger_set_level", - (void (*)(gr::logger_ptr, log4cpp::Priority::Value)) & gr::logger_set_level, - py::arg("logger"), - py::arg("level")); - m.def("logger_get_level", - (void (*)(gr::logger_ptr, std::string&)) & gr::logger_get_level, - py::arg("logger"), - py::arg("level")); - // m.def("logger_get_level",(void (*)(gr::logger_ptr, log4cpp::Priority::Value - // &))&gr::logger_get_level, - // py::arg("logger"), - // py::arg("level") - // ); - // m.def("logger_add_appender",&gr::logger_add_appender, - // py::arg("logger"), - // py::arg("appender") - // ); // Not Implemented - // m.def("logger_set_appender",&gr::logger_set_appender, - // py::arg("logger"), - // py::arg("appender") - // ); // Not Implemented - m.def("logger_add_console_appender", - &gr::logger_add_console_appender, - py::arg("logger"), - py::arg("target"), - py::arg("pattern")); - m.def("logger_set_console_appender", - &gr::logger_set_console_appender, - py::arg("logger"), - py::arg("target"), - py::arg("pattern")); - m.def("logger_add_file_appender", - &gr::logger_add_file_appender, - py::arg("logger"), - py::arg("filename"), - py::arg("append"), - py::arg("pattern")); - m.def("logger_set_file_appender", - &gr::logger_set_file_appender, - py::arg("logger"), - py::arg("filename"), - py::arg("append"), - py::arg("pattern")); - m.def("logger_add_rollingfile_appender", - &gr::logger_add_rollingfile_appender, - py::arg("logger"), - py::arg("filename"), - py::arg("filesize"), - py::arg("bkup_index"), - py::arg("append"), - py::arg("mode"), - py::arg("pattern")); - m.def("logger_get_logger_names", &gr::logger_get_logger_names); + py::class_<logging, std::unique_ptr<logging, py::nodelete>>(m, "logging") + .def(py::init([]() { + return std::unique_ptr<logging, py::nodelete>(&logging::singleton()); + }), + D(logging, singleton)) + .def("default_level", &logging::default_level, D(logging, default_level)) + .def("debug_level", &logging::debug_level, D(logging, debug_level)) + .def("add_default_sink", + &logging::add_default_sink, + py::arg("sink"), + D(logging, add_default_sink)) + .def("add_debug_sink", + &logging::add_debug_sink, + py::arg("sink"), + D(logging, add_debug_sink)) + .def("add_default_console_sink", + &logging::add_default_console_sink, + D(logging, add_default_console_sink)) + .def("add_debug_console_sink", + &logging::add_debug_console_sink, + D(logging, add_debug_console_sink)) + .def_property_readonly_static( + "default_pattern", + [](py::object) { return logging::default_pattern; }, + D(logging, default_pattern)); } diff --git a/gnuradio-runtime/python/gnuradio/gr/bindings/thrift_application_base_python.cc b/gnuradio-runtime/python/gnuradio/gr/bindings/thrift_application_base_python.cc index 58042b8f61..b1ba2d2246 100644 --- a/gnuradio-runtime/python/gnuradio/gr/bindings/thrift_application_base_python.cc +++ b/gnuradio-runtime/python/gnuradio/gr/bindings/thrift_application_base_python.cc @@ -14,7 +14,7 @@ /* BINDTOOL_GEN_AUTOMATIC(0) */ /* BINDTOOL_USE_PYGCCXML(0) */ /* BINDTOOL_HEADER_FILE(thrift_application_base.h) */ -/* BINDTOOL_HEADER_FILE_HASH(194037fee916fc62be225080aa9229fc) */ +/* BINDTOOL_HEADER_FILE_HASH(6d4665cd29822e3b0f6248bf71aad6f8) */ /***********************************************************************************/ #include <pybind11/complex.h> |