#include <iostream>
#include <sstream>
#include <string>

typedef int LogLevel;

bool isEnabled(LogLevel l){
  return true;
}

namespace logger{
  void log(LogLevel l, std::string const& msg){
    std::cout << "(Level: " << l << "): " << msg << "\n";
  }
}

#define DEBUG_LOG(Level, What) \
  isEnabled(Level) && scoped_logger(Level, __FILE__, __LINE__).stream() << What

struct scoped_logger
{
  scoped_logger(LogLevel level, char const* file, unsigned line)
    : _level(level)
  { _ss << file << "(" << line << ") [" << getpid() << "] : "; }

  std::stringstream& stream(){ return _ss; }
  ~scoped_logger(){ logger::log(_level, _ss.str()); }
private:
  std::stringstream _ss;
  LogLevel _level;
};

int main(){
  DEBUG_LOG(0, "Hello, " << "World!");
}
