From 469bbcf0701e1eb8a6670c23145b0da87357e178 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Sun, 25 Mar 2012 20:00:08 +0000 Subject: Code is all reorganized. We're about ready to release. I should write up a little explenation of the arrangement. --- src/stable/logger.cpp | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 src/stable/logger.cpp (limited to 'src/stable/logger.cpp') diff --git a/src/stable/logger.cpp b/src/stable/logger.cpp new file mode 100644 index 0000000..8e46390 --- /dev/null +++ b/src/stable/logger.cpp @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2007-2011 Xagasoft, All rights reserved. + * + * This file is part of the libbu++ library and is released under the + * terms of the license contained in the file LICENSE. + */ + +#include "bu/logger.h" +#include +#include +#include +#include +#include + +Bu::Logger::Logger() +{ + setFormat("%t"); +} + +Bu::Logger::~Logger() +{ +} + +void Bu::Logger::log( uint32_t nLevel, const char *sFile, const char *sFunction, int nLine, const char *sFormat, ...) +{ +#ifndef WIN32 + if( (nLevel&nLevelMask) == 0 ) + return; + + va_list ap; + va_start( ap, sFormat ); + char *text; + if( vasprintf( &text, sFormat, ap ) < 0 ) + { + printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! WTF?\n"); + return; + } + va_end(ap); + + time_t t = time(NULL); + + char *line = NULL; + struct tm *pTime; + pTime = localtime( &t ); + if ( asprintf( + &line, + sLogFormat.getStr(), + pTime->tm_year+1900, + pTime->tm_mon+1, + pTime->tm_mday, + pTime->tm_hour, + pTime->tm_min, + pTime->tm_sec, + nLevel, + sFile, + nLine, + text, + sFunction + ) < 0 ) + { + //printf("LOGGER: ERROR ALLOCATING STRING: %s\n", strerror( errno ) ); + return; + } + write( fileno(stdout), line, strlen(line) ); + free( text ); + free( line ); +#else + #warning Bu::Logger::log IS A STUB for WIN32!!!! +#endif +} + +void Bu::Logger::setFormat( const Bu::String &str ) +{ + sLogFormat = ""; + + static char fmts[][4]={ + {'y', 'd', '0', '1'}, + {'m', 'd', '0', '2'}, + {'d', 'd', '0', '3'}, + {'h', 'd', '0', '4'}, + {'M', 'd', '0', '5'}, + {'s', 'd', '0', '6'}, + {'L', 'd', '0', '7'}, + {'f', 's', '0', '8'}, + {'l', 'd', '0', '9'}, + {'t', 's', '1', '0'}, + {'F', 's', '1', '1'}, + {'\0', '\0', '\0', '\0'}, + }; + + for( const char *s = str.getStr(); *s; s++ ) + { + if( *s == '%' ) + { + sLogFormat += '%'; + Bu::String sBuf; + for(;;) + { + s++; + int l; + for( l = 0;; l++ ) + { + if( fmts[l][0] == '\0' ) + { + sBuf += *s; + break; + } + else if( *s == fmts[l][0] ) + { + sLogFormat += fmts[l][2]; + sLogFormat += fmts[l][3]; + sLogFormat += '$'; + sLogFormat += sBuf; + sLogFormat += fmts[l][1]; + break; + } + } + if( fmts[l][0] != '\0' ) + break; + } + } + else + { + sLogFormat += *s; + } + } + sLogFormat += '\n'; + + //write( fileno(stdout), sLogFormat.getStr(), sLogFormat.getSize() ); +} + +void Bu::Logger::setMask( uint32_t n ) +{ + nLevelMask = n; +} + +uint32_t Bu::Logger::getMask() +{ + return nLevelMask; +} + +void Bu::Logger::setLevel( uint32_t n ) +{ + int j; + for( j = 31; j > 0; j-- ) + { + if( (n&(1<= 0; j-- ) + { + n |= (1<32 && pData[j+k]<=128)?(pData[j+k]):('.') ); + sLine += buf; + } + log( nLevel, sFile, sFunction, nLine, sLine.getStr() ); + sLine = ""; + j += kmax; + if( j >= nDataLen ) break; + } + log( nLevel, sFile, sFunction, nLine, sBorder.getStr() ); +} + -- cgit v1.2.3