4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief Target public header */
31 #include <boost/date_time/posix_time/posix_time.hpp>
32 #include <boost/utility.hpp>
33 #include "../singleton.hh"
35 #include "StreamRegistry.hh"
36 #include "AreaRegistry.hh"
38 //#include "Target.mpp"
39 ///////////////////////////////hh.p////////////////////////////////////////
46 /** \brief Logging target base class
48 All enabled log messages are eventually routed to one or more logging targets. It is the
49 responsibility of the logging target to write the log messages somewhere: onto the console,
50 to a file, to mail them to the administrator or whatever. To this end, the logging target is
51 passed the log message and a complete set of logging parameters (\e stream, \e area and \e
54 \fixme optionally Integrate with Scheduler / ClockService to reduce number of gettimeofday()
57 class Target : private boost::noncopyable
60 ///////////////////////////////////////////////////////////////////////////
63 ///////////////////////////////////////////////////////////////////////////
64 ///\name Structors and default members
72 template <class Stream>
75 template <class Stream, class Arg0>
78 template <class Stream, class Area, class Level>
83 std::string timestamp();
87 void route(detail::StreamBase const * stream, detail::AreaBase const * area,
89 void unroute(detail::StreamBase const * stream, detail::AreaBase const * area,
93 void route(detail::StreamBase const * stream, detail::AreaBase const *);
95 template <class Level>
96 void route(detail::StreamBase const * stream, detail::LevelBase const *);
98 void updateAreaCache(detail::AreaBase const & area, detail::StreamBase const * stream,
101 void write(boost::posix_time::ptime timestamp, detail::StreamBase const & stream,
102 detail::AreaBase const & area, unsigned level, std::string const & message);
108 virtual void v_write(boost::posix_time::ptime, std::string const & stream,
109 std::string const & area, unsigned level,
110 std::string const & message) = 0;
118 RoutingEntry(detail::StreamBase const * stream_, detail::AreaBase const * area_,
120 : stream(stream_), area(area_), level(level_) {}
122 : stream(0), area(0), level(0) {}
124 bool operator==(RoutingEntry const & other)
125 { return stream == other.stream && area == other.area && level == other.level; }
127 detail::StreamBase const * stream;
128 detail::AreaBase const * area;
132 typedef std::vector<RoutingEntry> RIB;
136 friend class TargetRegistry;
139 /** \brief Target registry
141 The TargetRegistry keeps a record of all existing targets.
144 : public senf::singleton<TargetRegistry>
147 using senf::singleton<TargetRegistry>::instance;
149 void write(detail::StreamBase const & stream, detail::AreaBase const & area,
150 unsigned level, std::string msg);
153 void registerTarget(Target * target);
154 void unregisterTarget(Target * target);
156 typedef std::set<Target *> Targets;
163 template <class Stream, class Area, class Level>
164 void write(std::string msg);
168 ///////////////////////////////hh.e////////////////////////////////////////
169 #include "Target.cci"
170 //#include "Target.ct"
171 #include "Target.cti"
178 // comment-column: 40
179 // c-file-style: "senf"
180 // indent-tabs-mode: nil
181 // ispell-local-dictionary: "american"
182 // compile-command: "scons -u test"