File tree 2 files changed +12
-4
lines changed
2 files changed +12
-4
lines changed Original file line number Diff line number Diff line change @@ -117,8 +117,7 @@ extern "C"
117
117
118
118
// Note: because logger uses ringbuffer, logger can only be initialised once
119
119
// ringbuffer memory has been verified
120
- auto new_logger = std::make_unique<ccf::RingbufferLogger>(
121
- writer_factory->create_writer_to_outside ());
120
+ auto new_logger = std::make_unique<ccf::RingbufferLogger>(*writer_factory);
122
121
auto ringbuffer_logger = new_logger.get ();
123
122
ccf::logger::config::loggers ().push_back (std::move (new_logger));
124
123
Original file line number Diff line number Diff line change @@ -9,19 +9,28 @@ namespace ccf
9
9
class RingbufferLogger : public ccf ::logger::AbstractLogger
10
10
{
11
11
protected:
12
- ringbuffer::WriterPtr writer ;
12
+ ringbuffer::AbstractWriterFactory& writer_factory ;
13
13
14
14
// Current time, as us duration since epoch (from system_clock). Used to
15
15
// produce offsets to host time when logging from inside the enclave
16
16
std::atomic<std::chrono::microseconds> us = {};
17
17
18
18
public:
19
- RingbufferLogger (const ringbuffer::WriterPtr& writer_) : writer(writer_) {}
19
+ RingbufferLogger (ringbuffer::AbstractWriterFactory& wf_) :
20
+ writer_factory (wf_)
21
+ {}
20
22
21
23
void write (
22
24
const ccf::logger::LogLine& line,
23
25
const std::optional<double >& enclave_offset = std::nullopt) override
24
26
{
27
+ thread_local ringbuffer::WriterPtr writer = nullptr ;
28
+
29
+ if (writer == nullptr )
30
+ {
31
+ writer = writer_factory.create_writer_to_outside ();
32
+ }
33
+
25
34
writer->write (
26
35
AdminMessage::log_msg,
27
36
us.load ().count (),
You can’t perform that action at this time.
0 commit comments