diff --git a/SConstruct b/SConstruct index 4ef87f578c0..be7bd673ce8 100644 --- a/SConstruct +++ b/SConstruct @@ -397,7 +397,7 @@ if distBuild: commonFiles = Split( "pch.cpp buildinfo.cpp db/common.cpp db/jsobj.cpp db/json.cpp db/lasterror.cpp db/nonce.cpp db/queryutil.cpp shell/mongo.cpp" ) commonFiles += [ "util/background.cpp" , "util/mmap.cpp" , "util/ramstore.cpp", "util/sock.cpp" , "util/util.cpp" , "util/message.cpp" , - "util/assert_util.cpp" , "util/httpclient.cpp" , "util/md5main.cpp" , "util/base64.cpp", "util/concurrency/vars.cpp", "util/concurrency/task.cpp", "util/debug_util.cpp", + "util/assert_util.cpp" , "util/log.cpp" , "util/httpclient.cpp" , "util/md5main.cpp" , "util/base64.cpp", "util/concurrency/vars.cpp", "util/concurrency/task.cpp", "util/debug_util.cpp", "util/concurrency/thread_pool.cpp", "util/password.cpp", "util/version.cpp", "util/histogram.cpp", "util/concurrency/spin_lock.cpp", "util/text.cpp" , "util/stringutils.cpp" ] commonFiles += Glob( "util/*.c" ) diff --git a/util/assert_util.cpp b/util/assert_util.cpp index 2e77de56865..faa18cb4c87 100644 --- a/util/assert_util.cpp +++ b/util/assert_util.cpp @@ -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 ) diff --git a/util/log.cpp b/util/log.cpp new file mode 100644 index 00000000000..f0e81407cfb --- /dev/null +++ b/util/log.cpp @@ -0,0 +1,123 @@ +/** @file log.cpp + */ + +/* Copyright 2009 10gen Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pch.h" +#include "assert_util.h" +#include "assert.h" +#include "file.h" +#include +using namespace std; + +#ifndef _WIN32 +#include +#include +#endif + +#include "../db/jsobj.h" + +namespace mongo { + + 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; + +} +