OpenBus SDK C++ TAO  2.1.0.0RC
 Tudo Classes Namespaces Funções Definições de tipos
log.hpp
1 // -*- coding: iso-8859-1-unix -*-
7 #ifndef TECGRAF_SDK_OPENBUS_OPENBUS_LOG_HPP
8 #define TECGRAF_SDK_OPENBUS_OPENBUS_LOG_HPP
9 
10 #include "openbus/detail/decl.hpp"
11 
12 #include <tao/ORB.h>
13 #include <log/output/streambuf_output.h>
14 #include <log/logger.h>
15 #include <boost/thread.hpp>
16 #include <cstring>
17 
18 namespace openbus
19 {
20 #ifndef OPENBUS_DOXYGEN
21 typedef logger::log_scope log_scope;
22 typedef logger::scope_token scope_token;
23 #endif
24 using logger::error_level;
25 using logger::warning_level;
26 using logger::info_level;
27 using logger::debug_level;
28 
29 #ifndef OPENBUS_DOXYGEN
30 
31 namespace detail
32 {
33 struct mico_thread_formatter : logger::formatter_base
34 {
35  void format(logger::logger const &, logger::level, scope_token const&,
36  std::string &string) const
37  {
38  std::size_t id;
39  boost::thread::id tid = boost::this_thread::get_id();
40  std::memcpy(&id, &tid, (std::min)(sizeof(id), sizeof(tid)));
41  std::stringstream s;
42  s << "(thread " << std::hex << id << ") ";
43  std::string tmp = s.str();
44  string.insert(string.begin(), tmp.begin(), tmp.end());
45  }
46  mico_thread_formatter *clone() const
47  {
48  return new mico_thread_formatter(*this);
49  }
50 };
51 }
52 #endif
53 
58 struct log_type
59 {
60  #ifndef OPENBUS_DOXYGEN
61  log_type()
62  {
63  set_level(error_level);
64  add_output(logger::output::make_streambuf_output(std::cout));
65  std::auto_ptr<logger::formatter_base> mico_thread_formatter
66  (new detail::mico_thread_formatter);
67  add_formatter(mico_thread_formatter);
68  }
69  #endif
70 
75  void add_output(std::auto_ptr<logger::output_base> output)
76  {
77  std::auto_ptr<logger::output_base> tmp1(output->clone());
78  std::auto_ptr<logger::output_base> tmp2(output->clone());
79  general_log.add_output(output);
80  ci_log.add_output(tmp1);
81  si_log.add_output(tmp2);
82  }
83 
88  void add_formatter(std::auto_ptr<logger::formatter_base> formatter)
89  {
90  std::auto_ptr<logger::formatter_base> tmp1(formatter->clone());
91  std::auto_ptr<logger::formatter_base> tmp2(formatter->clone());
92  general_log.add_formatter(formatter);
93  ci_log.add_formatter(tmp1);
94  si_log.add_formatter(tmp2);
95  }
96 
100  void set_level(logger::level lev)
101  {
102  general_log.set_level(lev);
103  ci_log.set_level(lev);
104  si_log.set_level(lev);
105  }
106 
107  #ifndef OPENBUS_DOXYGEN
108  logger::logger &general_logger()
109  {
110  return general_log;
111  }
112 
113  logger::logger &client_interceptor_logger()
114  {
115  return ci_log;
116  }
117 
118  logger::logger &server_interceptor_logger()
119  {
120  return si_log;
121  }
122  #endif
123 private:
124  logger::logger general_log, ci_log, si_log;
125 };
126 
131 OPENBUS_SDK_DECL log_type& log();
132 
133 }
134 
135 #endif
openbus
Definition: Connection.hpp:37
void add_output(std::auto_ptr< logger::output_base > output)
Adiciona um output de log. Esses outputs podem ser construidos com as bibliotecas de log...
Definition: log.hpp:75
Classe que contém funções auxiliares para configuração de log do Openbus.
Definition: log.hpp:58
void add_formatter(std::auto_ptr< logger::formatter_base > formatter)
Adiciona um formatador de log. Esses formatadores podem ser construidos com as bibliotecas de log...
Definition: log.hpp:88
void set_level(logger::level lev)
Modifica o nível de log para o Openbus.
Definition: log.hpp:100
OPENBUS_SDK_DECL log_type & log()
Instância global de log_type que permite acesso pelo usuário das configurações de log do Openbus...