|
48 | 48 | #include <NdbSleep.h>
|
49 | 49 | #include <portlib/NdbDir.hpp>
|
50 | 50 | #include <EventLogger.hpp>
|
| 51 | +#include <logger/FileLogHandler.hpp> |
| 52 | +#include <logger/ConsoleLogHandler.hpp> |
| 53 | +#include <logger/SysLogHandler.hpp> |
51 | 54 | #include <DebuggerNames.hpp>
|
52 | 55 | #include <ndb_version.h>
|
53 | 56 |
|
@@ -578,6 +581,71 @@ MgmtSrvr::start()
|
578 | 581 | }
|
579 | 582 |
|
580 | 583 |
|
| 584 | +void |
| 585 | +MgmtSrvr::configure_eventlogger(const BaseString& logdestination) const |
| 586 | +{ |
| 587 | + // Close old log handlers before creating the new |
| 588 | + g_eventLogger->close(); |
| 589 | + |
| 590 | + Vector<BaseString> logdestinations; |
| 591 | + logdestination.split(logdestinations, ";"); |
| 592 | + |
| 593 | + for(unsigned i = 0; i < logdestinations.size(); i++) |
| 594 | + { |
| 595 | + // Extract type(everything left of colon) |
| 596 | + Vector<BaseString> v_type_params; |
| 597 | + logdestinations[i].split(v_type_params, ":", 2); |
| 598 | + BaseString type(v_type_params[0]); |
| 599 | + |
| 600 | + // Extract params(everything right of colon) |
| 601 | + BaseString params; |
| 602 | + if(v_type_params.size() >= 2) |
| 603 | + params = v_type_params[1]; |
| 604 | + |
| 605 | + LogHandler *handler = NULL; |
| 606 | + if(type == "FILE") |
| 607 | + { |
| 608 | + char *default_file_name= NdbConfig_ClusterLogFileName(_ownNodeId); |
| 609 | + handler = new FileLogHandler(default_file_name); |
| 610 | + free(default_file_name); |
| 611 | + } |
| 612 | + else if(type == "CONSOLE") |
| 613 | + { |
| 614 | + handler = new ConsoleLogHandler(); |
| 615 | + } |
| 616 | +#ifndef _WIN32 |
| 617 | + else if(type == "SYSLOG") |
| 618 | + { |
| 619 | + handler = new SysLogHandler(); |
| 620 | + } |
| 621 | +#endif |
| 622 | + if(handler == NULL) |
| 623 | + { |
| 624 | + ndbout_c("INTERNAL ERROR: Could not create log handler for: '%s'", |
| 625 | + logdestinations[i].c_str()); |
| 626 | + continue; |
| 627 | + } |
| 628 | + |
| 629 | + if(!handler->parseParams(params)) |
| 630 | + { |
| 631 | + ndbout_c("Failed to parse parameters for log handler: '%s', error: %d '%s'", |
| 632 | + logdestinations[i].c_str(), handler->getErrorCode(), handler->getErrorStr()); |
| 633 | + delete handler; |
| 634 | + continue; |
| 635 | + } |
| 636 | + |
| 637 | + if (!g_eventLogger->addHandler(handler)) |
| 638 | + { |
| 639 | + ndbout_c("INTERNAL ERROR: Could not add %s log handler", handler->handler_type()); |
| 640 | + g_eventLogger->error("INTERNAL ERROR: Could not add %s log handler", |
| 641 | + handler->handler_type()); |
| 642 | + delete handler; |
| 643 | + continue; |
| 644 | + } |
| 645 | + } |
| 646 | +} |
| 647 | + |
| 648 | + |
581 | 649 | void
|
582 | 650 | MgmtSrvr::setClusterLog(const Config* config)
|
583 | 651 | {
|
@@ -615,21 +683,7 @@ MgmtSrvr::setClusterLog(const Config* config)
|
615 | 683 | logdest_configured = false;
|
616 | 684 | }
|
617 | 685 |
|
618 |
| - g_eventLogger->close(); |
619 |
| - |
620 |
| - int err= 0; |
621 |
| - char errStr[100]= {0}; |
622 |
| - if(!g_eventLogger->addHandler(logdest, &err, sizeof(errStr), errStr)) { |
623 |
| - ndbout << "Warning: could not add log destination '" |
624 |
| - << logdest.c_str() << "'. Reason: "; |
625 |
| - if(err) |
626 |
| - ndbout << strerror(err); |
627 |
| - if(err && errStr[0]!='\0') |
628 |
| - ndbout << ", "; |
629 |
| - if(errStr[0]!='\0') |
630 |
| - ndbout << errStr; |
631 |
| - ndbout << endl; |
632 |
| - } |
| 686 | + configure_eventlogger(logdest); |
633 | 687 |
|
634 | 688 | if (logdest_configured == false &&
|
635 | 689 | m_opts.non_interactive)
|
|
0 commit comments