diff --git a/g2log/src/g2logworker.cpp b/g2log/src/g2logworker.cpp index 1be5463..2ee85d2 100644 --- a/g2log/src/g2logworker.cpp +++ b/g2log/src/g2logworker.cpp @@ -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_); diff --git a/g2log/src/g2logworker.h b/g2log/src/g2logworker.h index f025a6b..5fd7a91 100644 --- a/g2log/src/g2logworker.h +++ b/g2log/src/g2logworker.h @@ -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_