file_logger.h

Go to the documentation of this file.
00001 #ifndef FILE_LOGGER_CLASS
00002 #define FILE_LOGGER_CLASS
00003 
00004 /*****************************************************************************\
00005 *                                                                             *
00006 *  Name   : file_logger                                                       *
00007 *  Author : Chris Koeritz                                                     *
00008 *                                                                             *
00009 *******************************************************************************
00010 * Copyright (c) 2000-$now By Author.  This program is free software; you can  *
00011 * redistribute it and/or modify it under the terms of the GNU General Public  *
00012 * License as published by the Free Software Foundation; either version 2 of   *
00013 * the License or (at your option) any later version.  This is online at:      *
00014 *     http://www.fsf.org/copyleft/gpl.html                                    *
00015 * Please send any updates to: fred@gruntose.com                               *
00016 \*****************************************************************************/
00017 
00019 
00024 #include "console_logger.h"
00025 
00026 #include <basis/function.h>
00027 #include <basis/log_base.h>
00028 
00029 // forward.
00030 class byte_filer;
00031 
00032 class LOGGERS_CLASS_STYLE file_logger : public log_base
00033 {
00034 public:
00035   file_logger();
00037 
00039   file_logger(const istring &filename, int limit = LOG_FILE_SIZE);
00041 
00044   virtual ~file_logger();
00045 
00046   IMPLEMENT_CLASS_NAME("file_logger");
00047 
00048   enum limits {
00050 #ifndef EMBEDDED_BUILD
00051     LOG_FILE_SIZE = 0x10F00D
00052 #else
00053     LOG_FILE_SIZE = 0x10FAB
00054 #endif
00055   };
00056 
00057   bool good() const;
00059 
00062   bool reopen();
00064 
00066   outcome log(const istring &info, int filter = ALWAYS_PRINT);
00068 
00072   outcome log_bytes(const byte_array &to_log, int filter = ALWAYS_PRINT);
00074 
00076   outcome format_bytes(const byte_array &to_log, int filter = ALWAYS_PRINT);
00078 
00079   istring name() const;
00081   void name(const istring &new_name);
00083 
00086   int limit() const { return int(_file_limit); }
00088   void limit(int new_limit) { _file_limit = new_limit; }
00090 
00091   void flush();
00093 
00094   void truncate(size_t new_size);
00096 
00098 private:
00099   istring *_filename;  
00100   size_t _file_limit;  
00101   byte_filer *_outfile;  
00102   mutex *_flock;  
00103 
00104   int size_reduction() const;
00106 
00108   bool open_file();
00110 
00112   void close_file();
00114 
00115   // unavailable.
00116   file_logger(const file_logger &);
00117   file_logger &operator =(const file_logger &);
00118 };
00119 
00121 
00123 
00126 istring LOGGERS_FUNCTION_STYLE app_name_for_file_logger();
00127 
00129 
00131 log_base LOGGERS_FUNCTION_STYLE *set_PW_logger_for_file
00132     (const istring &file_name, int limit = file_logger::LOG_FILE_SIZE);
00133 
00135 #ifndef OMIT_PROGRAM_WIDE_LOGGER
00136   #define SET_DEFAULT_FILE_LOGGER { \
00137     log_base *old_log = set_PW_logger_for_file(app_name_for_file_logger()); \
00138     WHACK(old_log); \
00139   }
00140 #else
00141   #define SET_DEFAULT_FILE_LOGGER {}
00142 #endif
00143 
00145 
00147 
00149 class LOGGERS_CLASS_STYLE combo_logger : public file_logger
00150 {
00151 public:
00152   combo_logger(const istring &filename, int limit = LOG_FILE_SIZE,
00153           bool standard_error = false);
00154   virtual ~combo_logger();
00155 
00156   virtual outcome log(const istring &info, int filter = ALWAYS_PRINT);
00157 
00158   // overrides that enforce properties for both loggers.
00159   virtual void add_filter(int new_filter);
00160   virtual void remove_filter(int old_filter);
00161   virtual void clear_filters();
00162   virtual void eol(line_ending to_set);
00163 
00164   // note: currently the byte formatting routines are not supported.
00165 
00166 private:
00167   console_logger *_out;  
00168 };
00169 
00171 
00173 
00175 log_base LOGGERS_FUNCTION_STYLE *set_PW_logger_for_combo
00176     (const istring &file_name, int limit = file_logger::LOG_FILE_SIZE,
00177      bool standard_error = false);
00178 
00180 #ifndef OMIT_PROGRAM_WIDE_LOGGER
00181   #define SET_DEFAULT_COMBO_LOGGER { \
00182     log_base *old_log = set_PW_logger_for_combo(app_name_for_file_logger()); \
00183     WHACK(old_log); \
00184   }
00185   #define SET_DEFAULT_COMBO_ERROR_LOGGER { \
00186     log_base *old_log = set_PW_logger_for_combo(app_name_for_file_logger(), \
00187         file_logger::LOG_FILE_SIZE, true); \
00188     WHACK(old_log); \
00189   }
00190 #else
00191   #define SET_DEFAULT_COMBO_LOGGER {}
00192   #define SET_DEFAULT_COMBO_ERROR_LOGGER {}
00193 #endif
00194 
00195 #endif
00196 

Generated on Thu Nov 20 04:28:58 2008 for HOOPLE Libraries by  doxygen 1.5.1