VLog.hxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:15k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #if !defined(VLOG_DOT_H)
  2. #define VLOG_DOT_H
  3. /* ====================================================================
  4.  * The Vovida Software License, Version 1.0 
  5.  * 
  6.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  7.  * 
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  * 
  20.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  21.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  22.  *    not be used to endorse or promote products derived from this
  23.  *    software without prior written permission. For written
  24.  *    permission, please contact vocal@vovida.org.
  25.  *
  26.  * 4. Products derived from this software may not be called "VOCAL", nor
  27.  *    may "VOCAL" appear in their name, without prior written
  28.  *    permission of Vovida Networks, Inc.
  29.  * 
  30.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  31.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  32.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  33.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  34.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  35.  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  36.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  37.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  38.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  39.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  40.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  41.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  42.  * DAMAGE.
  43.  * 
  44.  * ====================================================================
  45.  * 
  46.  * This software consists of voluntary contributions made by Vovida
  47.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  48.  * Inc.  For more information on Vovida Networks, Inc., please see
  49.  * <http://www.vovida.org/>.
  50.  *
  51.  */
  52. static const char* const VLog_hxx_Version = 
  53.     "$Id: VLog.hxx,v 1.3 2001/04/10 22:55:47 icahoon Exp $";
  54. #include "Log.hxx"
  55. #include "CpPriorityLog.hxx"
  56. #include <string>
  57. /** Infrastructure common to VOCAL.
  58.  */
  59. namespace Vocal 
  60. {
  61. /** Infrastructure in VOCAL related to logging.<br><br>
  62.  */
  63. namespace Logging
  64. {
  65. /** Intended for a complete stack trace.<br><br>
  66.  */
  67. #define     LOG_TRACE          100
  68. /** Intended for annoyingly verbose and potentially system slowing
  69.  *  logging messages.<br><br>
  70.  */
  71. #define     LOG_VERBOSE          101
  72. /** Vocal specific stream based logging facility.<br><br>
  73.  *
  74.  *  @see    Vocal::Logging::Log
  75.  *  @see    Vocal::Logging::PriorityLog
  76.  *  @see    Vocal::Logging::CpPriorityLog
  77.  */
  78. class VLog : public Vocal::Logging::Log
  79. {
  80.     public:
  81.      /** A VLog should be constructed locally on the stack. This allows
  82.  *  a local PriorityLog for writing, see the Prototype pattern in
  83.  *  Design Patterns. The local PriorityLog isn't created until it 
  84.  *  is used.
  85.  */
  86.      VLog();
  87.      /** Construct a VLog and create a Trace entry indicating function entry. 
  88.  *  On destruction a Trace entry indicating function exit will be made.
  89.  */
  90.      VLog(const string & func_name);
  91.      /** A Trace entry indicating function exit will be made if the Trace
  92.  *  constructor was used.
  93.  */
  94. virtual ~VLog();
  95.      /** Initialize the VLog facility, this should be done in 
  96.  *  Application::init(). 
  97.  *
  98.  *  @param  priorityLevel   The lowest level priority to be logged.
  99.  *  @param  file         If given, the name of the log file to be 
  100.  *                 created.
  101.  *
  102.  *  @see    Vocal::Process::Application
  103.  */
  104. static void            init(
  105.                     int       priorityLevel,
  106. const char * file = 0);
  107.      /** Uninitialize the VLog facility, this should be done in 
  108.  *  Application::uninit(). 
  109.  *
  110.  *  @see    Vocal::Process::Application
  111.  */
  112. static void           uninit();
  113.      /** Dynamically enable logging for the given priority across the entire
  114.  *  application. This only applies to VLogs created after this class
  115.  *  method is called.
  116.  */
  117.      static void          on(int priority);
  118.      /** Dynamically disable logging for the given priority. This only 
  119.  *  applies to VLogs created after this class method is called.
  120.  */
  121. static void          off(int);
  122.      /** Dynamically enable logging for the given priority for this instance
  123.  *  of the VLog. The global priority is unchanged. 
  124.  */
  125. void     logOn(int);
  126.      /** Dynamically disable logging for the given priority for this instance
  127.  *  of the VLog. The global priority is unchanged. 
  128.  */
  129.           void          logOff(int);
  130.      /** Dynamically disable logging for the given priority for this instance
  131.  *  of the VLog. The global priority is unchanged. 
  132.  */
  133. PriorityLog &     logEmergency();
  134.      /** Return the PriorityLog associated with the LOG_ALERT priority.
  135.  */
  136. PriorityLog &     logAlert();
  137.      /** Return the PriorityLog associated with the LOG_CRITICAL priority.
  138.  */
  139. PriorityLog &     logCritical();
  140.      /** Return the PriorityLog associated with the LOG_ERROR priority.
  141.  */
  142. PriorityLog &     logError();
  143.      /** Return the PriorityLog associated with the LOG_WARNING priority.
  144.  */
  145. PriorityLog &     logWarning();
  146.      /** Return the PriorityLog associated with the LOG_NOTICE priority.
  147.  */
  148. PriorityLog &     logNotice();
  149.      /** Return the PriorityLog associated with the LOG_INFO priority.
  150.  */
  151. PriorityLog &     logInfo();
  152.      /** Return the PriorityLog associated with the LOG_DEBUG priority.
  153.  */
  154. PriorityLog &     logDebug();
  155.      /** Return the PriorityLog associated with the LOG_DEBUG_STACK priority.
  156.  */
  157. PriorityLog &     logDebugStack();
  158.      /** Return the PriorityLog associated with the LOG_DEBUG_OPER priority.
  159.  */
  160. PriorityLog &     logDebugOper();
  161.      /** Return the PriorityLog associated with the LOG_DEBUG_HB priority.
  162.  */
  163. PriorityLog &     logDebugHB();
  164.      /** Return the PriorityLog associated with the LOG_TRACE priority.
  165.  */
  166. PriorityLog &     logTrace();
  167.      /** Return the PriorityLog associated with the LOG_VERBOSE priority.
  168.  */
  169. PriorityLog &     logVerbose();
  170.         /** Return the name of the corresponding log level.
  171.          */
  172.         static  const char *        logName(int);
  173.         /** Return the log level corresponding to the name.
  174.          */
  175.         static  int                 logValue(const char *);
  176.     private:
  177.      static Sptr<PriorityLog>   null_;
  178.      static bool          traceOn_;
  179.      static bool          verboseOn_;
  180.           Sptr<PriorityLog>   emergency_;
  181.           Sptr<PriorityLog>   alert_;
  182.           Sptr<PriorityLog>   critical_;
  183. Sptr<PriorityLog>   error_;
  184.           Sptr<PriorityLog>   warning_;
  185.           Sptr<PriorityLog>   notice_;
  186.           Sptr<PriorityLog>   info_;
  187.           Sptr<PriorityLog>   debug_;
  188.           Sptr<PriorityLog>   debugStack_;
  189.           Sptr<PriorityLog>   debugOper_;
  190.           Sptr<PriorityLog>   debugHB_;
  191. bool          trace_;
  192. bool          verbose_;
  193. string          funcName_;
  194. };  
  195. } // namespace Logging
  196. } // namespace Vocal
  197. /**@name VLog ostream MACROS <br><br>
  198.  *
  199.  *  MACROS for logging messages rather than just using VLog.<br><br>
  200.  *
  201.  *  This checks if the log level is enabled before inserting into the ostream.
  202.  *  This should be used similarly to an ostream, e.g., 
  203.  *  <br><br>
  204.  *  <code>
  205.  *  VDEBUG(log) << "message" << VDEBUG_END(log);
  206.  *  </code>
  207.  *
  208.  *  @see    Vocal::Logging::VLog
  209.  */
  210. //@{
  211. /** Corresponds to LOG_EMERG
  212.  */
  213. #define     VEMERG(x)   if ( !((x).logEmergency().isOn()) );
  214.                else (x).logEmergency().get(true)
  215. /** Corresponds to LOG_ALERT
  216.  */
  217. #define     VALERT(x) if ( !((x).logAlert().isOn()) );
  218.                else (x).logAlert().get(true)
  219. /** Corresponds to LOG_CRIT
  220.  */
  221. #define     VCRIT(x) if ( !((x).logCritical().isOn()) );
  222.                else (x).logCritical().get(true)
  223. /** Corresponds to LOG_ERR
  224.  */
  225. #define     VERR(x) if ( !((x).logError().isOn()) );
  226.                else (x).logError().get(true)
  227. /** Corresponds to LOG_WARNING
  228.  */
  229. #define     VWARN(x) if ( !((x).logWarning().isOn()) );
  230.                else (x).logWarning().get(true)
  231. /** Corresponds to LOG_NOTICE
  232.  */
  233. #define     VNOTICE(x) if ( !((x).logNotice().isOn()) );
  234.                else (x).logNotice().get(true)
  235. /** Corresponds to LOG_EMERG
  236.  */
  237. #define     VINFO(x) if ( !((x).logInfo().isOn()) );
  238.                else (x).logInfo().get(true)
  239. /** Corresponds to LOG_DEBUG
  240.  */
  241. #define     VDEBUG(x) if ( !((x).logDebug().isOn()) );
  242.                else (x).logDebug().get(true)
  243. /** Corresponds to LOG_DEBUG_STACK
  244.  */
  245. #define     VDEBUG_STACK(x) if ( !((x).logDebugStack().isOn()) );
  246.                    else (x).logDebugStack().get(true)
  247. /** Corresponds to LOG_DEBUG_OPER
  248.  */
  249. #define     VDEBUG_OPER(x)  if ( !((x).logDebugOper().isOn()) );
  250.                    else (x).logDebugOper().get(true)
  251. /** Corresponds to LOG_DEBUG_HB
  252.  */
  253. #define     VDEBUG_HB(x)    if ( !((x).logDebugHB().isOn()) );
  254.                    else (x).logDebugHB().get(true)
  255. /** Corresponds to LOG_TRACE
  256.  */
  257. #define     VTRACE(x)     if ( !((x).logTrace().isOn()) );
  258.                    else (x).logTrace().get(true)
  259. /** Corresponds to LOG_VERBOSE
  260.  */
  261. #define     VVERBOSE(x)     if ( !((x).logVerbose().isOn()) );
  262.                    else (x).logVerbose().get(true)
  263. //@}
  264. /**@name VLog ostream continuation MACROS<br><br>
  265.  *
  266.  * MACRO for the continuation of a VLog ostream.<br><br>
  267.  *
  268.  *  This checks if the log level is enabled before inserting into the ostream.
  269.  *  This should be used similarly to an ostream, e.g., 
  270.  *  <br><br>
  271.  *  <code>
  272.  *  VDEBUG(log) << "message";<br>
  273.  *  VDEBUG_CONT(log) << "message_cont" << VDEBUG_END(log);
  274.  *  </code>
  275.  *
  276.  *  @see    Vocal::Logging::VLog
  277.  */
  278. //@{
  279. /** Corresponds to LOG_EMERG
  280.  */
  281. #define     VEMERG_CONT(x)  if ( !((x).logEmergency().isOn()) );
  282.                    else (x).logEmergency().get()
  283. /** Corresponds to LOG_ALERT
  284.  */
  285. #define     VALERT_CONT(x)  if ( !((x).logAlert().isOn()) );
  286.                    else (x).logAlert().get()
  287. /** Corresponds to LOG_CRIT
  288.  */
  289. #define     VCRIT_CONT(x)   if ( !((x).logCritical().isOn()) );
  290.                    else (x).logCritical().get()
  291. /** Corresponds to LOG_ERR
  292.  */
  293. #define     VERR_CONT(x)    if ( !((x).logError().isOn()) );
  294.                    else (x).logError().get()
  295. /** Corresponds to LOG_WARNING
  296.  */
  297. #define     VWARN_CONT(x)   if ( !((x).logWarning().isOn()) );
  298.                    else (x).logWarning().get()
  299. /** Corresponds to LOG_NOTICE
  300.  */
  301. #define     VNOTICE_CONT(x) if ( !((x).logNotice().isOn()) );
  302.                    else (x).logNotice().get()
  303. /** Corresponds to LOG_EMERG
  304.  */
  305. #define     VINFO_CONT(x)   if ( !((x).logInfo().isOn()) );
  306.                    else (x).logInfo().get()
  307. /** Corresponds to LOG_DEBUG
  308.  */
  309. #define     VDEBUG_CONT(x)  if ( !((x).logDebug().isOn()) );
  310.                    else (x).logDebug().get()
  311. /** Corresponds to LOG_DEBUG_STACK
  312.  */
  313. #define     VDEBUG_STACK_CONT(x)    if ( !((x).logDebugStack().isOn()) );
  314.                            else (x).logDebugStack().get()
  315. /** Corresponds to LOG_DEBUG
  316.  */
  317. #define     VDEBUG_OPER_CONT(x)     if ( !((x).logDebugOper().isOn()) );
  318.                            else (x).logDebugOper().get()
  319. /** Corresponds to LOG_DEBUG
  320.  */
  321. #define     VDEBUG_HB_CONT(x)   if ( !((x).logDebugHB().isOn()) );
  322.                        else (x).logDebugHB().get()
  323. /** Corresponds to LOG_TRACE
  324.  */
  325. #define     VTRACE_CONT(x)  if ( !((x).logTrace().isOn()) );
  326.                    else (x).logTrace().get()
  327. /** Corresponds to LOG_VERBOSE
  328.  */
  329. #define     VVERBOSE_CONT(x)    if ( !((x).logVerbose().isOn()) );
  330.                        else (x).logVerbose().get()
  331. //@}
  332. /**@name VLog ostream termination MACROS<br><br>
  333.  *
  334.  * MACRO for ending VLog ostream messages.<br><br>
  335.  *
  336.  *  This should be used to end an ostream, e.g., 
  337.  *  <br><br>
  338.  *  <code>
  339.  *  VCRIT(log) << "message" << VCRIT_END(log);
  340.  *  </code>
  341.  *
  342.  *  @see    Vocal::Logging::VLog
  343.  */
  344. //@{
  345. using Vocal::Logging::setFile;
  346. using Vocal::Logging::setLine;
  347. /** Corresponds to LOG_EMERG
  348.  */
  349. #define     VEMERG_END(x) 
  350.     setFile((x).logEmergency(),__FILE__) 
  351.     << setLine((x).logEmergency(),__LINE__)
  352.     << (x).logEmergency()
  353. /** Corresponds to LOG_ALERT
  354.  */
  355. #define     VALERT_END(x) 
  356.     setFile((x).logAlert(),__FILE__)
  357.     << setLine((x).logAlert(),__LINE__)
  358.     << (x).logAlert()
  359. /** Corresponds to LOG_CRIT
  360.  */
  361. #define     VCRIT_END(x) 
  362.     setFile((x).logCritical(),__FILE__)
  363.     << setLine((x).logCritical(),__LINE__)
  364.     << (x).logCritical()
  365. /** Corresponds to LOG_ERR
  366.  */
  367. #define     VERR_END(x) 
  368.     setFile((x).logError(),__FILE__)
  369.     << setLine((x).logError(),__LINE__)
  370.     << (x).logError()
  371. /** Corresponds to LOG_WARNING
  372.  */
  373. #define     VWARN_END(x) 
  374.     setFile((x).logWarning(),__FILE__)
  375.     << setLine((x).logWarning(),__LINE__)
  376.     << (x).logWarning()
  377. /** Corresponds to LOG_NOTICE
  378.  */
  379. #define     VNOTICE_END(x) 
  380.     setFile((x).logNotice(),__FILE__)
  381.     << setLine((x).logNotice(),__LINE__)
  382.     << (x).logNotice()
  383. /** Corresponds to LOG_INFO
  384.  */
  385. #define     VINFO_END(x) 
  386.     setFile((x).logInfo(),__FILE__)
  387.     << setLine((x).logInfo(),__LINE__)
  388.     << (x).logInfo()
  389. /** Corresponds to LOG_DEBUG
  390.  */
  391. #define     VDEBUG_END(x) 
  392.     setFile((x).logDebug(),__FILE__)
  393.     << setLine((x).logDebug(),__LINE__)
  394.     << (x).logDebug()
  395. /** Corresponds to LOG_DEBUG_STACK
  396.  */
  397. #define     VDEBUG_STACK_END(x) 
  398.     setFile((x).logDebugStack(),__FILE__)
  399.     << setLine((x).logDebugStack(),__LINE__)
  400.     << (x).logDebugStack()
  401. /** Corresponds to LOG_DEBUG_OPER
  402.  */
  403. #define     VDEBUG_OPER_END(x) 
  404.     setFile((x).logDebugOper(),__FILE__)
  405.     << setLine((x).logDebugOper(),__LINE__)
  406.     << (x).logDebugOper()
  407. /** Corresponds to LOG_DEBUG_HB
  408.  */
  409. #define     VDEBUG_HB_END(x) 
  410.     setFile((x).logDebugHB(),__FILE__)
  411.     << setLine((x).logDebugHB(),__LINE__)
  412.     << (x).logDebugHB()
  413. /** Corresponds to LOG_TRACE
  414.  */
  415. #define     VTRACE_END(x) 
  416.     setFile((x).logTrace(),__FILE__)
  417.     << setLine((x).logTrace(),__LINE__)
  418.     << (x).logTrace()
  419. /** Corresponds to LOG_VERBOSE
  420.  */
  421. #define     VVERBOSE_END(x) 
  422.     setFile((x).logVerbose(),__FILE__)
  423.     << setLine((x).logVerbose(),__LINE__)
  424.     << (x).logVerbose()
  425. //@}
  426. #endif // !defined(VLOG_DOT_H)