libzypp  17.24.1
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/base/Logger.h>
19 #include <zypp/base/PtrTypes.h>
20 #include <zypp/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 
148  public:
150  shared_ptr<LineWriter> getLineWriter() const;
151 
157  void setLineWriter( const shared_ptr<LineWriter> & writer_r );
158 
159  public:
162  {
163  TmpExcessive();
164  ~TmpExcessive();
165  };
166 
171  {
172  TmpLineWriter( const shared_ptr<LineWriter> & writer_r = shared_ptr<LineWriter>() )
174  { LogControl::instance().setLineWriter( writer_r ); }
175 
181  template<class TLineWriter>
182  TmpLineWriter( TLineWriter * _allocated_r )
184  { LogControl::instance().setLineWriter( shared_ptr<LineWriter>( _allocated_r ) ); }
185 
188 
189  private:
190  shared_ptr<LineWriter> _writer;
191  };
192 
193  private:
196  {}
197  };
199 
201  std::ostream & operator<<( std::ostream & str, const LogControl & obj );
202 
204  } // namespace base
207 } // namespace zypp
209 #endif // ZYPP_BASE_LOGCONTROL_H
LogControl()
Default ctor: Singleton.
Definition: LogControl.h:195
LogLevel
Definition of log levels.
Definition: Logger.h:118
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:170
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:464
static LogControl instance()
Singleton access.
Definition: LogControl.h:102
void setLineWriter(const shared_ptr< LineWriter > &writer_r)
Assign a LineWriter.
Definition: LogControl.cc:473
void logToStdErr()
Log to std::err.
Definition: LogControl.cc:482
friend std::ostream & operator<<(std::ostream &str, const LogControl &obj)
Definition: LogControl.cc:500
StreamLineWriter(std::ostream &str_r)
Definition: LogControl.h:46
Turn on excessive logging for the lifetime of this object.
Definition: LogControl.h:161
void logNothing()
Turn off logging.
Definition: LogControl.cc:479
virtual std::string format(const std::string &, logger::LogLevel, const char *, const char *, int, const std::string &)
Definition: LogControl.cc:130
Maintain logfile related options.
Definition: LogControl.h:96
shared_ptr< LineWriter > getLineWriter() const
Get the current LineWriter.
Definition: LogControl.cc:470
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:182
shared_ptr< LineWriter > _writer
Definition: LogControl.h:190
void setLineFormater(const shared_ptr< LineFormater > &formater_r)
Assign a LineFormater.
Definition: LogControl.cc:476
shared_ptr< void > _outs
Definition: LogControl.h:76
TmpLineWriter(const shared_ptr< LineWriter > &writer_r=shared_ptr< LineWriter >())
Definition: LogControl.h:172
virtual void writeOut(const std::string &)
Definition: LogControl.h:37
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
LineWriter to stdout.
Definition: LogControl.h:57
FileLineWriter(const Pathname &file_r, mode_t mode_r=0)
Definition: LogControl.cc:95