--- a/sc2src/log.cpp
+++ b/sc2src/log.cpp
@@ -23,18 +23,35 @@
using namespace std;
Logger::Logger(const std::string& fn)
- : m_tocerr(false), m_loglevel(LLDEB)
+ : m_tocerr(false), m_loglevel(LLDEB), m_fn(fn)
{
- if (!fn.empty() && fn.compare("stderr")) {
- m_stream.open(fn.c_str(), std::fstream::out | std::ofstream::trunc);
+ reopen(fn);
+}
+
+bool Logger::reopen(const std::string& fn)
+{
+#if LOGGER_THREADSAFE
+ std::unique_lock<std::mutex> lock(m_mutex);
+#endif
+ if (!fn.empty()) {
+ m_fn = fn;
+ }
+ if (!m_tocerr && m_stream.is_open()) {
+ m_stream.close();
+ }
+ if (!m_fn.empty() && m_fn.compare("stderr")) {
+ m_stream.open(m_fn, std::fstream::out | std::ofstream::trunc);
if (!m_stream.is_open()) {
cerr << "Logger::Logger: log open failed: for [" <<
fn << "] errno " << errno << endl;
m_tocerr = true;
+ } else {
+ m_tocerr = false;
}
} else {
m_tocerr = true;
}
+ return true;
}
static Logger *theLog;