diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2018-05-20 11:16:11 +0200 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2018-05-20 11:16:11 +0200 |
commit | 08d281d57e9d4366891cdb6d68075cfaa538ea1e (patch) | |
tree | 40a5deefbe7d73d41b4a7986cf11b203c4f842d2 /libnitrokey-3.3/log.cc | |
parent | 00bca17a32e8d14085b5ee417421b88a4d3d9e3b (diff) | |
download | nitrokey-sys-rs-08d281d57e9d4366891cdb6d68075cfaa538ea1e.tar.gz nitrokey-sys-rs-08d281d57e9d4366891cdb6d68075cfaa538ea1e.tar.bz2 |
Add source code for libnitrokey-3.3
To make the build process easier, we can include the source code for
libnitrokey-3.3. Now bindgen can access the header file directly. We
might even want to compile our own libnitrokey.
Diffstat (limited to 'libnitrokey-3.3/log.cc')
-rw-r--r-- | libnitrokey-3.3/log.cc | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/libnitrokey-3.3/log.cc b/libnitrokey-3.3/log.cc new file mode 100644 index 0000000..06acee7 --- /dev/null +++ b/libnitrokey-3.3/log.cc @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2015-2018 Nitrokey UG + * + * This file is part of libnitrokey. + * + * libnitrokey is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * libnitrokey is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libnitrokey. If not, see <http://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: LGPL-3.0 + */ + +#include "log.h" +#include <iostream> +#include <ctime> +#include <iomanip> + +#include <sstream> + +namespace nitrokey { + namespace log { + + Log *Log::mp_instance = nullptr; + StdlogHandler stdlog_handler; + + std::string Log::prefix = ""; + + + std::string LogHandler::loglevel_to_str(Loglevel lvl) { + switch (lvl) { + case Loglevel::DEBUG_L1: + return std::string("DEBUG_L1"); + case Loglevel::DEBUG_L2: + return std::string("DEBUG_L2"); + case Loglevel::DEBUG: + return std::string("DEBUG"); + case Loglevel::INFO: + return std::string("INFO"); + case Loglevel::WARNING: + return std::string("WARNING"); + case Loglevel::ERROR: + return std::string("ERROR"); + } + return std::string(""); + } + + void Log::operator()(const std::string &logstr, Loglevel lvl) { + if (mp_loghandler != nullptr){ + if ((int) lvl <= (int) m_loglevel) mp_loghandler->print(prefix+logstr, lvl); + } + } + + void Log::setPrefix(const std::string prefix) { + if (!prefix.empty()){ + Log::prefix = "["+prefix+"]"; + } else { + Log::prefix = ""; + } + } + + void StdlogHandler::print(const std::string &str, Loglevel lvl) { + std::string s = format_message_to_string(str, lvl); + std::clog << s; + } + + void FunctionalLogHandler::print(const std::string &str, Loglevel lvl) { + std::string s = format_message_to_string(str, lvl); + log_function(s); + } + + std::string LogHandler::format_message_to_string(const std::string &str, const Loglevel &lvl) { + static bool last_short = false; + if (str.length() == 1){ + last_short = true; + return str; + } + time_t t = time(nullptr); + tm tm = *localtime(&t); + + std::stringstream s; + s + << (last_short? "\n" : "") + << "[" << std::put_time(&tm, "%c") << "]" + << "[" << loglevel_to_str(lvl) << "]\t" + << str << std::endl; + last_short = false; + return s.str(); + } + + FunctionalLogHandler::FunctionalLogHandler(log_function_type _log_function) { + log_function = _log_function; + } + } +} |