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.reset();
|
||||
_sinks.clear();
|
||||
_bg->send([this]{_sinks.clear(); });
|
||||
}
|
||||
|
||||
void bgSave(g2::internal::LogEntry msg) {
|
||||
@ -44,19 +43,18 @@ struct g2LogWorkerImpl {
|
||||
}
|
||||
|
||||
if (_sinks.empty()) {
|
||||
std::ostringstream err_msg;
|
||||
err_msg << "g2logworker has no sinks. Message: [" << msg << "]" << std::endl;
|
||||
std::cerr << err_msg.str();
|
||||
std::string err_msg{"g2logworker has no sinks. Message: ["};
|
||||
err_msg.append(msg).append({"]\n"});
|
||||
std::cerr << err_msg;
|
||||
}
|
||||
}
|
||||
|
||||
void bgFatal(g2::internal::FatalMessage fatal_message) {
|
||||
auto entry = fatal_message.message_;
|
||||
bgSave(entry);
|
||||
std::ostringstream end_message;
|
||||
end_message << "Exiting after fatal event. Log flushed sucessfully t disk.\n";
|
||||
bgSave(end_message.str());
|
||||
std::cerr << "g2log sinks are flushed. Now exiting after receiving fatal event" << std::endl;
|
||||
std::string end_message{"Exiting after fatal event. Log flushed sucessfully to disk.\n"};
|
||||
bgSave(end_message);
|
||||
std::cerr << "g2log sinks are flushed. Now exiting after receiving fatal event\n" << std::flush;
|
||||
|
||||
_sinks.clear(); // flush all queues
|
||||
exitWithDefaultSignalHandler(fatal_message.signal_id_);
|
||||
|
@ -59,7 +59,25 @@ public:
|
||||
addWrappedSink(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_
|
||||
|
Loading…
x
Reference in New Issue
Block a user