dlvhex
2.5.0
|
00001 /* dlvhex -- Answer-Set Programming with external interfaces. 00002 * Copyright (C) 2005-2007 Roman Schindlauer 00003 * Copyright (C) 2006-2015 Thomas Krennwallner 00004 * Copyright (C) 2009-2016 Peter Schüller 00005 * Copyright (C) 2011-2016 Christoph Redl 00006 * Copyright (C) 2015-2016 Tobias Kaminski 00007 * Copyright (C) 2015-2016 Antonius Weinzierl 00008 * 00009 * This file is part of dlvhex. 00010 * 00011 * dlvhex is free software; you can redistribute it and/or modify it 00012 * under the terms of the GNU Lesser General Public License as 00013 * published by the Free Software Foundation; either version 2.1 of 00014 * the License, or (at your option) any later version. 00015 * 00016 * dlvhex is distributed in the hope that it will be useful, but 00017 * WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00019 * Lesser General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Lesser General Public 00022 * License along with dlvhex; if not, write to the Free Software 00023 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 00024 * 02110-1301 USA. 00025 */ 00026 00034 #ifdef HAVE_CONFIG_H 00035 #include "config.h" 00036 #endif // HAVE_CONFIG_H 00037 00038 #include "dlvhex2/Logger.h" 00039 00040 namespace 00041 { 00042 Logger* instance = 0; 00043 } 00044 00045 00046 namespace 00047 { 00048 boost::mutex* mutex = 0; 00049 } 00050 00051 00052 Logger& Logger::Instance() 00053 { 00054 if( instance == 0 ) 00055 instance = new Logger(); 00056 return *instance; 00057 } 00058 00059 00060 boost::mutex& Logger::Mutex() 00061 { 00062 if( mutex == 0 ) { 00063 #ifdef NDEBUG 00064 // rationale behind this message: if we use NDEBUG in dlvhex, 00065 // this message will never appear (because Logger.h does not use the mutex). 00066 // if we use NDEBUG in dlvhex but DEBUG in plugin, this appears and 00067 // this might hit performance therefore we give a warning (once) 00068 if( Logger::Instance().shallPrint(Logger::WARNING) ) { 00069 Logger::Instance().stream() << 00070 "Logger (performance) warning: use NDEBUG " 00071 "to deactivate logging mutex in plugin!" << std::endl; 00072 } 00073 #endif 00074 mutex = new boost::mutex(); 00075 } 00076 return *mutex; 00077 } 00078 00079 00080 void Logger::setPrintLevels(Levels levels) 00081 { 00082 if( (levels & ERROR) != ERROR ) 00083 out << "Logger warning: deactivated ERROR level" << std::endl; 00084 printlevels = levels; 00085 } 00086 00087 00088 void Logger::setPrintLevelWidth(int width) 00089 { 00090 assert(width >= 0 ); 00091 levelwidth = width; 00092 } 00093 00094 00095 Logger::Levels Logger::getPrintLevels() const 00096 { 00097 return printlevels; 00098 } 00099 00100 // vim:expandtab:ts=4:sw=4: 00101 // mode: C++ 00102 // End: