mirror of
https://github.com/KjellKod/g3log.git
synced 2025-02-24 23:34:48 +01:00
Removed race condition with destruction and cleaning up sinks.
Using string instead of stream
This commit is contained in:
parent
8a36ef87ea
commit
b490624ea0
@ -34,8 +34,7 @@ struct g2LogWorkerImpl {
|
|||||||
g2LogWorkerImpl() : _bg(kjellkod::Active::createActive()) { }
|
g2LogWorkerImpl() : _bg(kjellkod::Active::createActive()) { }
|
||||||
|
|
||||||
~g2LogWorkerImpl() {
|
~g2LogWorkerImpl() {
|
||||||
_bg.reset();
|
_bg->send([this]{_sinks.clear(); });
|
||||||
_sinks.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bgSave(g2::internal::LogEntry msg) {
|
void bgSave(g2::internal::LogEntry msg) {
|
||||||
@ -44,19 +43,18 @@ struct g2LogWorkerImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_sinks.empty()) {
|
if (_sinks.empty()) {
|
||||||
std::ostringstream err_msg;
|
std::string err_msg{"g2logworker has no sinks. Message: ["};
|
||||||
err_msg << "g2logworker has no sinks. Message: [" << msg << "]" << std::endl;
|
err_msg.append(msg).append({"]\n"});
|
||||||
std::cerr << err_msg.str();
|
std::cerr << err_msg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void bgFatal(g2::internal::FatalMessage fatal_message) {
|
void bgFatal(g2::internal::FatalMessage fatal_message) {
|
||||||
auto entry = fatal_message.message_;
|
auto entry = fatal_message.message_;
|
||||||
bgSave(entry);
|
bgSave(entry);
|
||||||
std::ostringstream end_message;
|
std::string end_message{"Exiting after fatal event. Log flushed sucessfully to disk.\n"};
|
||||||
end_message << "Exiting after fatal event. Log flushed sucessfully t disk.\n";
|
bgSave(end_message);
|
||||||
bgSave(end_message.str());
|
std::cerr << "g2log sinks are flushed. Now exiting after receiving fatal event\n" << std::flush;
|
||||||
std::cerr << "g2log sinks are flushed. Now exiting after receiving fatal event" << std::endl;
|
|
||||||
|
|
||||||
_sinks.clear(); // flush all queues
|
_sinks.clear(); // flush all queues
|
||||||
exitWithDefaultSignalHandler(fatal_message.signal_id_);
|
exitWithDefaultSignalHandler(fatal_message.signal_id_);
|
||||||
|
@ -59,7 +59,25 @@ public:
|
|||||||
addWrappedSink(sink);
|
addWrappedSink(sink);
|
||||||
return std2::make_unique < SinkHandle < T >> (sink);
|
return std2::make_unique < SinkHandle < T >> (sink);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
//problemet är att det verkar inte som om min sink avslutas. är det p.g.a. shared_ptr_
|
||||||
|
//printout från g2FileSink borde synas
|
||||||
|
//Tips. Gör unit test massvis med loggers som tar in bolean ref som sätts i destruktorn
|
||||||
|
//
|
||||||
|
//1. fixa filechange testet först
|
||||||
|
//2. sen jämför mitt andra projekt och wrapper.h .
|
||||||
|
// speciellt main, addSink och de underliggande funktionerna
|
||||||
|
//
|
||||||
|
//3) ha worker i wrapper som en unik inte shared klass.
|
||||||
|
//
|
||||||
|
// När allt är klart:
|
||||||
|
// a) överväg att istället för pair ha en strukt med namnet
|
||||||
|
// defaultlogger med samma API som dagens logger.
|
||||||
|
//
|
||||||
|
//b) andra logger creation skapar inte en DefaultLogger utan en
|
||||||
|
//Logger
|
||||||
|
//
|
||||||
|
//4) n när allt fungerar bör namnen ändras.
|
||||||
|
//filnamnen borde heta g2...
|
||||||
|
//klassnamnen borde heta g2::whatever inte g2::g2Whate
|
||||||
#endif // LOG_WORKER_H_
|
#endif // LOG_WORKER_H_
|
||||||
|
Loading…
x
Reference in New Issue
Block a user