/[usata]/usata2/src/log.cpp
ViewVC logotype

Diff of /usata2/src/log.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7 by skunix, Sun Dec 26 09:35:23 2004 UTC revision 1.8 by Descender, Sun Dec 26 18:36:42 2004 UTC
# Line 1  Line 1 
1  // -*- mode: C++; tab-width: 4; indent-tabs-mode: t; -*- vim:ts=4:sw=4  // -*- mode: C++; tab-width: 4; indent-tabs-mode: t; -*- vim:ts=4:sw=4
2  //  //
3  // Copyright (C) 2004  Chong Kai Xiong (descender)  // Copyright (C) 2004  Chong Kai Xiong (descender)
4    //                     David Lau (skunix)
5  //  //
6  // This file is part of The Plains of Usata.  // This file is part of The Plains of Usata.
7  //  //
# Line 10  Line 11 
11  // http://www.fsf.org/licenses/gpl.html.  // http://www.fsf.org/licenses/gpl.html.
12  //  //
13  // $Id$  // $Id$
 // $Log$  
 // Revision 1.7  2004/12/26 09:35:23  skunix  
 // use logging functionality  
 //  
 // Revision 1.6  2004/12/26 08:33:37  skunix  
 // added targets_mutex locking to Server  
 //  
 // Revision 1.5  2004/12/26 08:03:34  skunix  
 // changed lambda::bind's to boost::binds  
 //  
 // Revision 1.4  2004/12/26 07:50:33  skunix  
 // fixed Stream error, added a buffered Stream2 class, and added Level prefixing  
 //  
 // Revision 1.3  2004/12/26 06:52:36  skunix  
 // changed level > impl->level check to <, it acts right now  
 //  
 // Revision 1.2  2004/12/26 02:59:35  Descender  
 //  
 // log::Target: change access of destructor to protected  
 // log::Stream: change type of parameter 'server' for constructor to pointer, remove unused constructor  
 //  
 // Revision 1.1  2004/12/26 02:26:18  Descender  
 //  
 // New logging functionality.  
 //  
14    
15  #include "log.hpp"  #include "log.hpp"
16    
# Line 52  namespace usata Line 28  namespace usata
28          namespace log          namespace log
29          {          {
30                  Server server;                  Server server;
31                  Stream stream(&server);                  Stream stream;
32    
33                  CommitT Commit;                  BufferedStreamCommit commit;
34    
35                  class TargetStdout                  class TargetStdout
36                          : public Target                          : public Target
# Line 102  namespace usata Line 78  namespace usata
78                  public:                  public:
79                          typedef std::list<Target *> TargetList;                          typedef std::list<Target *> TargetList;
80                          typedef std::map<int,std::string> PrefixMap;                          typedef std::map<int,std::string> PrefixMap;
81                          PrefixMap prefixes;  
82                          boost::mutex    targets_mutex;                          PrefixMap     prefixes;
83                          TargetList targets;                          TargetList    targets;
84                          int        level;                          int           level;
85                            
86                            boost::mutex  mutex;
87                  };                  };
88    
89                  Server::Server()                  Server::Server()
# Line 128  namespace usata Line 105  namespace usata
105                  {                  {
106                          impl->level = level;                          impl->level = level;
107                  }                  }
108    
109                  void                  void
110                  Server::set_prefix(int level, const std::string& prefix)                  Server::set_prefix(int level, const std::string& prefix)
111                  {                  {
112                          impl->prefixes.insert( make_pair(level,prefix));                          impl->prefixes.insert(std::make_pair(level, prefix));
113                  }                  }
114    
115                  void                  void
116                  Server::log(int level, const std::string& message)                  Server::log(int level, const std::string& message)
117                  {                  {
118                          typedef ServerImpl::PrefixMap::iterator PrefixMapIterator;                          using boost::bind;
119    
120                          // FIXME: add timestamping - descender                          // FIXME: add timestamping - descender
121                    
122                          if (level < impl->level)                          if (level < impl->level)
123                                  return;                                  return;
                         PrefixMapIterator pit = impl->prefixes.find(level);      
124                                    
125                          boost::mutex::scoped_lock(impl->targets_mutex);                          boost::mutex::scoped_lock(impl->mutex);
                         if (pit != impl->prefixes.end())  
                         {        
                                 using boost::bind;  
                                 std::string nmessage = (boost::format("%1% - %2%") % pit->second % message).str();  
                                 std::for_each(impl->targets.begin(), impl->targets.end(),  
                                                           bind(&Target::write, _1, nmessage));  
                         }  
                         else  
                         {  
                                 using boost::bind;  
                                 std::for_each(impl->targets.begin(), impl->targets.end(),  
                                                           bind(&Target::write, _1, message));  
126    
127                          }                          std::string nmessage = (boost::format("%1% - %2%") % impl->prefixes[level] % message).str();
128    
129                            std::for_each(impl->targets.begin(), impl->targets.end(),
130                                                      bind(&Target::write, _1, nmessage));
131                  }                  }
132    
133                  // FIXME: should we throw an error? - descender                  // FIXME: should we throw an error? - descender
134                  void                  void
135                  Server::add_target(Target *target)                  Server::add_target(Target *target)
136                  {                  {
137                          boost::mutex::scoped_lock(impl->targets_mutex);                          boost::mutex::scoped_lock(impl->mutex);
138                          if (find(impl->targets.begin(), impl->targets.end(), target) !=                          if (find(impl->targets.begin(), impl->targets.end(), target) !=
139                                  impl->targets.end())                                  impl->targets.end())
140                                  return;                                  return;
# Line 178  namespace usata Line 147  namespace usata
147                  Server::commit()                  Server::commit()
148                  {                  {
149                          using boost::bind;                          using boost::bind;
150                          boost::mutex::scoped_lock(impl->targets_mutex);                          boost::mutex::scoped_lock(impl->mutex);
151                          std::for_each(impl->targets.begin(), impl->targets.end(),                          std::for_each(impl->targets.begin(), impl->targets.end(),
152                                                    bind(&Target::commit, _1));                                                    bind(&Target::commit, _1));
153                  }                  }
154    
155                  void                  void
156                  Stream2::commit()                  BufferedStream::commit()
157                  {                  {
158                          buf << std::endl;                          m_buffer << std::endl;
159                          m_server->log(m_level, buf.str());                          m_server->log(m_level, m_buffer.str());
160                          buf.str("");                          m_buffer.str("");
161                  }                  }
162    
163                  // Stream manipulators                  // Stream manipulators

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26