From 3130a85700b14f9ccecbc2e3a74e0e2a4cff4066 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Fri, 8 Nov 2019 08:33:38 +0000 Subject: [PATCH] coding for logging support in QSE::App --- qse/include/qse/si/App.hpp | 17 +++++++++++++++-- qse/include/qse/si/log.h | 8 ++++---- qse/lib/cmn/time.c | 32 ++++++++++++++++++++++---------- qse/lib/si/App.cpp | 27 ++++----------------------- qse/lib/si/log.c | 4 ++-- 5 files changed, 47 insertions(+), 41 deletions(-) diff --git a/qse/include/qse/si/App.hpp b/qse/include/qse/si/App.hpp index 0f3eac44..32d1d258 100644 --- a/qse/include/qse/si/App.hpp +++ b/qse/include/qse/si/App.hpp @@ -184,6 +184,19 @@ public: void setLogMask (int mask) { this->_log.mask = mask; } int getLogMask () const { return this->_log.mask; } +/* + void setLogTarget (int flags, const qse_log_target_t& target) + { + if (this->_log.logger) qse_log_settarget (this->_log.logger, flags, &target); + } + + void setLogOption (int oflags) + { + qse_log_setoption (&this->_log.logger, oflags); + } +*/ + + void logfmt (int mask, const qse_char_t* fmt, ...) { va_list ap; @@ -216,7 +229,7 @@ private: qse_cmgr_t* _cmgr; struct log_t { - log_t (App* app): mask(0), last_mask(0), len(0), mtx(app->getMmgr()), logger(QSE_NULL) + log_t (App* app): mask(0), last_mask(0), len(0), mtx(app->getMmgr()) { } @@ -224,7 +237,7 @@ private: qse_size_t len; qse_char_t buf[256]; QSE::Mutex mtx; - qse_log_t* logger; + qse_log_t logger; } _log; static int set_signal_handler_no_mutex (int sig, SignalHandler sighr); diff --git a/qse/include/qse/si/log.h b/qse/include/qse/si/log.h index a8ce28fd..0d343c7d 100644 --- a/qse/include/qse/si/log.h +++ b/qse/include/qse/si/log.h @@ -271,10 +271,10 @@ QSE_EXPORT void qse_log_close ( ); QSE_EXPORT int qse_log_init ( - qse_log_t* log, - qse_mmgr_t* mmgr, - const qse_char_t* ident, - int potflags, + qse_log_t* log, + qse_mmgr_t* mmgr, + const qse_char_t* ident, + int potflags, const qse_log_target_t* target ); diff --git a/qse/lib/cmn/time.c b/qse/lib/cmn/time.c index 119d03f9..f2812e58 100644 --- a/qse/lib/cmn/time.c +++ b/qse/lib/cmn/time.c @@ -356,27 +356,27 @@ int qse_gmtime (const qse_ntime_t* nt, qse_btime_t* bt) /* TODO: remove dependency on gmtime/gmtime_r */ #if defined(_WIN32) - tm = gmtime (&t); + tm = gmtime(&t); #elif defined(__OS2__) # if defined(__WATCOMC__) struct tm btm; - tm = _gmtime (&t, &btm); + tm = _gmtime(&t, &btm); # else # error Please support other compilers # endif #elif defined(__DOS__) # if defined(__WATCOMC__) struct tm btm; - tm = _gmtime (&t, &btm); + tm = _gmtime(&t, &btm); # else # error Please support other compilers # endif #elif defined(HAVE_GMTIME_R) struct tm btm; - tm = gmtime_r (&t, &btm); + tm = gmtime_r(&t, &btm); #else /* thread unsafe */ - tm = gmtime_r (&t); + tm = gmtime_r(&t); #endif if (tm == QSE_NULL) return -1; @@ -409,27 +409,27 @@ int qse_localtime (const qse_ntime_t* nt, qse_btime_t* bt) /* TODO: remove dependency on localtime/localtime_r */ #if defined(_WIN32) - tm = localtime (&t); + tm = localtime(&t); #elif defined(__OS2__) # if defined(__WATCOMC__) struct tm btm; - tm = _localtime (&t, &btm); + tm = _localtime(&t, &btm); # else # error Please support other compilers # endif #elif defined(__DOS__) # if defined(__WATCOMC__) struct tm btm; - tm = _localtime (&t, &btm); + tm = _localtime(&t, &btm); # else # error Please support other compilers # endif #elif defined(HAVE_LOCALTIME_R) struct tm btm; - tm = localtime_r (&t, &btm); + tm = localtime_r(&t, &btm); #else /* thread unsafe */ - tm = localtime (&t); + tm = localtime(&t); #endif if (tm == QSE_NULL) return -1; @@ -448,6 +448,18 @@ int qse_localtime (const qse_ntime_t* nt, qse_btime_t* bt) bt->gmtoff = tm->tm_gmtoff; #elif defined(HAVE_STRUCT_TM___TM_GMTOFF) bt->gmtoff = tm->__tm_gmtoff; +#elif defined(_WIN32) + { + TIME_ZONE_INFORMATION tzi; + if (GetTimeZoneInformation(&tzi) != TIME_ZONE_ID_INVALID) + { + bt->gmtoff = -((int)tiz.Bias * 60); + } + else + { + bt->gmtoff = QSE_TYPE_MIN(int); /* unknown */ + } + } #else bt->gmtoff = QSE_TYPE_MIN(int); /* unknown */ #endif diff --git a/qse/lib/si/App.cpp b/qse/lib/si/App.cpp index 8d2ea158..666e8fc3 100644 --- a/qse/lib/si/App.cpp +++ b/qse/lib/si/App.cpp @@ -76,6 +76,7 @@ protected: App::App (Mmgr* mmgr) QSE_CPP_NOEXCEPT: Mmged(mmgr), _prev_app(QSE_NULL), _next_app(QSE_NULL), _guarded_child_pid(-1), _log(this) { this->_cmgr = qse_getdflcmgr(); + qse_log_init(&this->_log.logger, this->getMmgr(), QSE_T("app"), 0, QSE_NULL); SigScopedMutexLocker sml(g_app_mutex); if (!g_app_top) @@ -115,12 +116,7 @@ App::~App () QSE_CPP_NOEXCEPT g_app_top = this->_next_app; } - - if (this->_log.logger) - { - qse_log_close (this->_log.logger); - this->_log.logger = QSE_NULL; - } + qse_log_fini (&this->_log.logger); } int App::daemonize (bool chdir_to_root, int fork_count, bool root_only) QSE_CPP_NOEXCEPT @@ -608,25 +604,10 @@ void App::logfmtv (int mask, const qse_char_t* fmt, va_list ap) // default log message output implementation void App::log_write (int mask, const qse_char_t* msg, qse_size_t len) { - if (!this->_log.logger) - { - qse_log_target_t target; - -// TODO: ... - QSE_MEMSET (&target, 0, QSE_SIZEOF(target)); - target.file = QSE_T("app.log"); - this->_log.logger = qse_log_open(this->getMmgr(), 0, QSE_T("app"), QSE_LOG_INCLUDE_PID | QSE_LOG_ALL_PRIORITIES | QSE_LOG_FILE | QSE_LOG_CONSOLE, &target); - } - - if (this->_log.logger) - { -// TOOD: add qse_log_write() which doesn't do formatting?? - // the last character is \n. qse_log_report() knows to terminate a line. so exclude it from reporting - qse_log_report (this->_log.logger, QSE_NULL, QSE_LOG_LOCAL0 | QSE_LOG_INFO, QSE_T("%.*js"), (int)(len - 1), msg); - } + // the last character is \n. qse_log_report() knows to terminate a line. so exclude it from reporting + qse_log_report (&this->_log.logger, QSE_NULL, QSE_LOG_LOCAL0 | QSE_LOG_INFO, QSE_T("%.*js"), (int)(len - 1), msg); } - ///////////////////////////////// QSE_END_NAMESPACE(QSE) ///////////////////////////////// diff --git a/qse/lib/si/log.c b/qse/lib/si/log.c index 71a985cb..bbcc1f39 100644 --- a/qse/lib/si/log.c +++ b/qse/lib/si/log.c @@ -556,7 +556,7 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs if (log->flags & QSE_LOG_CONSOLE) { if (!log->t.console.sio) - log->t.console.sio = qse_sio_openstd (log->mmgr, 0, QSE_SIO_STDERR, QSE_SIO_APPEND | QSE_SIO_IGNOREMBWCERR); + log->t.console.sio = qse_sio_openstd(log->mmgr, 0, QSE_SIO_STDERR, QSE_SIO_APPEND | QSE_SIO_IGNOREMBWCERR); if (log->t.console.sio) { va_list xap; @@ -568,7 +568,7 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs if (log->flags & QSE_LOG_FILE) { if (!log->t.file.sio) - log->t.file.sio = qse_sio_open (log->mmgr, 0, log->t.file.path, QSE_SIO_CREATE | QSE_SIO_APPEND | QSE_SIO_IGNOREMBWCERR); + log->t.file.sio = qse_sio_open(log->mmgr, 0, log->t.file.path, QSE_SIO_CREATE | QSE_SIO_APPEND | QSE_SIO_IGNOREMBWCERR); if (log->t.file.sio) { va_list xap;