log4cpp  1.1.3
Appender.hh
Go to the documentation of this file.
1 /*
2  * Appender.hh
3  *
4  * Copyright 2000, LifeLine Networks BV (www.lifeline.nl). All rights reserved.
5  * Copyright 2000, Bastiaan Bakker. All rights reserved.
6  *
7  * See the COPYING file for the terms of usage and distribution.
8  */
9 
10 #ifndef _LOG4CPP_APPENDER_HH
11 #define _LOG4CPP_APPENDER_HH
12 
13 #include <log4cpp/Portability.hh>
14 #include <string>
15 #include <map>
16 #include <set>
17 #include <vector>
18 #include <stdarg.h>
19 #include <sys/types.h>
20 #include <sys/stat.h>
21 #include <fcntl.h>
22 #include <log4cpp/Priority.hh>
23 #include <log4cpp/Layout.hh>
24 #include <log4cpp/LoggingEvent.hh>
26 
27 namespace log4cpp {
28  class LOG4CPP_EXPORT Filter;
29 
35  friend class Category;
36  public:
37 
44  static Appender* getAppender(const std::string& name);
45 
50  static bool reopenAll();
51 
56  static void closeAll();
57 
58  protected:
64  Appender(const std::string& name);
65 
66  public:
70  virtual ~Appender();
71 
76  virtual void doAppend(const LoggingEvent& event) = 0;
77 
83  virtual bool reopen() = 0;
84 
89  virtual void close() = 0;
90 
96  virtual bool requiresLayout() const = 0;
97 
102  virtual void setLayout(Layout* layout) = 0;
103 
108  inline const std::string& getName() const { return _name; };
109 
116  virtual void setThreshold(Priority::Value priority) = 0;
117 
123 
127  virtual void setFilter(Filter* filter) = 0;
128 
133  virtual Filter* getFilter() = 0;
134 
135  private:
136  typedef std::map<std::string, Appender*> AppenderMap;
137 
138  static AppenderMap& _getAllAppenders();
139  static void _deleteAllAppenders();
140  static void _deleteAllAppendersWOLock(std::vector<Appender*> &appenders);
141  static void _addAppender(Appender* appender);
142  static void _removeAppender(Appender* appender);
143 
144  const std::string _name;
145 
146  public:
148  public:
149  Appender::AppenderMap* _allAppenders; // single shared instance, nifty-counter defensed
150  threading::Mutex _appenderMapMutex; // mutex protecting map from multiple thread access
151 
154  };
156  public:
159  };
160  private:
161  static AppenderMapStorage &_appenderMapStorageInstance;
162  };
163 
164  static Appender::AppenderMapStorageInitializer appenderMapStorageInitializer; // static initializer for every translation unit
165  typedef std::set<Appender *> AppenderSet;
166 
167 }
168 
169 #endif // _LOG4CPP_APPENDER_HH
#define LOG4CPP_EXPORT
Definition: Export.hh:26
Definition: Appender.hh:147
threading::Mutex _appenderMapMutex
Definition: Appender.hh:150
Appender::AppenderMap * _allAppenders
Definition: Appender.hh:149
Implement this interface for your own strategies for printing log statements.
Definition: Appender.hh:34
virtual void close()=0
Release any resources allocated within the appender such as file handles, network connections,...
virtual void setLayout(Layout *layout)=0
Set the Layout for this appender.
virtual void setFilter(Filter *filter)=0
Set a Filter for this appender.
virtual bool requiresLayout() const =0
Check if the appender uses a layout.
virtual Priority::Value getThreshold()=0
Get the threshold priority of this Appender.
virtual Filter * getFilter()=0
Get the Filter for this appender.
virtual bool reopen()=0
Reopens the output destination of this Appender, e.g.
const std::string & getName() const
Get the name of this appender.
Definition: Appender.hh:108
virtual void doAppend(const LoggingEvent &event)=0
Log in Appender specific way.
virtual void setThreshold(Priority::Value priority)=0
Set the threshold priority of this Appender.
This is the central class in the log4j package.
Definition: Category.hh:33
Users should extend this class to implement customized logging event filtering.
Definition: Filter.hh:49
Extend this abstract class to create your own log layout format.
Definition: Layout.hh:22
int Value
The type of Priority Values.
Definition: Priority.hh:85
Definition: PThreads.hh:29
The top level namespace for all 'Log for C++' types and classes.
Definition: AbortAppender.hh:16
std::set< Appender * > AppenderSet
Definition: Appender.hh:165
static Appender::AppenderMapStorageInitializer appenderMapStorageInitializer
Definition: Appender.hh:164
The internal representation of logging events.
Definition: LoggingEvent.hh:32