move logging cpp code into log.cpp

This commit is contained in:
Eliot Horowitz
2010-07-24 12:40:07 -04:00
parent add85dc415
commit 357cb2918e
3 changed files with 124 additions and 88 deletions

View File

@@ -147,93 +147,6 @@ namespace mongo {
return ss.str();
}
class LoggingManager {
public:
LoggingManager()
: _enabled(0) , _file(0) {
}
void start( const string& lp , bool append ){
uassert( 10268 , "LoggingManager already started" , ! _enabled );
_append = append;
// test path
FILE * test = fopen( lp.c_str() , _append ? "a" : "w" );
if ( ! test ){
cout << "can't open [" << lp << "] for log file" << endl;
dbexit( EXIT_BADOPTIONS );
assert( 0 );
}
fclose( test );
_path = lp;
_enabled = 1;
rotate();
}
void rotate(){
if ( ! _enabled ){
cout << "LoggingManager not enabled" << endl;
return;
}
if ( _file ){
#ifdef _WIN32
cout << "log rotation doesn't work on windows" << endl;
return;
#else
struct tm t;
localtime_r( &_opened , &t );
stringstream ss;
ss << _path << "." << ( 1900 + t.tm_year ) << "-" << t.tm_mon << "-" << t.tm_mday
<< "_" << t.tm_hour << "-" << t.tm_min << "-" << t.tm_sec;
string s = ss.str();
rename( _path.c_str() , s.c_str() );
#endif
}
FILE* tmp = fopen(_path.c_str(), (_append ? "a" : "w"));
if (!tmp){
cerr << "can't open: " << _path.c_str() << " for log file" << endl;
dbexit( EXIT_BADOPTIONS );
assert(0);
}
Logstream::setLogFile(tmp); // after this point no thread will be using old file
if (_file){
fclose(_file);
}
_file = tmp;
_opened = time(0);
}
private:
bool _enabled;
string _path;
bool _append;
FILE * _file;
time_t _opened;
} loggingManager;
void initLogging( const string& lp , bool append ){
cout << "all output going to: " << lp << endl;
loggingManager.start( lp , append );
}
void rotateLogs( int signal ){
loggingManager.rotate();
}
// done *before* static initialization
FILE* Logstream::logfile = stdout;
string errnoWithPrefix( const char * prefix ){
stringstream ss;
if ( prefix )