Advertisement
Delfigamer

utils/logger.hpp

Feb 24th, 2015
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #ifndef UTILS_LOGGER_HPP__
  2. #define UTILS_LOGGER_HPP__ 1
  3.  
  4. #include <cstdio>
  5. #include <cstdarg>
  6. #include <mutex>
  7.  
  8. namespace utils {
  9.     class Logger {
  10.     private:
  11.         FILE* m_file;
  12.         std::recursive_mutex m_mutex;
  13.         bool m_newline;
  14.        
  15.         void linestart();
  16.        
  17.     public:
  18.         Logger() = delete;
  19.         explicit Logger( char const* path );
  20.         Logger( Logger const& ) = delete;
  21.         Logger( Logger&& ) = delete;
  22.         ~Logger();
  23.        
  24.         void writeraw( char const* str );
  25.         __attribute__(( __format__( gnu_printf, 2, 0 ) )) void vwrite( char const* format, va_list args );
  26.         __attribute__(( __format__( gnu_printf, 2, 3 ) )) void write( char const* format, ... );
  27.         __attribute__(( __format__( gnu_printf, 2, 0 ) )) void vwriteln( char const* format, va_list args );
  28.         __attribute__(( __format__( gnu_printf, 2, 3 ) )) void writeln( char const* format, ... );
  29.         void writeln();
  30.         void flush();
  31.         void lock();
  32.         void unlock();
  33.     };
  34.    
  35.     Logger& MainLogger();
  36. }
  37.  
  38. #define LOG( ... ) ( \
  39.         utils::MainLogger().lock() , \
  40.         utils::MainLogger().write( "[%48s:%24s@%4i]\t", __FILE__, __FUNCTION__, __LINE__ ) , \
  41.         utils::MainLogger().writeln( __VA_ARGS__ ) , \
  42.         utils::MainLogger().unlock() \
  43.     )
  44.  
  45. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement