logrotate.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:5k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: logrotate.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/05/04 18:26:35  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef UTIL___LOGROTATE__HPP
  10. #define UTIL___LOGROTATE__HPP
  11. /*  $Id: logrotate.hpp,v 1000.1 2004/05/04 18:26:35 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author:  Aaron Ucko, NCBI
  37. *
  38. * File Description:
  39. *   File streams supporting log rotation
  40. *
  41. */
  42. #include <corelib/ncbistd.hpp>
  43. /** @addtogroup RotatingLog
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. class CRotatingLogStream;
  49. class NCBI_XUTIL_EXPORT CRotatingLogStreamBuf : public CNcbiFilebuf {
  50. public:
  51.     CRotatingLogStreamBuf(CRotatingLogStream* stream, const string& filename,
  52.                           CT_OFF_TYPE limit, IOS_BASE::openmode mode);
  53.     void Rotate(void);
  54. protected:
  55.     virtual CT_INT_TYPE overflow(CT_INT_TYPE c = CT_EOF);
  56.     virtual int sync(void);
  57. private:
  58.     CRotatingLogStream* m_Stream;
  59.     string              m_FileName;
  60.     CT_POS_TYPE         m_Size;
  61.     CT_OFF_TYPE         m_Limit; // in bytes
  62.     IOS_BASE::openmode  m_Mode;
  63. };
  64. class NCBI_XUTIL_EXPORT CRotatingLogStream : public CNcbiOstream {
  65. public:
  66.     // limit is approximate; the actual length may exceed it by a buffer's
  67.     // worth of characters.
  68.     CRotatingLogStream(const string& filename, CT_OFF_TYPE limit,
  69.                        openmode mode = app | ate | out)
  70.         : CNcbiOstream(new CRotatingLogStreamBuf(this, filename, limit, mode))
  71.         { }
  72.     virtual ~CRotatingLogStream(void)
  73.         { delete rdbuf(); }
  74.     // Users may call this explicitly to rotate on some basis other
  75.     // than size (such as time since last rotation or a signal from
  76.     // some external process).
  77.     void Rotate(void)
  78.         { flush(); dynamic_cast<CRotatingLogStreamBuf*>(rdbuf())->Rotate(); }
  79. protected:
  80.     // Specifies how to rename old logs.  Returning an empty string
  81.     // indicates that any appropriate renaming has already occurred,
  82.     // for instance because this method took care of it directly or
  83.     // because some other program rotated the logs for us and asked us
  84.     // to switch to a new file (traditionally, by sending SIGHUP).
  85.     // Changing "name" is also legitimate, and indicates that the NEW
  86.     // logs should have a different name.
  87.     // The default behavior is to append a timestamp to name.
  88.     virtual string x_BackupName(string& name);
  89.     friend class CRotatingLogStreamBuf;
  90. };
  91. END_NCBI_SCOPE
  92. /* @} */
  93. /*
  94. * ===========================================================================
  95. *
  96. * $Log: logrotate.hpp,v $
  97. * Revision 1000.1  2004/05/04 18:26:35  gouriano
  98. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  99. *
  100. * Revision 1.6  2004/02/19 22:57:53  ucko
  101. * Accommodate stricter implementations of CT_POS_TYPE.
  102. *
  103. * Revision 1.5  2003/04/17 17:50:21  siyan
  104. * Added doxygen support
  105. *
  106. * Revision 1.4  2003/02/12 16:41:04  ucko
  107. * Always supply CRotatingLogStreamBuf::sync, and avoid double-counting
  108. * via run-time rather than compile-time logic.
  109. *
  110. * Revision 1.3  2002/12/19 14:51:00  dicuccio
  111. * Added export specifier for Win32 DLL builds.
  112. *
  113. * Revision 1.2  2002/11/25 19:19:13  ucko
  114. * Adjust CRotatingLogStream's constructor to compile under GCC 3, and
  115. * generally be slightly more efficient.
  116. * Remember to clean up the buffer in its destructor.
  117. *
  118. * Revision 1.1  2002/11/25 17:20:59  ucko
  119. * Add support for automatic log rotation (CRotatingLogStream)
  120. *
  121. *
  122. * ===========================================================================
  123. */
  124. #endif  /* UTIL___LOGROTATE__HPP */