<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>log.cpp Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.2.17 --> <center> <a class="qindex" href="main.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>log.cpp</h1><a href="log_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 00013 <span class="preprocessor">#include "<a class="code" href="sysconfig_8h.html">sysconfig.h</a>"</span> 00014 <span class="preprocessor">#include "<a class="code" href="log_8h.html">log.h</a>"</span> 00015 <span class="preprocessor">#include "<a class="code" href="guard_8h.html">guard.h</a>"</span> 00016 <a name="l00027"></a><a class="code" href="classLog.html#a0">00027</a> <a class="code" href="classLog.html#a0">Log::Log</a>(string& r_fname) { 00028 InitializeCriticalSection(&<a class="code" href="classLog.html#o4">mMutex</a>); 00029 <a class="code" href="classLog.html#o0">mFileName</a> = r_fname; 00030 <span class="keywordflow">if</span> (<a class="code" href="classLog.html#o0">mFileName</a> != <span class="stringliteral">""</span>) { <span class="comment">// We want to use a file</span> 00031 <a class="code" href="classLog.html#o1">mpFile</a> = <span class="keyword">new</span> ofstream(<a class="code" href="classLog.html#o0">mFileName</a>.c_str(),ios_base::out|ios_base::app); 00032 } <span class="keywordflow">else</span> { <span class="comment">// No file - logging will be done to cout (console)</span> 00033 <a class="code" href="classLog.html#o1">mpFile</a> = NULL; 00034 } 00035 <a class="code" href="classLog.html#o2">mActive</a> = <span class="keyword">true</span>; 00036 } 00037 <a name="l00048"></a><a class="code" href="classLog.html#a1">00048</a> <a class="code" href="classLog.html#a0">Log::Log</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * fname) { 00049 InitializeCriticalSection(&<a class="code" href="classLog.html#o4">mMutex</a>); 00050 <a class="code" href="classLog.html#o0">mFileName</a> = fname; 00051 <span class="keywordflow">if</span> (<a class="code" href="classLog.html#o0">mFileName</a> != <span class="stringliteral">""</span>) { <span class="comment">// We want to use a file</span> 00052 <a class="code" href="classLog.html#o1">mpFile</a> = <span class="keyword">new</span> ofstream(<a class="code" href="classLog.html#o0">mFileName</a>.c_str(),ios_base::out|ios_base::app); 00053 } <span class="keywordflow">else</span> { <span class="comment">// No file - logging will be done to cout (console)</span> 00054 <a class="code" href="classLog.html#o1">mpFile</a> = NULL; 00055 } 00056 <a class="code" href="classLog.html#o2">mActive</a> = <span class="keyword">true</span>; 00057 } 00058 <a name="l00062"></a><a class="code" href="classLog.html#a2">00062</a> <a class="code" href="classLog.html#a2">Log::~Log</a>() { 00063 <span class="keywordflow">if</span> (mpFile) { <span class="comment">// Nothing to be done for cout logs</span> 00064 <a class="code" href="classLog.html#o1">mpFile</a>->close(); 00065 <span class="keyword">delete</span> <a class="code" href="classLog.html#o1">mpFile</a>; 00066 } 00067 DeleteCriticalSection(&<a class="code" href="classLog.html#o4">mMutex</a>); 00068 } 00069 <a name="l00077"></a><a class="code" href="classLog.html#c2">00077</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#c2">Log::SetTime</a>() { 00078 time_t tm_secs = time(&tm_secs); 00079 <span class="keyword">struct </span>tm *tm_time = localtime(&tm_secs); 00080 00081 strftime(<a class="code" href="classLog.html#o3">mTimeStamp</a>, 40, <span class="stringliteral">"[%Y-%m-%d %H:%M:%S] "</span>, tm_time); 00082 } 00083 <a name="l00089"></a><a class="code" href="classLog.html#a3">00089</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#a3">Log::Write</a>(<span class="keyword">const</span> string& r_msg) { 00090 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>); 00091 <span class="keywordflow">if</span>(mActive) { 00092 <a class="code" href="classLog.html#c2">SetTime</a>(); 00093 <span class="keywordflow">if</span> (mpFile) 00094 *<a class="code" href="classLog.html#o1">mpFile</a> << <a class="code" href="classLog.html#o3">mTimeStamp</a> << r_msg << endl; 00095 <span class="keywordflow">else</span> 00096 cout << <a class="code" href="classLog.html#o3">mTimeStamp</a> << r_msg << endl; 00097 } 00098 } 00099 <a name="l00115"></a><a class="code" href="classLog.html#a4">00115</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#a3">Log::Write</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...) 00116 { 00117 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>); 00118 <span class="keywordflow">if</span>(mActive) { 00119 <span class="keywordtype">char</span> buf[1024]; 00120 va_list args; 00121 va_start (args, fmt); 00122 vsprintf (buf, fmt, args); 00123 va_end (args); 00124 <a class="code" href="classLog.html#c2">SetTime</a>(); 00125 <span class="keywordflow">if</span> (mpFile) 00126 *<a class="code" href="classLog.html#o1">mpFile</a> << <a class="code" href="classLog.html#o3">mTimeStamp</a> << buf << endl; 00127 <span class="keywordflow">else</span> 00128 cout << <a class="code" href="classLog.html#o3">mTimeStamp</a> << buf << endl; 00129 } 00130 } 00131 <a name="l00137"></a><a class="code" href="classLog.html#a5">00137</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#a5">Log::SetActive</a>(<span class="keywordtype">bool</span> b) { 00138 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>); 00139 <a class="code" href="classLog.html#o2">mActive</a> = b; 00140 } 00141 <a name="l00147"></a><a class="code" href="classLog.html#a6">00147</a> <span class="keywordtype">bool</span> <a class="code" href="classLog.html#a6">Log::IsActive</a>() { 00148 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>); 00149 <span class="keywordflow">return</span> <a class="code" href="classLog.html#o2">mActive</a>; 00150 } 00151 </pre></div><hr><address style="align: right;"><small>Generated on Mon Mar 29 23:12:53 2004 for Paradigm by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.17 </small></address> </body> </html>