diff options
author | spiff <spiff@xbmc.org> | 2013-05-04 10:52:17 +0200 |
---|---|---|
committer | spiff <spiff@xbmc.org> | 2013-05-04 10:58:28 +0200 |
commit | 8ff1023321b1814d5afe5c1945e6967f65ac8454 (patch) | |
tree | 335d947faed02928b2984fcacabb6e021ab86f99 | |
parent | f6b29c08917fecffa25af48222a508d53838b016 (diff) |
changed: improve logging customizability
- remove LOG_LEVEL_DEBUG_SAMBA
- add a mask field for log levels
- make the log levels customizable from the gui
-rw-r--r-- | addons/xbmc.debug/addon.xml | 11 | ||||
-rw-r--r-- | addons/xbmc.debug/resources/language/English/strings.po | 42 | ||||
-rw-r--r-- | addons/xbmc.debug/resources/settings.xml | 9 | ||||
-rw-r--r-- | language/English/strings.po | 6 | ||||
-rw-r--r-- | system/settings/settings.xml | 8 | ||||
-rw-r--r-- | xbmc/Application.cpp | 6 | ||||
-rw-r--r-- | xbmc/commons/ilog.h | 14 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 3 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp | 5 | ||||
-rw-r--r-- | xbmc/filesystem/CurlFile.cpp | 3 | ||||
-rw-r--r-- | xbmc/filesystem/MythSession.cpp | 2 | ||||
-rw-r--r-- | xbmc/filesystem/SmbFile.cpp | 4 | ||||
-rw-r--r-- | xbmc/linux/DBusMessage.cpp | 3 | ||||
-rw-r--r-- | xbmc/settings/AdvancedSettings.cpp | 34 | ||||
-rw-r--r-- | xbmc/settings/AdvancedSettings.h | 8 | ||||
-rw-r--r-- | xbmc/settings/Settings.cpp | 1 | ||||
-rw-r--r-- | xbmc/storage/linux/UDisksProvider.cpp | 15 | ||||
-rw-r--r-- | xbmc/utils/log.cpp | 12 | ||||
-rw-r--r-- | xbmc/utils/log.h | 2 |
19 files changed, 166 insertions, 22 deletions
diff --git a/addons/xbmc.debug/addon.xml b/addons/xbmc.debug/addon.xml new file mode 100644 index 0000000000..a9000d7c35 --- /dev/null +++ b/addons/xbmc.debug/addon.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<addon id="xbmc.debug" version="0.1.0" provider-name="Team XBMC" name="Log"> + <backwards-compatibility abi="0.1"/> + <requires> + <c-pluff version="0.1"/> + </requires> + <extension point="xbmc.python.module"/> + <extension point="xbmc.addon.metadata"> + <platform>all</platform> + </extension> +</addon> diff --git a/addons/xbmc.debug/resources/language/English/strings.po b/addons/xbmc.debug/resources/language/English/strings.po new file mode 100644 index 0000000000..8bb4c72d43 --- /dev/null +++ b/addons/xbmc.debug/resources/language/English/strings.po @@ -0,0 +1,42 @@ +# XBMC Media Center language file +# Addon Name: Debug customizer +# Addon id: xbmc.debug +# Addon version: 0.1.0 +# Addon Provider: Team XBMC +msgid "" +msgstr "" +"Project-Id-Version: XBMC Main Translation Project (Frodo)\n" +"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: XBMC Translation Team\n" +"Language-Team: English (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgctxt "#30000" +msgid "Verbose logging for SMB library" +msgstr "" + +msgctxt "#30001" +msgid "Verbose logging for CURL library (http, dav)" +msgstr "" + +msgctxt "#30002" +msgid "Verbose logging for CMYTH library" +msgstr "" + +msgctxt "#30003" +msgid "Verbose logging for FFMPEG libraries" +msgstr "" + +msgctxt "#30004" +msgid "Verbose logging for RTMP library" +msgstr "" + +msgctxt "#30005" +msgid "Verbose logging for DBUS calls" +msgstr "" diff --git a/addons/xbmc.debug/resources/settings.xml b/addons/xbmc.debug/resources/settings.xml new file mode 100644 index 0000000000..2644a96917 --- /dev/null +++ b/addons/xbmc.debug/resources/settings.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<settings> + <setting id="bit1" type="bool" label="30000" default="0"/> + <setting id="bit2" type="bool" label="30001" default="0"/> + <setting id="bit3" type="bool" label="30002" default="0"/> + <setting id="bit4" type="bool" label="30003" default="0"/> + <setting id="bit5" type="bool" label="30004" default="0"/> + <setting id="bit6" type="bool" label="30005" default="0"/> +</settings> diff --git a/language/English/strings.po b/language/English/strings.po index 8a8a088012..b8cfcd2190 100644 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -2725,7 +2725,11 @@ msgctxt "#665" msgid "Compression level" msgstr "" -#empty strings from id 666 to 699 +msgctxt "#666" +msgid "Verbose logging..." +msgstr "" + +#empty strings from id 667 to 699 msgctxt "#700" msgid "Cleaning up library" diff --git a/system/settings/settings.xml b/system/settings/settings.xml index 0ca8806f17..2fa58349fe 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2243,6 +2243,14 @@ <heading>657</heading> <control type="button" format="path" /> </setting> + <setting id="debug.setextraloglevel" type="action" label="666" help=""> + <level>1</level> + <control type="button" format="action"> + <dependencies> + <dependency type="enable" setting="debug.showloginfo">true</dependency> + </dependencies> + </control> + </setting> </group> </category> <category id="masterlock" label="12360" help=""> diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index a362a51f58..9a493bf428 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -783,6 +783,12 @@ bool CApplication::Create() return false; } + // set logging from debug add-on + AddonPtr addon; + CAddonMgr::Get().GetAddon("xbmc.debug", addon); + if (addon) + g_advancedSettings.SetExtraLogsFromAddon(addon.get()); + g_peripherals.Initialise(); // Create the Mouse, Keyboard, Remote, and Joystick devices diff --git a/xbmc/commons/ilog.h b/xbmc/commons/ilog.h index 395fc46f82..012d3f681f 100644 --- a/xbmc/commons/ilog.h +++ b/xbmc/commons/ilog.h @@ -26,8 +26,7 @@ #define LOG_LEVEL_NORMAL 0 // shows notice, error, severe and fatal #define LOG_LEVEL_DEBUG 1 // shows all #define LOG_LEVEL_DEBUG_FREEMEM 2 // shows all + shows freemem on screen -#define LOG_LEVEL_DEBUG_SAMBA 3 // shows all + freemem on screen + samba debugging -#define LOG_LEVEL_MAX LOG_LEVEL_DEBUG_SAMBA +#define LOG_LEVEL_MAX LOG_LEVEL_DEBUG_FREEMEM // ones we use in the code #define LOGDEBUG 0 @@ -39,6 +38,17 @@ #define LOGFATAL 6 #define LOGNONE 7 +// extra masks - from bit 5 +#define LOGMASKBIT 5 +#define LOGMASK ((1 << LOGMASKBIT)-1) + +#define LOGSAMBA (1 << (LOGMASKBIT+0)) +#define LOGCURL (1 << (LOGMASKBIT+1)) +#define LOGCMYTH (1 << (LOGMASKBIT+2)) +#define LOGFFMPEG (1 << (LOGMASKBIT+3)) +#define LOGRTMP (1 << (LOGMASKBIT+4)) +#define LOGDBUS (1 << (LOGMASKBIT+5)) + #ifdef __GNUC__ #define ATTRIB_LOG_FORMAT __attribute__((format(printf,3,4))) #else diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp index f95b008175..d18c439383 100644 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp @@ -104,7 +104,8 @@ void ff_avutil_log(void* ptr, int level, const char* format, va_list va) AVClass* avc= ptr ? *(AVClass**)ptr : NULL; - if(level >= AV_LOG_DEBUG && g_advancedSettings.m_logLevel <= LOG_LEVEL_DEBUG_SAMBA) + if(level >= AV_LOG_DEBUG && + (g_advancedSettings.m_extraLogLevels & LOGFFMPEG) == 0) return; else if(g_advancedSettings.m_logLevel <= LOG_LEVEL_NORMAL) return; diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp index fb8164f81f..7d31f71db5 100644 --- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp +++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp @@ -73,12 +73,15 @@ CDVDInputStreamRTMP::CDVDInputStreamRTMP() : CDVDInputStream(DVDSTREAM_TYPE_RTMP m_libRTMP.LogSetCallback(CDVDInputStreamRTMP_Log); switch (g_advancedSettings.m_logLevel) { - case LOG_LEVEL_DEBUG_SAMBA: level = RTMP_LOGDEBUG2; break; case LOG_LEVEL_DEBUG_FREEMEM: case LOG_LEVEL_DEBUG: level = RTMP_LOGDEBUG; break; case LOG_LEVEL_NORMAL: level = RTMP_LOGINFO; break; default: level = RTMP_LOGCRIT; break; } + + if (g_advancedSettings.m_extraLogLevels & LOGRTMP) + level = RTMP_LOGDEBUG2; + m_libRTMP.LogSetLevel(level); RTMP_level = level; diff --git a/xbmc/filesystem/CurlFile.cpp b/xbmc/filesystem/CurlFile.cpp index a35746aec0..ccfab0d6a4 100644 --- a/xbmc/filesystem/CurlFile.cpp +++ b/xbmc/filesystem/CurlFile.cpp @@ -73,8 +73,7 @@ extern "C" int debug_callback(CURL_HANDLE *handle, curl_infotype info, char *out if (info == CURLINFO_DATA_IN || info == CURLINFO_DATA_OUT) return 0; - // Only shown cURL debug into with loglevel DEBUG_SAMBA or higher - if( g_advancedSettings.m_logLevel < LOG_LEVEL_DEBUG_SAMBA ) + if ((g_advancedSettings.m_extraLogLevels & LOGCURL) == 0) return 0; CStdString strLine; diff --git a/xbmc/filesystem/MythSession.cpp b/xbmc/filesystem/MythSession.cpp index 419b25624f..e669d5ce0a 100644 --- a/xbmc/filesystem/MythSession.cpp +++ b/xbmc/filesystem/MythSession.cpp @@ -373,7 +373,7 @@ CMythSession::CMythSession(const CURL& url) : CThread("MythSession") if (m_dll->IsLoaded()) { m_dll->set_dbg_msgcallback(&CMythSession::LogCMyth); - if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG_SAMBA) + if (g_advancedSettings.m_extraLogLevels & LOGCMYTH) m_dll->dbg_level(CMYTH_DBG_ALL); else if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG) m_dll->dbg_level(CMYTH_DBG_DETAIL); diff --git a/xbmc/filesystem/SmbFile.cpp b/xbmc/filesystem/SmbFile.cpp index 07c66b15c6..1300f242b9 100644 --- a/xbmc/filesystem/SmbFile.cpp +++ b/xbmc/filesystem/SmbFile.cpp @@ -156,7 +156,7 @@ void CSMB::Init() // setup our context m_context = smbc_new_context(); #ifdef DEPRECATED_SMBC_INTERFACE - smbc_setDebug(m_context, g_advancedSettings.m_logLevel == LOG_LEVEL_DEBUG_SAMBA ? 10 : 0); + smbc_setDebug(m_context, (g_advancedSettings.m_extraLogLevels & LOGSAMBA)?10:0); smbc_setFunctionAuthData(m_context, xb_smbc_auth); orig_cache = smbc_getFunctionGetCachedServer(m_context); smbc_setFunctionGetCachedServer(m_context, xb_smbc_cache); @@ -165,7 +165,7 @@ void CSMB::Init() smbc_setTimeout(m_context, g_advancedSettings.m_sambaclienttimeout * 1000); smbc_setUser(m_context, strdup("guest")); #else - m_context->debug = g_advancedSettings.m_logLevel == LOG_LEVEL_DEBUG_SAMBA ? 10 : 0; + m_context->debug = (g_advancedSettings.m_extraLogLevels & LOGSAMBA?10:0); m_context->callbacks.auth_fn = xb_smbc_auth; orig_cache = m_context->callbacks.get_cached_srv_fn; m_context->callbacks.get_cached_srv_fn = xb_smbc_cache; diff --git a/xbmc/linux/DBusMessage.cpp b/xbmc/linux/DBusMessage.cpp index 40caa9f05a..7665d99da8 100644 --- a/xbmc/linux/DBusMessage.cpp +++ b/xbmc/linux/DBusMessage.cpp @@ -28,8 +28,7 @@ CDBusMessage::CDBusMessage(const char *destination, const char *object, const ch m_message = dbus_message_new_method_call (destination, object, interface, method); m_haveArgs = false; - if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG_SAMBA) - CLog::Log(LOGDEBUG, "DBus: Creating message to %s on %s with interface %s and method %s\n", destination, object, interface, method); + CLog::Log(LOGDEBUG|LOGDBUS, "DBus: Creating message to %s on %s with interface %s and method %s\n", destination, object, interface, method); } CDBusMessage::~CDBusMessage() diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp index 354bd7548f..11fd1e7a64 100644 --- a/xbmc/settings/AdvancedSettings.cpp +++ b/xbmc/settings/AdvancedSettings.cpp @@ -35,8 +35,13 @@ #include "utils/XMLUtils.h" #include "utils/log.h" #include "filesystem/SpecialProtocol.h" +#include "addons/IAddon.h" +#include "addons/AddonManager.h" +#include "addons/GUIDialogAddonSettings.h" +using namespace ADDON; using namespace XFILE; +using namespace std; CAdvancedSettings::CAdvancedSettings() { @@ -78,6 +83,21 @@ void CAdvancedSettings::OnSettingChanged(const CSetting *setting) SetDebugMode(((CSettingBool*)setting)->GetValue()); } +void CAdvancedSettings::OnSettingAction(const CSetting *setting) +{ + if (setting == NULL) + return; + + const std::string settingId = setting->GetId(); + if (settingId == "debug.setextraloglevel") + { + AddonPtr addon; + CAddonMgr::Get().GetAddon("xbmc.debug", addon); + CGUIDialogAddonSettings::ShowAndGetInput(addon, true); + SetExtraLogsFromAddon(addon.get()); + } +} + void CAdvancedSettings::Initialize() { m_audioHeadRoom = 0; @@ -362,6 +382,7 @@ void CAdvancedSettings::Initialize() m_videoExtensions += "|.pvr"; m_logLevelHint = m_logLevel = LOG_LEVEL_NORMAL; + m_extraLogLevels = 0; #if defined(TARGET_DARWIN) CStdString logDir = getenv("HOME"); @@ -1285,3 +1306,16 @@ void CAdvancedSettings::SetDebugMode(bool debug) CLog::SetLogLevel(level); } } + +void CAdvancedSettings::SetExtraLogsFromAddon(ADDON::IAddon* addon) +{ + m_extraLogLevels = 0; + for (int i=LOGMASKBIT;i<31;++i) + { + CStdString str; + str.Format("bit%i", i-LOGMASKBIT+1); + if (addon->GetSetting(str) == "true") + m_extraLogLevels |= (1 << i); + } + CLog::SetExtraLogLevels(m_extraLogLevels); +} diff --git a/xbmc/settings/AdvancedSettings.h b/xbmc/settings/AdvancedSettings.h index dbc8d0c03b..8e9d9f2eac 100644 --- a/xbmc/settings/AdvancedSettings.h +++ b/xbmc/settings/AdvancedSettings.h @@ -27,6 +27,10 @@ #include "utils/GlobalsHandling.h" class TiXmlElement; +namespace ADDON +{ + class IAddon; +} class DatabaseSettings { @@ -94,6 +98,8 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler virtual void OnSettingChanged(const CSetting *setting); + virtual void OnSettingAction(const CSetting *setting); + void Initialize(); bool Initialized() { return m_initialized; }; void AddSettingsFile(const CStdString &filename); @@ -184,6 +190,7 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler int m_songInfoDuration; int m_logLevel; int m_logLevelHint; + int m_extraLogLevels; CStdString m_cddbAddress; //airtunes + airplay @@ -369,6 +376,7 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler bool m_loaded; void SetDebugMode(bool debug); + void SetExtraLogsFromAddon(ADDON::IAddon* addon); // runtime settings which cannot be set from advancedsettings.xml CStdString m_pictureExtensions; diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp index 7f0d999b19..d9cb651d62 100644 --- a/xbmc/settings/Settings.cpp +++ b/xbmc/settings/Settings.cpp @@ -810,6 +810,7 @@ void CSettings::InitializeISettingCallbacks() // register any ISettingCallback implementations std::set<std::string> settingSet; settingSet.insert("debug.showloginfo"); + settingSet.insert("debug.setextraloglevel"); m_settingsManager->RegisterCallback(&g_advancedSettings, settingSet); settingSet.clear(); diff --git a/xbmc/storage/linux/UDisksProvider.cpp b/xbmc/storage/linux/UDisksProvider.cpp index 7b91db847f..e581e0011e 100644 --- a/xbmc/storage/linux/UDisksProvider.cpp +++ b/xbmc/storage/linux/UDisksProvider.cpp @@ -303,8 +303,7 @@ bool CUDisksProvider::HasUDisks() void CUDisksProvider::DeviceAdded(const char *object, IStorageEventsCallback *callback) { - if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG_SAMBA) - CLog::Log(LOGDEBUG, "UDisks: DeviceAdded (%s)", object); + CLog::Log(LOGDEBUG|LOGDBUS, "UDisks: DeviceAdded (%s)", object); if (m_AvailableDevices[object]) { @@ -319,8 +318,7 @@ void CUDisksProvider::DeviceAdded(const char *object, IStorageEventsCallback *ca if (g_advancedSettings.m_handleMounting) device->Mount(); - if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG_SAMBA) - CLog::Log(LOGDEBUG, "UDisks: DeviceAdded - %s", device->toString().c_str()); + CLog::Log(LOGDEBUG|LOGDBUS, "UDisks: DeviceAdded - %s", device->toString().c_str()); if (device->m_isMounted && device->IsApproved()) { @@ -332,8 +330,7 @@ void CUDisksProvider::DeviceAdded(const char *object, IStorageEventsCallback *ca void CUDisksProvider::DeviceRemoved(const char *object, IStorageEventsCallback *callback) { - if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG_SAMBA) - CLog::Log(LOGDEBUG, "UDisks: DeviceRemoved (%s)", object); + CLog::Log(LOGDEBUG|LOGDBUS, "UDisks: DeviceRemoved (%s)", object); CUDiskDevice *device = m_AvailableDevices[object]; if (device) @@ -348,8 +345,7 @@ void CUDisksProvider::DeviceRemoved(const char *object, IStorageEventsCallback * void CUDisksProvider::DeviceChanged(const char *object, IStorageEventsCallback *callback) { - if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG_SAMBA) - CLog::Log(LOGDEBUG, "UDisks: DeviceChanged (%s)", object); + CLog::Log(LOGDEBUG|LOGDBUS, "UDisks: DeviceChanged (%s)", object); CUDiskDevice *device = m_AvailableDevices[object]; if (device == NULL) @@ -371,8 +367,7 @@ void CUDisksProvider::DeviceChanged(const char *object, IStorageEventsCallback * else if (mounted && !device->m_isMounted && callback) callback->OnStorageSafelyRemoved(device->m_Label); - if (g_advancedSettings.m_logLevel >= LOG_LEVEL_DEBUG_SAMBA) - CLog::Log(LOGDEBUG, "UDisks: DeviceChanged - %s", device->toString().c_str()); + CLog::Log(LOGDEBUG|LOGDBUS, "UDisks: DeviceChanged - %s", device->toString().c_str()); } } diff --git a/xbmc/utils/log.cpp b/xbmc/utils/log.cpp index bdb24766f0..17820ac6a0 100644 --- a/xbmc/utils/log.cpp +++ b/xbmc/utils/log.cpp @@ -38,6 +38,7 @@ #define m_repeatLogLevel XBMC_GLOBAL_USE(CLog::CLogGlobals).m_repeatLogLevel #define m_repeatLine XBMC_GLOBAL_USE(CLog::CLogGlobals).m_repeatLine #define m_logLevel XBMC_GLOBAL_USE(CLog::CLogGlobals).m_logLevel +#define m_extraLogLevels XBMC_GLOBAL_USE(CLog::CLogGlobals).m_extraLogLevels static char levelNames[][8] = {"DEBUG", "INFO", "NOTICE", "WARNING", "ERROR", "SEVERE", "FATAL", "NONE"}; @@ -64,6 +65,8 @@ void CLog::Log(int loglevel, const char *format, ... ) { static const char* prefixFormat = "%02.2d:%02.2d:%02.2d T:%"PRIu64" %7s: "; CSingleLock waitLock(critSec); + int extras = (loglevel >> LOGMASKBIT) << LOGMASKBIT; + loglevel = loglevel & LOGMASK; #if !(defined(_DEBUG) || defined(PROFILE)) if (m_logLevel > LOG_LEVEL_NORMAL || (m_logLevel > LOG_LEVEL_NONE && loglevel >= LOGNOTICE)) @@ -72,6 +75,9 @@ void CLog::Log(int loglevel, const char *format, ... ) if (!m_file) return; + if (extras != 0 && (m_extraLogLevels & extras) == 0) + return; + SYSTEMTIME time; GetLocalTime(&time); @@ -218,6 +224,12 @@ int CLog::GetLogLevel() return m_logLevel; } +void CLog::SetExtraLogLevels(int level) +{ + CSingleLock waitLock(critSec); + m_extraLogLevels = level; +} + void CLog::OutputDebugString(const std::string& line) { #if defined(_DEBUG) || defined(PROFILE) diff --git a/xbmc/utils/log.h b/xbmc/utils/log.h index 7ce4cb70ea..eccad11a26 100644 --- a/xbmc/utils/log.h +++ b/xbmc/utils/log.h @@ -46,6 +46,7 @@ public: int m_repeatLogLevel; std::string m_repeatLine; int m_logLevel; + int m_extraLogLevels; CCriticalSection critSec; }; @@ -57,6 +58,7 @@ public: static bool Init(const char* path); static void SetLogLevel(int level); static int GetLogLevel(); + static void SetExtraLogLevels(int level); private: static void OutputDebugString(const std::string& line); }; |