llerrorcontrol.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llerrorcontrol.h
  3.  * @date   December 2006
  4.  * @brief error message system control
  5.  *
  6.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2007-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LL_LLERRORCONTROL_H
  34. #define LL_LLERRORCONTROL_H
  35. #include "llerror.h"
  36. #include "boost/function.hpp"
  37. #include <string>
  38. class LLSD;
  39. /*
  40. This is the part of the LLError namespace that manages the messages
  41. produced by the logging.  The logging support is defined in llerror.h.
  42. Most files do not need to include this.
  43. These implementations are in llerror.cpp.
  44. */
  45. // Line buffer interface
  46. class LLLineBuffer
  47. {
  48. public:
  49. LLLineBuffer() {};
  50. virtual ~LLLineBuffer() {};
  51. virtual void clear() = 0; // Clear the buffer, and reset it.
  52. virtual void addLine(const std::string& utf8line) = 0;
  53. };
  54. namespace LLError
  55. {
  56. LL_COMMON_API void initForServer(const std::string& identity);
  57. // resets all logging settings to defaults needed by server processes
  58. // logs to stderr, syslog, and windows debug log
  59. // the identity string is used for in the syslog
  60. LL_COMMON_API void initForApplication(const std::string& dir);
  61. // resets all logging settings to defaults needed by applicaitons
  62. // logs to stderr and windows debug log
  63. // sets up log configuration from the file logcontrol.xml in dir
  64. /*
  65. Settings that control what is logged.
  66. Setting a level means log messages at that level or above.
  67. */
  68. LL_COMMON_API void setPrintLocation(bool);
  69. LL_COMMON_API void setDefaultLevel(LLError::ELevel);
  70. LL_COMMON_API void setFunctionLevel(const std::string& function_name, LLError::ELevel);
  71. LL_COMMON_API void setClassLevel(const std::string& class_name, LLError::ELevel);
  72. LL_COMMON_API void setFileLevel(const std::string& file_name, LLError::ELevel);
  73. LL_COMMON_API void setTagLevel(const std::string& file_name, LLError::ELevel);
  74. LL_COMMON_API void configure(const LLSD&);
  75. // the LLSD can configure all of the settings
  76. // usually read automatically from the live errorlog.xml file
  77. /*
  78. Control functions.
  79. */
  80. typedef boost::function<void(const std::string&)> FatalFunction;
  81. LL_COMMON_API void crashAndLoop(const std::string& message);
  82. // Default fatal function: access null pointer and loops forever
  83. LL_COMMON_API void setFatalFunction(const FatalFunction&);
  84. // The fatal function will be called when an message of LEVEL_ERROR
  85. // is logged.  Note: supressing a LEVEL_ERROR message from being logged
  86. // (by, for example, setting a class level to LEVEL_NONE), will keep
  87. // the that message from causing the fatal funciton to be invoked.
  88.     LL_COMMON_API FatalFunction getFatalFunction();
  89.         // Retrieve the previously-set FatalFunction
  90.     /// temporarily override the FatalFunction for the duration of a
  91.     /// particular scope, e.g. for unit tests
  92.     class LL_COMMON_API OverrideFatalFunction
  93.     {
  94.     public:
  95.         OverrideFatalFunction(const FatalFunction& func):
  96.             mPrev(getFatalFunction())
  97.         {
  98.             setFatalFunction(func);
  99.         }
  100.         ~OverrideFatalFunction()
  101.         {
  102.             setFatalFunction(mPrev);
  103.         }
  104.     private:
  105.         FatalFunction mPrev;
  106.     };
  107. typedef std::string (*TimeFunction)();
  108. LL_COMMON_API std::string utcTime();
  109. LL_COMMON_API void setTimeFunction(TimeFunction);
  110. // The function is use to return the current time, formatted for
  111. // display by those error recorders that want the time included.
  112. class LL_COMMON_API Recorder
  113. {
  114. // An object that handles the actual output or error messages.
  115. public:
  116. virtual ~Recorder();
  117. virtual void recordMessage(LLError::ELevel, const std::string& message) = 0;
  118. // use the level for better display, not for filtering
  119. virtual bool wantsTime(); // default returns false
  120. // override and return true if the recorder wants the time string
  121. // included in the text of the message
  122. };
  123. LL_COMMON_API void addRecorder(Recorder*);
  124. LL_COMMON_API void removeRecorder(Recorder*);
  125. // each error message is passed to each recorder via recordMessage()
  126. LL_COMMON_API void logToFile(const std::string& filename);
  127. LL_COMMON_API void logToFixedBuffer(LLLineBuffer*);
  128. // Utilities to add recorders for logging to a file or a fixed buffer
  129. // A second call to the same function will remove the logger added
  130. // with the first.
  131. // Passing the empty string or NULL to just removes any prior.
  132. LL_COMMON_API std::string logFileName();
  133. // returns name of current logging file, empty string if none
  134. /*
  135. Utilities for use by the unit tests of LLError itself.
  136. */
  137. class Settings;
  138. LL_COMMON_API Settings* saveAndResetSettings();
  139. LL_COMMON_API void restoreSettings(Settings *);
  140. LL_COMMON_API std::string abbreviateFile(const std::string& filePath);
  141. LL_COMMON_API int shouldLogCallCount();
  142. };
  143. #endif // LL_LLERRORCONTROL_H