libzypp  17.38.7
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>
20 #include <zypp-core/Pathname.h>
21 
23 namespace zypp
24 {
25 
27  namespace log
28  {
29 
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  void writeOut( const std::string & formated_r ) override
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  //
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 
129  {
130  std::string format( const std::string & /*group_r*/,
131  logger::LogLevel /*level_r*/,
132  const char * /*file_r*/,
133  const char * /*func_r*/,
134  int /*line_r*/,
135  const std::string & /*message_r*/ ) override;
136  };
137 
138  public:
143  void setLineFormater( const shared_ptr<LineFormater> & formater_r );
144 
150  void enableLogForwardingMode ( bool enable = true );
151 
152  public:
159  void logfile( const Pathname & logfile_r );
160  void logfile( const Pathname & logfile_r, mode_t mode_r );
161 
163  void logNothing();
164 
166  void logToStdErr();
167 
169  void emergencyShutdown();
170 
176  static void notifyFork();
177 
179  void logRawLine ( std::string &&line );
180 
181  public:
183  shared_ptr<LineWriter> getLineWriter() const;
184 
190  void setLineWriter( const shared_ptr<LineWriter> & writer_r );
191 
192  public:
195  {
196  TmpExcessive();
197  ~TmpExcessive();
198  };
199 
204  {
205  TmpLineWriter( const shared_ptr<LineWriter> & writer_r = shared_ptr<LineWriter>() )
206  : _writer( LogControl::instance().getLineWriter() )
207  { LogControl::instance().setLineWriter( writer_r ); }
208 
214  template<class TLineWriter>
215  TmpLineWriter( TLineWriter * _allocated_r )
216  : _writer( LogControl::instance().getLineWriter() )
217  { LogControl::instance().setLineWriter( shared_ptr<LineWriter>( _allocated_r ) ); }
218 
220  { LogControl::instance().setLineWriter( _writer ); }
221 
222  private:
223  shared_ptr<LineWriter> _writer;
224  };
225 
226  private:
229  {}
230  };
232 
234  std::ostream & operator<<( std::ostream & str, const LogControl & obj ) ZYPP_API;
235 
237  } // namespace base
240 } // namespace zypp
242 #endif // ZYPP_BASE_LOGCONTROL_H
LogControl()
Default ctor: Singleton.
Definition: LogControl.h:228
LogLevel
Definition of log levels.
Definition: Logger.h:159
Base class for ostream based LineWriter.
Definition: LogControl.h:44
String related utilities and Regular expression matching.
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:203
LineWriter to stderr.
Definition: LogControl.h:63
virtual ~LineWriter()
Definition: LogControl.h:39
static LogControl instance()
Singleton access.
Definition: LogControl.h:102
void setLineWriter(const shared_ptr< LineWriter > &writer_r)
Assign a LineWriter.
Definition: LogControl.cc:916
std::ostream & operator<<(std::ostream &str, const SetTracker< TSet > &obj)
relates: SetTracker Stream output
Definition: SetTracker.h:191
const Arch Arch_empty ZYPP_API
relates: Arch This is an empty Arch represented by an empty string.
Definition: Arch.h:173
StreamLineWriter(std::ostream &str_r)
Definition: LogControl.h:46
Turn on excessive logging for the lifetime of this object.
Definition: LogControl.h:194
Maintain logfile related options.
Definition: LogControl.h:96
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:215
void writeOut(const std::string &formated_r) override
Definition: LogControl.h:48
shared_ptr< LineWriter > _writer
Definition: LogControl.h:223
shared_ptr< void > _outs
Definition: LogControl.h:76
TmpLineWriter(const shared_ptr< LineWriter > &writer_r=shared_ptr< LineWriter >())
Definition: LogControl.h:205
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
Our default format but without date, host and PID info.
Definition: LogControl.h:128