00001 // Module: Log4CPLUS 00002 // File: Layout.h 00003 // Created: 6/2001 00004 // Author: Tad E. Smith 00005 // 00006 // 00007 // Copyright (C) Tad E. Smith All rights reserved. 00008 // 00009 // This software is published under the terms of the Apache Software 00010 // License version 1.1, a copy of which has been included with this 00011 // distribution in the LICENSE.APL file. 00012 // 00013 00016 #ifndef _LOG4CPLUS_LAYOUT_HEADER_ 00017 #define _LOG4CPLUS_LAYOUT_HEADER_ 00018 00019 #include <log4cplus/config.h> 00020 #include <log4cplus/loglevel.h> 00021 #include <log4cplus/streams.h> 00022 #include <log4cplus/tstring.h> 00023 #include <log4cplus/helpers/logloguser.h> 00024 #include <log4cplus/helpers/property.h> 00025 #include <log4cplus/helpers/timehelper.h> 00026 #include <log4cplus/spi/loggingevent.h> 00027 00028 #include <vector> 00029 00030 00031 namespace log4cplus { 00032 00033 // Forward Declarations 00034 namespace pattern { 00035 class PatternConverter; 00036 } 00037 00038 00043 class LOG4CPLUS_EXPORT Layout : protected :: log4cplus::helpers::LogLogUser { 00044 public: 00045 Layout() : llmCache(getLogLevelManager()) {} 00046 Layout(const log4cplus::helpers::Properties&) 00047 : llmCache(getLogLevelManager()) {} 00048 virtual ~Layout() {} 00049 00050 virtual void formatAndAppend(log4cplus::tostream& output, 00051 const log4cplus::spi::InternalLoggingEvent& event) = 0; 00052 protected: 00053 LogLevelManager& llmCache; 00054 00055 private: 00056 // Disable copy 00057 Layout(const Layout&); 00058 Layout& operator=(Layout&); 00059 }; 00060 00061 00062 00075 class LOG4CPLUS_EXPORT SimpleLayout : public Layout { 00076 public: 00077 SimpleLayout() {} 00078 SimpleLayout(const log4cplus::helpers::Properties& properties) : Layout(properties) {} 00079 00080 virtual void formatAndAppend(log4cplus::tostream& output, 00081 const log4cplus::spi::InternalLoggingEvent& event); 00082 00083 private: 00084 // Disallow copying of instances of this class 00085 SimpleLayout(const SimpleLayout&); 00086 SimpleLayout& operator=(const SimpleLayout&); 00087 }; 00088 00089 00090 00127 class LOG4CPLUS_EXPORT TTCCLayout : public Layout { 00128 public: 00129 // Ctor and dtor 00130 TTCCLayout(bool use_gmtime = false); 00131 TTCCLayout(const log4cplus::helpers::Properties& properties); 00132 virtual ~TTCCLayout(); 00133 00134 virtual void formatAndAppend(log4cplus::tostream& output, 00135 const log4cplus::spi::InternalLoggingEvent& event); 00136 00137 protected: 00138 log4cplus::tstring dateFormat; 00139 bool use_gmtime; 00140 00141 private: 00142 // Disallow copying of instances of this class 00143 TTCCLayout(const TTCCLayout&); 00144 TTCCLayout& operator=(const TTCCLayout&); 00145 }; 00146 00147 00148 00149 00461 class LOG4CPLUS_EXPORT PatternLayout : public Layout { 00462 public: 00463 // Ctors and dtor 00464 PatternLayout(const log4cplus::tstring& pattern); 00465 PatternLayout(const log4cplus::helpers::Properties& properties); 00466 virtual ~PatternLayout(); 00467 00468 virtual void formatAndAppend(log4cplus::tostream& output, 00469 const log4cplus::spi::InternalLoggingEvent& event); 00470 00471 protected: 00472 void init(const log4cplus::tstring& pattern); 00473 00474 // Data 00475 log4cplus::tstring pattern; 00476 std::vector<pattern::PatternConverter*> parsedPattern; 00477 00478 private: 00479 // Disallow copying of instances of this class 00480 PatternLayout(const PatternLayout&); 00481 PatternLayout& operator=(const PatternLayout&); 00482 }; 00483 00484 00485 00486 } // end namespace log4cplus 00487 00488 #endif // _LOG4CPLUS_LAYOUT_HEADER_ 00489