00001 #include "logger.h"
00002
00003 namespace n2nc {
00004 namespace system {
00006 bool Logger::m_isloaded = false;
00007 std::ostringstream Logger::m_cout ;
00008 std::ostringstream Logger::m_os;
00009 std::string Logger::m_logfile ;
00010 Logger* Logger::m_glb_logger = NULL ;
00011 sync::Mutex Logger::m_std_lock ;
00012 sync::Mutex Logger::m_err_lock ;
00013
00014
00015 Logger::Logger(){
00016 Logger::m_isloaded = false ;
00017 Logger::m_cout << "lol" ;
00018 }
00019 Logger::~Logger()
00020 {
00021 }
00022
00023 std::ostringstream& Logger::get(){
00024 return Logger::m_os ;
00025 }
00026
00027 std::ostringstream& Logger::gett(){
00028 Logger::m_os << "Thread: " << pthread_self() << " " ;
00029 return Logger::m_os ;
00030 }
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 int Logger::out(std::string &str){
00055 std::cout << str << std::endl ;
00056 }
00057 int Logger::out(std::string str){
00058 std::cout << str << std::endl ;
00059 }
00060 int Logger::out(char *str){
00061 std::cout << str << std::endl ;
00062 }
00063
00064
00065
00066 void Logger::print(char *frm,...){
00067 va_list args;
00068 FILE* logfd=0;
00069
00070 va_start(args,frm);
00071 if (!logfd){
00072
00073 std::string basename(getenv("HOME"));
00074 std::string filename("/n2nc.log");
00075 std::string path(basename + filename);
00076 logfd=fopen(path.c_str(),"w+");
00077 }
00078
00079 switch (2){
00080 case 1:
00081 printf("THREAD %u: ",pthread_self());
00082 vprintf(frm,args);
00083 break;
00084 case 2:
00085 fprintf(stderr,"THREAD %u: ",pthread_self());
00086 vfprintf(stderr,frm,args);
00087 break;
00088 case 3:
00089 vfprintf(logfd,frm,args);
00090 break;
00091 }
00092 va_end(args);
00093 }
00094
00095
00096 std::ostream& Logger::dlog(){
00097
00098
00099 std::ostringstream *os = new std::ostringstream();
00100 Logger::m_err_lock.lock();
00101 return *os ;
00102 }
00103
00104 std::ostream &Logger::dlog(std::ostream &os){
00105 return os ;
00106 }
00107
00108
00109
00110
00111 void operator<<(std::ostream& os,Logger::endl_flush_t dummy){
00112 std::cout << "destroy stream" << std::endl ;
00113 os << std::endl ;
00114 std::cout << static_cast<std::ostringstream*>(&os)->str() << std::endl ;
00115 delete &os ;
00116 }
00117
00118 void operator<<(std::ostream& os,Logger::flush_t dummy){
00119 std::cout << "destroy stream" << std::endl ;
00120 os << std::endl ;
00121 std::cout << static_cast<std::ostringstream*>(&os)->str();
00122 delete &os ;
00123 }
00124
00125
00126
00127
00128 }
00129 }
00130
00131
00132