63 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef JSON_LOGGER_HPP
 | 
						|
#define JSON_LOGGER_HPP
 | 
						|
 | 
						|
#include "osrm/json_container.hpp"
 | 
						|
 | 
						|
#include <boost/thread/tss.hpp>
 | 
						|
 | 
						|
#include <string>
 | 
						|
#include <unordered_map>
 | 
						|
 | 
						|
namespace osrm
 | 
						|
{
 | 
						|
namespace util
 | 
						|
{
 | 
						|
namespace json
 | 
						|
{
 | 
						|
 | 
						|
// Used to append additional debugging information to the JSON response in a
 | 
						|
// thread safe manner.
 | 
						|
class Logger
 | 
						|
{
 | 
						|
    using MapT = std::unordered_map<std::string, Value>;
 | 
						|
 | 
						|
  public:
 | 
						|
    static Logger *get()
 | 
						|
    {
 | 
						|
        static Logger logger;
 | 
						|
 | 
						|
        bool return_logger = true;
 | 
						|
#ifdef NDEBUG
 | 
						|
        return_logger = false;
 | 
						|
#endif
 | 
						|
#ifdef ENABLE_JSON_LOGGING
 | 
						|
        return_logger = true;
 | 
						|
#endif
 | 
						|
 | 
						|
        if (return_logger)
 | 
						|
        {
 | 
						|
            return &logger;
 | 
						|
        }
 | 
						|
 | 
						|
        return nullptr;
 | 
						|
    }
 | 
						|
 | 
						|
    void initialize(const std::string &name)
 | 
						|
    {
 | 
						|
        if (!map.get())
 | 
						|
        {
 | 
						|
            map.reset(new MapT());
 | 
						|
        }
 | 
						|
        (*map)[name] = Object();
 | 
						|
    }
 | 
						|
 | 
						|
    void render(const std::string &name, Object &obj) const { obj.values["debug"] = map->at(name); }
 | 
						|
 | 
						|
    boost::thread_specific_ptr<MapT> map;
 | 
						|
};
 | 
						|
}
 | 
						|
}
 | 
						|
}
 | 
						|
 | 
						|
#endif /* JSON_LOGGER_HPP */
 |