Destroys the previous log target.
+\membersection{wxLogChain::DetachOldLog}\label{wxlogchaindetacholdlog}
+
+\func{void}{DetachOldLog}{\void}
+
+Detaches the old log target so it won't be destroyed when the wxLogChain object
+is destroyed.
+
\membersection{wxLogChain::GetOldLog}\label{wxlogchaingetoldlog}
\constfunc{wxLog *}{GetOldLog}{\void}
Resumes logging.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogPassThrough %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogInterposer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\section{\class{wxLogPassThrough}}\label{wxlogpassthrough}
+\section{\class{wxLogInterposer}}\label{wxloginterposer}
A special version of \helpref{wxLogChain}{wxlogchain} which uses itself as the
-new log target. Maybe more clearly, it means that this is a log target which
-forwards the log messages to the previously installed one in addition to
+new log target. It forwards log messages to the previously installed one in addition to
processing them itself.
Unlike \helpref{wxLogChain}{wxlogchain} which is usually used directly as is,
this class must be derived from to implement \helpref{DoLog}{wxlogdolog}
and/or \helpref{DoLogString}{wxlogdologstring} methods.
+wxLogInterposer destroys the previous log target in its destructor. If you
+don't want this to happen, use wxLogInterposerTemp instead.
+
+\wxheading{Derived from}
+
+\helpref{wxLogChain}{wxlogchain}
+
+\wxheading{Include files}
+
+<wx/log.h>
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxLogInterposer::wxLogInterposer}\label{wxloginterposerctor}
+
+The default constructor installs this object as the current active log target.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogInterposerTemp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{\class{wxLogInterposerTemp}}\label{wxloginterposertemp}
+
+A special version of \helpref{wxLogChain}{wxlogchain} which uses itself as the
+new log target. It forwards log messages to the previously installed one in addition to
+processing them itself. Unlike \helpref{wxLogInterposer}{wxloginterposer}, it doesn't
+delete the old target which means it can be used to temporarily redirect log output.
+
+As per wxLogInterposer, this class must be derived from to implement \helpref{DoLog}{wxlogdolog}
+and/or \helpref{DoLogString}{wxlogdologstring} methods.
+
\wxheading{Derived from}
\helpref{wxLogChain}{wxlogchain}
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogPassThrough::wxLogPassThrough}\label{wxlogpassthroughctor}
+\membersection{wxLogInterposerTemp::wxLogInterposerTemp}\label{wxloginterposertempctor}
-Default ctor installs this object as the current active log target.
+The default constructor installs this object as the current active log target.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogStderr %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\wxheading{Derived from}
-\helpref{wxLogPassThrough}{wxlogpassthrough}
+\helpref{wxLogInterposer}{wxloginterposer}
\wxheading{Include files}
\helpref{wxLogGui}{wxloggui},\\
\helpref{wxLogNull}{wxlognull},\\
\helpref{wxLogChain}{wxlogchain},\\
-\helpref{wxLogPassThrough}{wxlogpassthrough},\\
+\helpref{wxLogInterposer}{wxloginterposer},\\
+\helpref{wxLogInterposerTemp}{wxloginterposertemp},\\
\helpref{wxStreamToTextRedirector}{wxstreamtotextredirector}
This is a general overview of logging classes provided by wxWidgets. The word
The log targets can also be combined: for example you may wish to redirect the
messages somewhere else (for example, to a log file) but also process them as
-normally. For this the \helpref{wxLogChain}{wxlogchain} and
-\helpref{wxLogPassThrough}{wxlogpassthrough} can be used.
+normally. For this the \helpref{wxLogChain}{wxlogchain}, \helpref{wxLogInterposer}{wxloginterposer} and\rtfsp
+\helpref{wxLogInterposerTemp}{wxloginterposertemp} can be used.
// override base class version to flush the old logger as well
virtual void Flush();
+ // call to avoid destroying the old log target
+ void DetachOldLog() { m_logOld = NULL; }
+
protected:
// pass the chain to the old logger if needed
virtual void DoLog(wxLogLevel level, const wxString& szString, time_t t);
};
// a chain log target which uses itself as the new logger
-class WXDLLIMPEXP_BASE wxLogPassThrough : public wxLogChain
+
+#define wxLogPassThrough wxLogInterposer
+
+class WXDLLIMPEXP_BASE wxLogInterposer : public wxLogChain
+{
+public:
+ wxLogInterposer();
+
+private:
+ DECLARE_NO_COPY_CLASS(wxLogInterposer)
+};
+
+// a temporary interposer which doesn't destroy the old log target
+// (calls DetachOldLog)
+
+class WXDLLIMPEXP_BASE wxLogInterposerTemp : public wxLogChain
{
public:
- wxLogPassThrough();
+ wxLogInterposerTemp();
private:
- DECLARE_NO_COPY_CLASS(wxLogPassThrough)
+ DECLARE_NO_COPY_CLASS(wxLogInterposerTemp)
};
#if wxUSE_GUI
}
}
-// ----------------------------------------------------------------------------
-// wxLogPassThrough
-// ----------------------------------------------------------------------------
-
#ifdef __VISUALC__
// "'this' : used in base member initializer list" - so what?
#pragma warning(disable:4355)
#endif // VC++
-wxLogPassThrough::wxLogPassThrough()
+// ----------------------------------------------------------------------------
+// wxLogInterposer
+// ----------------------------------------------------------------------------
+
+wxLogInterposer::wxLogInterposer()
+ : wxLogChain(this)
+{
+}
+
+// ----------------------------------------------------------------------------
+// wxLogInterposerTemp
+// ----------------------------------------------------------------------------
+
+wxLogInterposerTemp::wxLogInterposerTemp()
: wxLogChain(this)
{
+ DetachOldLog();
}
#ifdef __VISUALC__