- enum Level
- {
- FatalError, // program can't continue, abort immediately
- Error, // a serious error, user must be informed about it
- Warning, // warning: user is normally informed about but may ignore it
- Message, // normal message (i.e. normal output of a non GUI app)
- Info, // informational message (a.k.a. 'Verbose')
- Status, // informational: might go to the status line of GUI app
- Debug, // never shown to the user, disabled in release mode
- Trace, // trace messages are also only enabled in debug mode
- Progress, // used for progress indicator (not yet)
- User1, // user defined levels (use with wxLogGeneric(wxLog::User1,...)
- User2, //
- User3, //
- };
-
- // ctor
- wxLog();
-
- // sink function
- static void OnLog(Level level, const char *szString)
- { if ( ms_pLogger != 0 ) ms_pLogger->DoLog(level, szString); }
-
- // message buffering
- // flush shows all messages if they're not logged immediately
- // (FILE and iostream logs don't need it, but wxGuiLog does to avoid
- // showing 17 modal dialogs one after another)
- virtual void Flush();
- // call Flush() only if this function returns true
- bool HasPendingMessages() const { return m_bHasMessages; }
-
- // only one sink is active at each moment
- // get current log target
- static wxLog *GetActiveTarget();
- // change log target, pLogger = NULL disables logging,
- // returns the previous log target
- static wxLog *SetActiveTarget(wxLog *pLogger);
-
- // functions controlling the default wxLog behaviour
- // verbose mode is activated by standard command-line '-verbose' option
- static void SetVerbose(bool bVerbose = TRUE) { ms_bVerbose = bVerbose; }
- // sets the format for timestamp prepended by wxLog::DoLog(): it's
- // passed to strftime() function, see it's documentation for details.
- // the string is not copied!
- static void SetTimeStampFormat(const char *szTimeFormat)
- { ms_szTimeFormat = szTimeFormat; }
-
- // accessors
+ // ctor
+ wxLog(){}
+
+ // Internal buffer.
+
+ // Allow replacement of the fixed size static buffer with
+ // a user allocated one. Pass in NULL to restore the
+ // built in static buffer.
+ static wxChar *SetLogBuffer( wxChar *buf, size_t size = 0 );
+
+ // these functions allow to completely disable all log messages
+
+ // is logging disabled now?
+ static bool IsEnabled() { return ms_doLog; }
+
+ // change the flag state, return the previous one
+ static bool EnableLogging(bool doIt = true)
+ { bool doLogOld = ms_doLog; ms_doLog = doIt; return doLogOld; }
+
+ // static sink function - see DoLog() for function to overload in the
+ // derived classes
+ static void OnLog(wxLogLevel level, const wxChar *szString, time_t t)
+ {
+ if ( IsEnabled() && ms_logLevel >= level )
+ {
+ wxLog *pLogger = GetActiveTarget();
+ if ( pLogger )
+ pLogger->DoLog(level, szString, t);
+ }
+ }
+
+ // message buffering
+
+ // flush shows all messages if they're not logged immediately (FILE
+ // and iostream logs don't need it, but wxGuiLog does to avoid showing
+ // 17 modal dialogs one after another)
+ virtual void Flush();
+
+ // flush the active target if any
+ static void FlushActive()
+ {
+ if ( !ms_suspendCount )
+ {
+ wxLog *log = GetActiveTarget();
+ if ( log )
+ log->Flush();
+ }
+ }
+
+ // only one sink is active at each moment
+ // get current log target, will call wxApp::CreateLogTarget() to
+ // create one if none exists
+ static wxLog *GetActiveTarget();
+
+ // change log target, pLogger may be NULL
+ static wxLog *SetActiveTarget(wxLog *pLogger);
+
+ // suspend the message flushing of the main target until the next call
+ // to Resume() - this is mainly for internal use (to prevent wxYield()
+ // from flashing the messages)
+ static void Suspend() { ms_suspendCount++; }
+
+ // must be called for each Suspend()!
+ static void Resume() { ms_suspendCount--; }
+
+ // functions controlling the default wxLog behaviour
+ // verbose mode is activated by standard command-line '-verbose'
+ // option
+ static void SetVerbose(bool bVerbose = true) { ms_bVerbose = bVerbose; }
+
+ // Set log level. Log messages with level > logLevel will not be logged.
+ static void SetLogLevel(wxLogLevel logLevel) { ms_logLevel = logLevel; }
+
+ // should GetActiveTarget() try to create a new log object if the
+ // current is NULL?
+ static void DontCreateOnDemand();
+
+ // trace mask (see wxTraceXXX constants for details)
+ static void SetTraceMask(wxTraceMask ulMask) { ms_ulTraceMask = ulMask; }
+
+ // add string trace mask
+ static void AddTraceMask(const wxString& str)
+ { ms_aTraceMasks.push_back(str); }
+
+ // add string trace mask
+ static void RemoveTraceMask(const wxString& str);
+
+ // remove all string trace masks
+ static void ClearTraceMasks();
+
+ // get string trace masks
+ static const wxArrayString &GetTraceMasks() { return ms_aTraceMasks; }
+
+ // sets the timestamp string: this is used as strftime() format string
+ // for the log targets which add time stamps to the messages - set it
+ // to NULL to disable time stamping completely.
+ static void SetTimestamp(const wxChar *ts) { ms_timestamp = ts; }
+
+
+ // accessors
+