libzypp  17.28.5
LogControl.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_BASE_LOGCONTROL_H
13 #define ZYPP_BASE_LOGCONTROL_H
14 
15 #include <iosfwd>
16 #include <ostream> //for std::endl
17 
18 #include <zypp-core/base/Logger.h>
19 #include <zypp-core/base/PtrTypes.h>
20 #include <zypp-core/Pathname.h>
21 
23 namespace zypp
24 {
25 
27  namespace log
28  {
29 
35  struct LineWriter
36  {
37  virtual void writeOut( const std::string & /*formated_r*/ )
38  {}
39  virtual ~LineWriter()
40  {}
41  };
42 
44  struct StreamLineWriter : public LineWriter
45  {
46  StreamLineWriter( std::ostream & str_r ) : _str( &str_r ) {}
47 
48  virtual void writeOut( const std::string & formated_r )
49  { (*_str) << formated_r << std::endl; }
50 
51  protected:
52  StreamLineWriter() : _str( 0 ) {}
53  std::ostream *_str;
54  };
55 
58  {
60  };
61 
64  {
66  };
67 
73  {
74  FileLineWriter( const Pathname & file_r, mode_t mode_r = 0 );
75  protected:
76  shared_ptr<void> _outs;
77  };
78 
80  } // namespace log
82 
83 
85  namespace base
86  {
87 
89  //
90  // CLASS NAME : LogControl
91  //
96  class LogControl
97  {
98  friend std::ostream & operator<<( std::ostream & str, const LogControl & obj );
99 
100  public:
103  { return LogControl(); }
104 
105 
108 
115  {
116  virtual std::string format( const std::string & /*group_r*/,
117  logger::LogLevel /*level_r*/,
118  const char * /*file_r*/,
119  const char * /*func_r*/,
120  int /*line_r*/,
121  const std::string & /*message_r*/ );
122  virtual ~LineFormater() {}
123  };
124 
125  public:
130  void setLineFormater( const shared_ptr<LineFormater> & formater_r );
131 
132  public:
139  void logfile( const Pathname & logfile_r );
140  void logfile( const Pathname & logfile_r, mode_t mode_r );
141 
143  void logNothing();
144 
146  void logToStdErr();
147 
149  void emergencyShutdown();
150 
151  public:
153  shared_ptr<LineWriter> getLineWriter() const;
154 
160  void setLineWriter( const shared_ptr<LineWriter> & writer_r );
161 
162  public:
165  {
166  TmpExcessive();
167  ~TmpExcessive();
168  };
169 
174  {
175  TmpLineWriter( const shared_ptr<LineWriter> & writer_r = shared_ptr<LineWriter>() )
177  { LogControl::instance().setLineWriter( writer_r ); }
178 
184  template<class TLineWriter>
185  TmpLineWriter( TLineWriter * _allocated_r )
187  { LogControl::instance().setLineWriter( shared_ptr<LineWriter>( _allocated_r ) ); }
188 
191 
192  private:
193  shared_ptr<LineWriter> _writer;
194  };
195 
196  private:
199  {}
200  };
202 
204  std::ostream & operator<<( std::ostream & str, const LogControl & obj );
205 
207  } // namespace base
210 } // namespace zypp
212 #endif // ZYPP_BASE_LOGCONTROL_H
LogControl()
Default ctor: Singleton.
Definition: LogControl.h:198
LogLevel
Definition of log levels.
Definition: Logger.h:145
Base class for ostream based LineWriter.
Definition: LogControl.h:44
String related utilities and Regular expression matching.
std::ostream & operator<<(std::ostream &str, const Flags< TEnum > &obj)
Definition: Flags.h:166
virtual void writeOut(const std::string &formated_r)
Definition: LogControl.h:48
LineWriter to file.
Definition: LogControl.h:72
If you want to format loglines by yourself, derive from this, and overload format.
Definition: LogControl.h:114
Exchange LineWriter for the lifetime of this object.
Definition: LogControl.h:173
LineWriter to stderr.
Definition: LogControl.h:63
virtual ~LineWriter()
Definition: LogControl.h:39
void logfile(const Pathname &logfile_r)
Set path for the logfile.
Definition: LogControl.cc:807
static LogControl instance()
Singleton access.
Definition: LogControl.h:102
void setLineWriter(const shared_ptr< LineWriter > &writer_r)
Assign a LineWriter.
Definition: LogControl.cc:834
void logToStdErr()
Log to std::err.
Definition: LogControl.cc:858
friend std::ostream & operator<<(std::ostream &str, const LogControl &obj)
Definition: LogControl.cc:896
StreamLineWriter(std::ostream &str_r)
Definition: LogControl.h:46
Turn on excessive logging for the lifetime of this object.
Definition: LogControl.h:164
void logNothing()
Turn off logging.
Definition: LogControl.cc:850
virtual std::string format(const std::string &, logger::LogLevel, const char *, const char *, int, const std::string &)
Definition: LogControl.cc:768
Maintain logfile related options.
Definition: LogControl.h:96
shared_ptr< LineWriter > getLineWriter() const
Get the current LineWriter.
Definition: LogControl.cc:825
log::LineWriter LineWriter
Definition: LogControl.h:107
If you want to log the (formated) loglines by yourself, derive from this, and overload writeOut...
Definition: LogControl.h:35
TmpLineWriter(TLineWriter *_allocated_r)
Convenience ctor taking over ownership of an allocated LineWriter.
Definition: LogControl.h:185
shared_ptr< LineWriter > _writer
Definition: LogControl.h:193
void setLineFormater(const shared_ptr< LineFormater > &formater_r)
Assign a LineFormater.
Definition: LogControl.cc:842
shared_ptr< void > _outs
Definition: LogControl.h:76
TmpLineWriter(const shared_ptr< LineWriter > &writer_r=shared_ptr< LineWriter >())
Definition: LogControl.h:175
virtual void writeOut(const std::string &)
Definition: LogControl.h:37
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
void emergencyShutdown()
will cause the log thread to exit and flush all sockets
Definition: LogControl.cc:866
LineWriter to stdout.
Definition: LogControl.h:57
FileLineWriter(const Pathname &file_r, mode_t mode_r=0)
Definition: LogControl.cc:358