OpenBus SDK C++ TAO  2.0.2.0
 Tudo Classes Namespaces Ficheiros Funções Definições de tipos Páginas
log.hpp
1 // -*- coding: iso-8859-1-unix -*-
7 #ifndef TECGRAF_SDK_OPENBUS_LOG_H_
8 #define TECGRAF_SDK_OPENBUS_LOG_H_
9 
10 #include "openbus/decl.hpp"
11 #include <tao/ORB.h>
12 #include <log/output/streambuf_output.h>
13 #include <log/logger.h>
14 #ifdef OPENBUS_SDK_MULTITHREAD
15  #include <boost/thread.hpp>
16 #endif
17 
18 #include <cstring>
19 
20 namespace openbus
21 {
22 #ifndef OPENBUS_DOXYGEN
23 typedef logger::log_scope log_scope;
24 typedef logger::scope_token scope_token;
25 #endif
26 using logger::error_level;
27 using logger::warning_level;
28 using logger::info_level;
29 using logger::debug_level;
30 #ifndef OPENBUS_DOXYGEN
31 #ifdef OPENBUS_SDK_MULTITHREAD
32 
33 namespace detail
34 {
35 struct mico_thread_formatter : logger::formatter_base
36 {
37  void format(logger::logger const &, logger::level, scope_token const&,
38  std::string &string) const
39  {
40  std::size_t id;
41  boost::thread::id tid = boost::this_thread::get_id();
42  std::memcpy(&id, &tid, (std::min)(sizeof(id), sizeof(tid)));
43  std::stringstream s;
44  s << "(thread " << std::hex << id << ") ";
45  std::string tmp = s.str();
46  string.insert(string.begin(), tmp.begin(), tmp.end());
47  }
48  mico_thread_formatter *clone() const
49  {
50  return new mico_thread_formatter(*this);
51  }
52 };
53 }
54 #endif
55 #endif
56 
61 struct log_type
62 {
63  #ifndef OPENBUS_DOXYGEN
64  log_type()
65  {
66  set_level(error_level);
67  add_output(logger::output::make_streambuf_output(std::cout));
68  #ifdef OPENBUS_SDK_MULTITHREAD
69  std::auto_ptr<logger::formatter_base> mico_thread_formatter
70  (new detail::mico_thread_formatter);
71  add_formatter(mico_thread_formatter);
72  #endif
73  }
74  #endif
75 
80  void add_output(std::auto_ptr<logger::output_base> output)
81  {
82  std::auto_ptr<logger::output_base> tmp1(output->clone());
83  std::auto_ptr<logger::output_base> tmp2(output->clone());
84  general_log.add_output(output);
85  ci_log.add_output(tmp1);
86  si_log.add_output(tmp2);
87  }
88 
93  void add_formatter(std::auto_ptr<logger::formatter_base> formatter)
94  {
95  std::auto_ptr<logger::formatter_base> tmp1(formatter->clone());
96  std::auto_ptr<logger::formatter_base> tmp2(formatter->clone());
97  general_log.add_formatter(formatter);
98  ci_log.add_formatter(tmp1);
99  si_log.add_formatter(tmp2);
100  }
101 
105  void set_level(logger::level lev)
106  {
107  general_log.set_level(lev);
108  ci_log.set_level(lev);
109  si_log.set_level(lev);
110  }
111 
112  #ifndef OPENBUS_DOXYGEN
113  logger::logger &general_logger()
114  {
115  return general_log;
116  }
117 
118  logger::logger &client_interceptor_logger()
119  {
120  return ci_log;
121  }
122 
123  logger::logger &server_interceptor_logger()
124  {
125  return si_log;
126  }
127  #endif
128 private:
129  logger::logger general_log, ci_log, si_log;
130 };
131 
136 OPENBUS_SDK_DECL log_type& log();
137 
138 }
139 
140 #endif
openbus
Definition: Connection.hpp:41
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:80
Classe que contém funções auxiliares para configuração de log do Openbus.
Definition: log.hpp:61
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:93
void set_level(logger::level lev)
Modifica o nível de log para o Openbus.
Definition: log.hpp:105
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...