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

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef CPLOG_H
  2. #define CPLOG_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. /**
  53. @name cpLog.h
  54. Functions to facilitate logging errors and diagnostic messages, modeled after
  55. the priority system of Unix syslog and used by all VOCAL servers
  56. @author see CVS
  57. */
  58. /**
  59. The CVS version, compiled in so users can query the binaries to find version
  60. information.  (The use of $Id makes CVS automatically insert its internal
  61. version code for the file into the file itself.)
  62. */  
  63. static const char* const cpLogHeaderVersion =
  64.     "$Id: cpLog.h,v 1.3 2001/06/29 03:42:30 bko Exp $";
  65. #include <stdarg.h>
  66. #include "VThread.hxx"
  67. /**
  68. The maximum size for a single log file.  After the file reaches this
  69. size, it will automatically be archived by the file-rotation algorithm.
  70. @see rotateFiles
  71. */
  72. #define SIZE_PER_LOGFILE 6291456 /* in bytes, i.e. six megabytes */
  73. /**
  74. @name priority levels
  75. These are the priority levels cpLog recognizes.  LOG_EMERG through
  76. LOG_DEBUG are lifted directly from the priority system in Unix syslog.
  77. The additional log levels are specific to VOCAL.
  78. */
  79. /**
  80. @{
  81. */
  82. /* the #ifndef protects these values from being clobbered by values
  83. of the same name in Unix syslog.h */
  84. #ifndef LOG_EMERG
  85. /** system is unusable */
  86. #define LOG_EMERG       0
  87. /** action must be taken immediately */
  88. #define LOG_ALERT       1
  89. /** critical conditions */
  90. #define LOG_CRIT        2
  91. /** error conditions */
  92. #define LOG_ERR         3
  93. /** warning conditions */
  94. #define LOG_WARNING     4
  95. /** normal but significant condition */
  96. #define LOG_NOTICE      5
  97. /** informational */
  98. #define LOG_INFO        6
  99. /** debug-level messages */
  100. #define LOG_DEBUG       7
  101. /** stack debug-level messages */
  102. #endif
  103. #define LOG_DEBUG_STACK 8
  104. /** stack operator debug-level messages */
  105. #define LOG_DEBUG_OPER  9
  106. /** heartbeat debug-level messages */
  107. #define LOG_DEBUG_HB   10
  108. /** an alias for the last cpLog priority level, for use in bounds-checking
  109. code */
  110. #define LAST_PRIORITY 10
  111. /**
  112. @}
  113. */
  114. /*
  115.  * tbd:
  116.  *      cpLogClose(),
  117.  *      remote log server
  118.  *      cpLogSetMask ()
  119.  */
  120. #ifdef __cplusplus
  121. extern "C" {
  122. #endif
  123. /**
  124. Generate a log message using a printf-style format string and option arguments.
  125. This function should not be called directly; it exists only as a helper function
  126. for the cpLog macro, which in turn is defined only if we are using the GNU
  127. C compiler (i.e. if the preprocessor macro __GNUC__ is defined).
  128. @param pri the priority to assign to this message
  129. @param file the file that contains the code that is calling cpLog
  130. @param line the specific line in the file where cpLog is being called
  131. @param fmt a printf-style format string
  132. @param ... any number of additional values to substitute into the string, according to printf rules
  133. */
  134. extern void cpLog_impl_ (int pri, const char* file, int line, const char* fmt, ...);
  135. /**
  136. Generate a log message using a vprintf-style format string and option arguments.
  137. This function should not be called directly; it exists only as a helper functionfor cpLog, which in turn is defined only if we are using the GNU
  138. C compiler (i.e. if the preprocessor macro __GNUC__ is defined).
  139. @param pri the priority to assign to this message
  140. @param file the file that contains the code that is calling cpLog
  141. @param line the specific line in the file where cpLog is being called
  142. @param fmt a printf-style format string
  143. @param ap  a va_list (varaible-argument list), used to pass variable arguments around
  144. */
  145. void vCpLog (int pri, const char* file, int line, const char* fmt, va_list ap);
  146. #ifdef __GNUC__
  147. /**
  148. Implement cpLog as a macro only if we are using the GNU C compiler, i.e. if
  149. __GNUC__ is defined.  The GNU C compiler defines __FILE__ and __LINE__
  150. preprocessor macros that we can use to tell cpLog_impl_ exactly where the
  151. calling code is located, allowing for easier debugging.
  152. @doc
  153. This idiom ensures that certain macro expansions work by wrapping the
  154. if statement into a single block.  Without the do-while "armor", the
  155. macro would cause syntax errors inside a one-statement block without
  156. brackets (e.g. the body of a while loop or of an if statement).
  157. The naive and more readable solution of placing brackets around this macro's
  158. expansion also would not work, because 'cpLog;' would expand to include a
  159. semicolon after the brackets, which constitutes illegal syntax.  Hence the
  160. do-while idiom is the right solution.
  161. */
  162. #define cpLog(priority__, fmt__, args__...) 
  163. do {if (priority__ <= cpLogGetPriority()) 
  164. cpLog_impl_ (priority__, __FILE__, __LINE__, fmt__ , ##args__);} 
  165. while (0)
  166. #else
  167. /**
  168. If GNU C's __FILE__ and __LINE__ macros are unavailable, use the regular
  169. cpLog function, which omits that information.
  170. @param pri the priority to assign to this message
  171. @param fmt a printf-style format string
  172. @param ... any number of additional values to substitute into the string, according to printf rules
  173. */
  174. /* By default logging is enable, To disable logging, comment the following
  175. line and uncomment the #define. Note - This is ia a hack as Solaris Forte
  176. compiler can not handle variable argument list in define macro.This would 
  177. cause lot of warnings to be generated which can be ignored.
  178. */
  179. extern void cpLog (int pri, const char *fmt, ...);
  180. //#define  cpLog(pri, fmt, args, a, b, c, d, e, f)  while(0)
  181. #endif
  182. /**
  183. Set the priority level at which messages should be printed (for the current
  184. thread).  Messages of a priority level conceptually greater than or equal
  185. to this number (numerically less than or equal) are printed.  Messages with
  186. conceptually lower (numerically higher) priorities than this level are
  187. ignored.  Don't blame us for the backwards semantics; syslog started them!
  188. @param pri the new priority level
  189. */
  190. extern void cpLogSetPriority (int pri);
  191. /**
  192. Get the current priority level.
  193. @return the current priority level
  194. @see cpLogSetPriority
  195. */
  196. extern int cpLogGetPriority ();
  197. /**
  198. Set the priority level at which messages should be printed for a particular
  199. thread, in a thread-safe manner.
  200. @see cpLogSetPriority
  201. @param thread_id a designator for the thread
  202. @param pri the new priority level
  203. */
  204. extern void cpLogSetPriorityThread (vthread_t thread_id, int pri);
  205. /**
  206. Set the priority level for a particular thread to an undefined value.
  207. * @param thread_id a designator for the thread
  208. * @see cpLogSetPriority
  209. */
  210. extern void cpLogClearPriorityThread (vthread_t thread_id);
  211. /**
  212. Give a thread a desciptive label, which will be included in all the log
  213. messages that come from that thread.
  214. @param thread_id a designator for the thread
  215. @param label the label
  216. */
  217. extern void cpLogSetLabelThread (vthread_t thread_id, const char* label);
  218. /**
  219. Remove a thread's descriptive label, so that no special identifier will
  220. be included in log messages it sends.
  221. @param thread_id a designator for the thread
  222. */
  223. extern void cpLogClearLabelThread (vthread_t thread_id);
  224. /**
  225. Give the current thread a descriptive label, which will be included in all
  226. the log messages it sends.  Every program should call cpLogSetLabel
  227. before it begins logging.
  228. @param label the label
  229. */
  230. extern void cpLogSetLabel (const char* label);
  231. /**
  232. Print to standard error the current label, priority, and log file path.
  233. */
  234. extern void cpLogShow (void);
  235. /**
  236. Start logging to the Unix syslog facility, rather than to a file.
  237. */
  238. void cpLogOpenSyslog();
  239. /**
  240. Open a log file.  A program should call cpLogOpen when it wants to begin
  241. logging to a file, as opposed to some other sink like standard error.
  242. @param filename the path to the file
  243. @return 1 if the log file was successfully opened for writing, 0 otherwise
  244. */
  245. extern int cpLogOpen (const char* filename);
  246. /**
  247. Given a string with a descriptive name for a priority level, return the
  248. number that is the priority level itself.
  249. @param priority a descriptive name for a priority level
  250. @return the priority level, or -1 if the string is not a recognized name
  251. for any level
  252. */
  253. extern int cpLogStrToPriority(const char* priority);
  254. /**
  255. Given a numerical priority level, return a descriptive name for that level.
  256. * @param priority the numerical priority level
  257. * @return a descriptive name, or a null pointer if the number passed in
  258. * does not correspond to a recognized priority level
  259. */
  260. extern const char* cpLogPriorityToStr(int priority);
  261. /* CPLOG_H */
  262. #ifdef __cplusplus
  263. }
  264. #endif
  265. #endif