123 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*************************************************************************/
 | 
						|
/* spdlog - an extremely fast and easy to use c++11 logging library.     */
 | 
						|
/* Copyright (c) 2014 Gabi Melman.                                       */
 | 
						|
/*                                                                       */
 | 
						|
/* Permission is hereby granted, free of charge, to any person obtaining */
 | 
						|
/* a copy of this software and associated documentation files (the       */
 | 
						|
/* "Software"), to deal in the Software without restriction, including   */
 | 
						|
/* without limitation the rights to use, copy, modify, merge, publish,   */
 | 
						|
/* distribute, sublicense, and/or sell copies of the Software, and to    */
 | 
						|
/* permit persons to whom the Software is furnished to do so, subject to */
 | 
						|
/* the following conditions:                                             */
 | 
						|
/*                                                                       */
 | 
						|
/* The above copyright notice and this permission notice shall be        */
 | 
						|
/* included in all copies or substantial portions of the Software.       */
 | 
						|
/*                                                                       */
 | 
						|
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
 | 
						|
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
 | 
						|
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
 | 
						|
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
 | 
						|
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
 | 
						|
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
 | 
						|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 | 
						|
/*************************************************************************/
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <string>
 | 
						|
#include <initializer_list>
 | 
						|
#include <chrono>
 | 
						|
#include <memory>
 | 
						|
 | 
						|
//visual studio does not support noexcept yet
 | 
						|
#ifndef _MSC_VER
 | 
						|
#define SPDLOG_NOEXCEPT noexcept
 | 
						|
#else
 | 
						|
#define SPDLOG_NOEXCEPT
 | 
						|
#endif
 | 
						|
 | 
						|
// under linux, use the much faster CLOCK_REALTIME_COARSE clock.
 | 
						|
// this clock is less accurate - accuracy  upto ~1ms under i386 and x86_64.
 | 
						|
// comment to use the regular (and slower) clock
 | 
						|
 | 
						|
#ifdef __linux__
 | 
						|
#define SPDLOG_CLOCK_COARSE
 | 
						|
#endif
 | 
						|
 | 
						|
namespace spdlog
 | 
						|
{
 | 
						|
 | 
						|
class formatter;
 | 
						|
 | 
						|
namespace sinks
 | 
						|
{
 | 
						|
class sink;
 | 
						|
}
 | 
						|
 | 
						|
// Common types across the lib
 | 
						|
using log_clock = std::chrono::system_clock;
 | 
						|
using sink_ptr = std::shared_ptr < sinks::sink > ;
 | 
						|
using sinks_init_list = std::initializer_list < sink_ptr > ;
 | 
						|
using formatter_ptr = std::shared_ptr<spdlog::formatter>;
 | 
						|
 | 
						|
//Log level enum
 | 
						|
namespace level
 | 
						|
{
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    trace    = 0,
 | 
						|
    debug    = 1,
 | 
						|
    info     = 2,
 | 
						|
    notice   = 3,
 | 
						|
    warn     = 4,
 | 
						|
    err      = 5,
 | 
						|
    critical = 6,
 | 
						|
    alert    = 7,
 | 
						|
    emerg    = 8,
 | 
						|
    off      = 9
 | 
						|
} level_enum;
 | 
						|
 | 
						|
static const char* level_names[] { "trace", "debug", "info", "notice", "warning", "error", "critical", "alert", "emerg", "off"};
 | 
						|
 | 
						|
static const char* short_level_names[] { "T", "D", "I", "N", "W", "E", "C", "A", "M", "O"};
 | 
						|
 | 
						|
inline const char* to_str(spdlog::level::level_enum l)
 | 
						|
{
 | 
						|
    return level_names[l];
 | 
						|
}
 | 
						|
 | 
						|
inline const char* to_short_str(spdlog::level::level_enum l)
 | 
						|
{
 | 
						|
    return short_level_names[l];
 | 
						|
}
 | 
						|
} //level
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Async overflow policy - block by default.
 | 
						|
//
 | 
						|
enum class async_overflow_policy
 | 
						|
{
 | 
						|
    block_retry, // Block / yield / sleep until message can be enqueued
 | 
						|
    discard_log_msg // Discard the message it enqueue fails
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Log exception
 | 
						|
//
 | 
						|
class spdlog_ex : public std::exception
 | 
						|
{
 | 
						|
public:
 | 
						|
    spdlog_ex(const std::string& msg) :_msg(msg) {}
 | 
						|
    const char* what() const SPDLOG_NOEXCEPT override
 | 
						|
    {
 | 
						|
        return _msg.c_str();
 | 
						|
    }
 | 
						|
private:
 | 
						|
    std::string _msg;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
} //spdlog
 |