Commit d78fc2e8 authored by Pavel Vainerman's avatar Pavel Vainerman

(uniset-log): Добавил возможность записывать получаемые логи в указанный файл

parent 40c36e29
...@@ -27,8 +27,10 @@ static struct option longopts[] = ...@@ -27,8 +27,10 @@ static struct option longopts[] =
{ "rotate", optional_argument, 0, 'r' }, { "rotate", optional_argument, 0, 'r' },
{ "logfilter", required_argument, 0, 'n' }, { "logfilter", required_argument, 0, 'n' },
{ "command-only", no_argument, 0, 'c' }, { "command-only", no_argument, 0, 'c' },
{ "timeout", required_argument, 0, 'w' }, { "timeout", required_argument, 0, 't' },
{ "reconnect-delay", required_argument, 0, 'x' }, { "reconnect-delay", required_argument, 0, 'x' },
{ "logfile", required_argument, 0, 'w' },
{ "logfile-truncate", required_argument, 0, 'z' },
{ NULL, 0, 0, 0 } { NULL, 0, 0, 0 }
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -39,8 +41,10 @@ static void print_help() ...@@ -39,8 +41,10 @@ static void print_help()
printf("[-i|--iaddr] addr - LogServer ip or hostname.\n"); printf("[-i|--iaddr] addr - LogServer ip or hostname.\n");
printf("[-p|--port] port - LogServer port.\n"); printf("[-p|--port] port - LogServer port.\n");
printf("[-c|--command-only] - Send command and break. (No read logs).\n"); printf("[-c|--command-only] - Send command and break. (No read logs).\n");
printf("[-w|--timeout] msec - Timeout for wait data. Default: 0 - endless waiting\n"); printf("[-t|--timeout] msec - Timeout for wait data. Default: 0 - endless waiting\n");
printf("[-x|--reconnect-delay] msec - Pause for repeat connect to LogServer. Default: 5000 msec.\n"); printf("[-x|--reconnect-delay] msec - Pause for repeat connect to LogServer. Default: 5000 msec.\n");
printf("[-w|--logfile] logfile - Save log to 'logfile'.\n");
printf("[-z|--logfile-truncate] - Truncate log file before write. Use with -w|--logfile \n");
printf("\n"); printf("\n");
printf("Commands:\n"); printf("Commands:\n");
...@@ -76,12 +80,14 @@ int main( int argc, char** argv ) ...@@ -76,12 +80,14 @@ int main( int argc, char** argv )
int cmdonly = 0; int cmdonly = 0;
timeout_t tout = 0; timeout_t tout = 0;
timeout_t rdelay = 5000; timeout_t rdelay = 5000;
string logfile("");
bool logtruncate = false;
try try
{ {
while(1) while(1)
{ {
opt = getopt_long(argc, argv, "chvlf:a:p:i:d:s:n:eorbx:w:", longopts, &optindex); opt = getopt_long(argc, argv, "chvlf:a:p:i:d:s:n:eorbx:w:zt:", longopts, &optindex);
if( opt == -1 ) if( opt == -1 )
break; break;
...@@ -215,10 +221,18 @@ int main( int argc, char** argv ) ...@@ -215,10 +221,18 @@ int main( int argc, char** argv )
rdelay = uni_atoi(optarg); rdelay = uni_atoi(optarg);
break; break;
case 'w': case 't':
tout = uni_atoi(optarg); tout = uni_atoi(optarg);
break; break;
case 'w':
logfile = string(optarg);
break;
case 'z':
logtruncate = true;
break;
case 'v': case 'v':
verb = 1; verb = 1;
break; break;
...@@ -242,6 +256,9 @@ int main( int argc, char** argv ) ...@@ -242,6 +256,9 @@ int main( int argc, char** argv )
lr.setinTimeout(tout); lr.setinTimeout(tout);
lr.setReconnectDelay(rdelay); lr.setReconnectDelay(rdelay);
if( !logfile.empty() )
lr.log()->logFile(logfile,logtruncate);
if( !vcmd.empty() ) if( !vcmd.empty() )
lr.sendCommand(addr, port, vcmd, cmdonly, verb); lr.sendCommand(addr, port, vcmd, cmdonly, verb);
......
...@@ -59,7 +59,9 @@ class LogReader ...@@ -59,7 +59,9 @@ class LogReader
DebugStream::StreamEvent_Signal signal_stream_event(); DebugStream::StreamEvent_Signal signal_stream_event();
void setLogLevel( Debug::type ); void setLogLevel( Debug::type t );
inline std::shared_ptr<DebugStream> log(){ return outlog; }
protected: protected:
...@@ -81,7 +83,7 @@ class LogReader ...@@ -81,7 +83,7 @@ class LogReader
unsigned int readcount = { 0 }; // количество циклов чтения unsigned int readcount = { 0 }; // количество циклов чтения
DebugStream rlog; DebugStream rlog;
DebugStream log; // рабочий лог в который выводиться полученная информация.. std::shared_ptr<DebugStream> outlog; // рабочий лог в который выводиться полученная информация..
DebugStream::StreamEvent_Signal m_logsig; DebugStream::StreamEvent_Signal m_logsig;
}; };
......
...@@ -17,8 +17,10 @@ LogReader::LogReader(): ...@@ -17,8 +17,10 @@ LogReader::LogReader():
cmdonly(false), cmdonly(false),
readcount(0) readcount(0)
{ {
log.level(Debug::ANY); outlog = std::make_shared<DebugStream>();
log.signal_stream_event().connect( sigc::mem_fun(this, &LogReader::logOnEvent) );
outlog->level(Debug::ANY);
outlog->signal_stream_event().connect( sigc::mem_fun(this, &LogReader::logOnEvent) );
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -30,14 +32,13 @@ LogReader::~LogReader() ...@@ -30,14 +32,13 @@ LogReader::~LogReader()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void LogReader::setLogLevel( Debug::type t ) void LogReader::setLogLevel( Debug::type t )
{ {
log.level(t); outlog->level(t);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
DebugStream::StreamEvent_Signal LogReader::signal_stream_event() DebugStream::StreamEvent_Signal LogReader::signal_stream_event()
{ {
return m_logsig; return m_logsig;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void LogReader::connect( const std::string& addr, ost::tpport_t _port, timeout_t msec ) void LogReader::connect( const std::string& addr, ost::tpport_t _port, timeout_t msec )
{ {
...@@ -223,7 +224,7 @@ void LogReader::sendCommand( const std::string& _addr, ost::tpport_t _port, std: ...@@ -223,7 +224,7 @@ void LogReader::sendCommand( const std::string& _addr, ost::tpport_t _port, std:
tcp->read(buf, n); tcp->read(buf, n);
buf[n] = '\0'; buf[n] = '\0';
log << buf; outlog->any(false) << buf;
} }
a--; a--;
...@@ -305,7 +306,7 @@ void LogReader::readlogs( const std::string& _addr, ost::tpport_t _port, LogServ ...@@ -305,7 +306,7 @@ void LogReader::readlogs( const std::string& _addr, ost::tpport_t _port, LogServ
tcp->read(buf, n); tcp->read(buf, n);
buf[n] = '\0'; buf[n] = '\0';
log << buf; outlog->any(false) << buf;
} }
else if( n == 0 && readcount <= 0 ) else if( n == 0 && readcount <= 0 )
break; break;
......
...@@ -244,7 +244,7 @@ TEST_CASE("MaxSessions", "[LogServer]" ) ...@@ -244,7 +244,7 @@ TEST_CASE("MaxSessions", "[LogServer]" )
r2_thr->join(); r2_thr->join();
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
TEST_CASE("Logagregator regexp", "[LogAgregator]" ) TEST_CASE("LogAgregator regexp", "[LogAgregator]" )
{ {
auto la = make_shared<LogAgregator>("ROOT"); auto la = make_shared<LogAgregator>("ROOT");
auto log1 = la->create("log1"); auto log1 = la->create("log1");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment