43 if ( file_r == Pathname(
"-") )
50 std::ofstream * fstr = 0;
51 _outs.reset( (fstr =
new std::ofstream( file_r.asString().c_str(), std::ios_base::app )) );
52 fstr->rdbuf()->pubsetbuf(0,0);
58 ::chmod( file_r.asString().c_str(), mode_r );
79 const std::string & message_r )
81 static char hostname[1024];
82 static char nohostname[] =
"unknown";
84 return str::form(
"%s <%d> %s(%d) [%s] %s(%s):%d %s",
86 ( gethostname( hostname, 1024 ) ? nohostname : hostname ),
89 file_r, func_r, line_r,
98 const char * file_r,
const char * func_r,
int line_r,
99 const std::string & buffer_r );
124 void tagSet(
const char * fil_r,
const char * fnc_r,
int lne_r )
133 virtual std::streamsize xsputn(
const char * s, std::streamsize n )
134 {
return writeout( s, n ); }
136 virtual int overflow(
int ch = EOF )
146 virtual int writeout(
const char* s, std::streamsize n )
153 for (
int i = 0; i < n; ++i, ++c )
156 _buffer += std::string( s, c-s );
164 _buffer += std::string( s, c-s );
190 : _mybuf( group_r, level_r )
191 , _mystream( &_mybuf )
195 { _mystream.flush(); }
199 std::ostream &
getStream(
const char * fil_r,
const char * fnc_r,
int lne_r )
201 _mybuf.tagSet( fil_r, fnc_r, lne_r );
228 {
return _excessive; }
230 void excessive(
bool onOff_r )
231 { _excessive = onOff_r; }
235 { _lineWriter = writer_r; }
238 {
return _lineWriter; }
244 _lineFormater = format_r;
249 void logfile(
const Pathname & logfile_r, mode_t mode_r = 0640 )
251 if ( logfile_r.empty() )
253 else if ( logfile_r == Pathname(
"-" ) )
276 if ( level_r ==
E_XXX && !_excessive )
279 if ( !_streamtable[group_r][level_r] )
281 _streamtable[group_r][level_r].reset(
new Loglinestream( group_r, level_r ) );
283 return _streamtable[group_r][level_r]->getStream( file_r, func_r, line_r );
292 const std::string & message_r )
295 _lineWriter->writeOut( _lineFormater->format( group_r, level_r,
296 file_r, func_r, line_r,
313 , _excessive( getenv(
"ZYPP_FULLLOG") )
314 , _lineFormater( new
LogControl::LineFormater )
316 if ( getenv(
"ZYPP_LOGFILE") )
317 logfile( getenv(
"ZYPP_LOGFILE") );
319 if ( getenv(
"ZYPP_PROFILING") )
354 return str <<
"LogControlImpl";
378 const char * file_r,
const char * func_r,
int line_r,
379 const std::string & buffer_r )
382 file_r, func_r, line_r,
400 using logger::LogControlImpl;