diff --git a/src/common/rclinit.cpp b/src/common/rclinit.cpp index b2e829b4..3311e68d 100644 --- a/src/common/rclinit.cpp +++ b/src/common/rclinit.cpp @@ -274,7 +274,8 @@ RclConfig *recollinit(int flags, // to utf8 for indexing. setlocale(LC_CTYPE, ""); - Logger::getTheLog("")->setLogLevel(Logger::LLDEB1); + // Initially log to stderr, at error level. + Logger::getTheLog("")->setLogLevel(Logger::LLERR); initAsyncSigs(sigcleanup); @@ -306,6 +307,14 @@ RclConfig *recollinit(int flags, config->getConfParam(string("idxloglevel"), loglevel); } } + if (flags & RCLINIT_PYTHON) { + if (logfilename.empty()) { + config->getConfParam(string("pylogfilename"), logfilename); + } + if (loglevel.empty()) { + config->getConfParam(string("pyloglevel"), loglevel); + } + } if (logfilename.empty()) config->getConfParam(string("logfilename"), logfilename); @@ -315,7 +324,7 @@ RclConfig *recollinit(int flags, // Initialize logging if (!logfilename.empty()) { logfilename = path_tildexpand(logfilename); - // If not an absolute path or , compute relative to config dir + // If not an absolute path or stderr, compute relative to config dir. if (!path_isabsolute(logfilename) && logfilename.compare("stderr")) { logfilename = path_cat(config->getConfDir(), logfilename); @@ -372,7 +381,8 @@ RclConfig *recollinit(int flags, int flushmb; if (config->getConfParam("idxflushmb", &flushmb) && flushmb > 0) { - LOGDEB1("rclinit: idxflushmb=" << (flushmb) << ", set XAPIAN_FLUSH_THRESHOLD to 10E6\n" ); + LOGDEB1("rclinit: idxflushmb=" << flushmb << + ", set XAPIAN_FLUSH_THRESHOLD to 10E6\n"); static const char *cp = "XAPIAN_FLUSH_THRESHOLD=1000000"; #ifdef PUTENV_ARG_CONST ::putenv(cp); diff --git a/src/common/rclinit.h b/src/common/rclinit.h index 18e0a01c..f370bb60 100644 --- a/src/common/rclinit.h +++ b/src/common/rclinit.h @@ -39,16 +39,11 @@ class RclConfig; * default and environment * @return the parsed configuration. */ -enum RclInitFlags {RCLINIT_NONE = 0, RCLINIT_DAEMON = 1, RCLINIT_IDX = 2}; +enum RclInitFlags {RCLINIT_NONE = 0, RCLINIT_DAEMON = 1, RCLINIT_IDX = 2, + RCLINIT_PYTHON = 4}; extern RclConfig *recollinit(int flags, void (*cleanup)(void), void (*sigcleanup)(int), std::string& reason, const std::string *argcnf = 0); -inline RclConfig *recollinit(void (*cleanup)(void), void (*sigcleanup)(int), - std::string& reason, - const std::string *argcnf = 0) -{ - return recollinit(RCLINIT_NONE, cleanup, sigcleanup, reason, argcnf); -} // Threads need to call this to block signals. // The main thread handles all signals. diff --git a/src/python/recoll/pyrclextract.cpp b/src/python/recoll/pyrclextract.cpp index 9d2167ce..bba3aa23 100644 --- a/src/python/recoll/pyrclextract.cpp +++ b/src/python/recoll/pyrclextract.cpp @@ -35,7 +35,6 @@ using namespace std; // Imported from pyrecoll static PyObject *recoll_DocType; -static RclConfig *rclconfig; ////////////////////////////////////////////////////////////////////// /// Extractor object code @@ -324,19 +323,21 @@ initrclextract(void) #endif { // We run recollinit. It's responsible for initializing some static data - // which is distinct from pyrecoll's as we're separately dlopened + // which is distinct from pyrecoll's as we're separately dlopened. + // The rclconfig object is not used, we'll get the config + // data from the objects out of the recoll module. + // Unfortunately, as we're not getting the actual config directory + // from pyrecoll (we could, through a capsule), this needs at + // least an empty default configuration directory to work. string reason; - rclconfig = recollinit(0, 0, reason, 0); + RclConfig *rclconfig = recollinit(RCLINIT_PYTHON, 0, 0, reason, 0); if (rclconfig == 0) { PyErr_SetString(PyExc_EnvironmentError, reason.c_str()); INITERROR; + } else { + delete rclconfig; } - if (!rclconfig->ok()) { - PyErr_SetString(PyExc_EnvironmentError, - "Recoll init error: bad environment ?"); - INITERROR; - } - + #if PY_MAJOR_VERSION >= 3 PyObject *module = PyModule_Create(&moduledef); #else diff --git a/src/python/recoll/pyrecoll.cpp b/src/python/recoll/pyrecoll.cpp index 8e7e80e3..25ec64fe 100644 --- a/src/python/recoll/pyrecoll.cpp +++ b/src/python/recoll/pyrecoll.cpp @@ -1576,9 +1576,9 @@ Db_init(recoll_DbObject *self, PyObject *args, PyObject *kwargs) delete rclconfig; if (confdir) { string cfd = confdir; - rclconfig = recollinit(0, 0, reason, &cfd); + rclconfig = recollinit(RCLINIT_PYTHON, 0, 0, reason, &cfd); } else { - rclconfig = recollinit(0, 0, reason, 0); + rclconfig = recollinit(RCLINIT_PYTHON, 0, 0, reason, 0); } LOGDEB("Db_init\n"); diff --git a/src/qtgui/main.cpp b/src/qtgui/main.cpp index d204c60c..84a6a452 100644 --- a/src/qtgui/main.cpp +++ b/src/qtgui/main.cpp @@ -305,7 +305,7 @@ int main(int argc, char **argv) string reason; - theconfig = recollinit(recollCleanup, 0, reason, &a_config); + theconfig = recollinit(0, recollCleanup, 0, reason, &a_config); if (!theconfig || !theconfig->ok()) { QString msg = "Configuration problem: "; msg += QString::fromUtf8(reason.c_str()); diff --git a/src/query/recollq.cpp b/src/query/recollq.cpp index a45859fa..999a1b66 100644 --- a/src/query/recollq.cpp +++ b/src/query/recollq.cpp @@ -248,7 +248,7 @@ int recollq(RclConfig **cfp, int argc, char **argv) endopts: string reason; - *cfp = recollinit(0, 0, reason, &a_config); + *cfp = recollinit(0, 0, 0, reason, &a_config); RclConfig *rclconfig = *cfp; if (!rclconfig || !rclconfig->ok()) { fprintf(stderr, "Recoll init failed: %s\n", reason.c_str()); diff --git a/src/testmains/trfstreewalk.cpp b/src/testmains/trfstreewalk.cpp index 63f2d7c0..9165def8 100644 --- a/src/testmains/trfstreewalk.cpp +++ b/src/testmains/trfstreewalk.cpp @@ -175,7 +175,7 @@ int main(int argc, const char **argv) opt |= FsTreeWalker::FtwTravBreadthThenDepth; string reason; - if (!recollinit(0, 0, reason)) { + if (!recollinit(0, 0, 0, reason)) { fprintf(stderr, "Init failed: %s\n", reason.c_str()); exit(1); } diff --git a/src/utils/log.cpp b/src/utils/log.cpp index 7b62248a..cc923552 100644 --- a/src/utils/log.cpp +++ b/src/utils/log.cpp @@ -23,7 +23,7 @@ using namespace std; Logger::Logger(const std::string& fn) - : m_tocerr(false), m_loglevel(LLDEB), m_fn(fn) + : m_fn(fn) { reopen(fn); } diff --git a/src/utils/log.h b/src/utils/log.h index c49a1ee6..cc0cacc4 100644 --- a/src/utils/log.h +++ b/src/utils/log.h @@ -81,8 +81,8 @@ public: #endif private: - bool m_tocerr; - int m_loglevel; + bool m_tocerr{false}; + int m_loglevel{LLERR}; std::string m_fn; std::ofstream m_stream; #if LOGGER_THREADSAFE