]>
git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/logging/log_buffer.cc
1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
6 #include "logging/log_buffer.h"
9 #include "port/sys_time.h"
11 namespace ROCKSDB_NAMESPACE
{
13 LogBuffer::LogBuffer(const InfoLogLevel log_level
, Logger
* info_log
)
14 : log_level_(log_level
), info_log_(info_log
) {}
16 void LogBuffer::AddLogToBuffer(size_t max_log_size
, const char* format
,
18 if (!info_log_
|| log_level_
< info_log_
->GetInfoLogLevel()) {
19 // Skip the level because of its level.
23 char* alloc_mem
= arena_
.AllocateAligned(max_log_size
);
24 BufferedLog
* buffered_log
= new (alloc_mem
) BufferedLog();
25 char* p
= buffered_log
->message
;
26 char* limit
= alloc_mem
+ max_log_size
- 1;
29 port::GetTimeOfDay(&(buffered_log
->now_tv
), nullptr);
34 va_copy(backup_ap
, ap
);
35 auto n
= vsnprintf(p
, limit
- p
, format
, backup_ap
);
37 // MS reports -1 when the buffer is too short
52 // Add '\0' to the end
55 logs_
.push_back(buffered_log
);
58 void LogBuffer::FlushBufferToLog() {
59 for (BufferedLog
* log
: logs_
) {
60 const time_t seconds
= log
->now_tv
.tv_sec
;
62 if (port::LocalTimeR(&seconds
, &t
) != nullptr) {
63 Log(log_level_
, info_log_
,
64 "(Original Log Time %04d/%02d/%02d-%02d:%02d:%02d.%06d) %s",
65 t
.tm_year
+ 1900, t
.tm_mon
+ 1, t
.tm_mday
, t
.tm_hour
, t
.tm_min
,
66 t
.tm_sec
, static_cast<int>(log
->now_tv
.tv_usec
), log
->message
);
72 void LogToBuffer(LogBuffer
* log_buffer
, size_t max_log_size
, const char* format
,
74 if (log_buffer
!= nullptr) {
77 log_buffer
->AddLogToBuffer(max_log_size
, format
, ap
);
82 void LogToBuffer(LogBuffer
* log_buffer
, const char* format
, ...) {
83 if (log_buffer
!= nullptr) {
86 log_buffer
->AddLogToBuffer(LogBuffer::kDefaultMaxLogSize
, format
, ap
);
91 } // namespace ROCKSDB_NAMESPACE