greenplumn ILogger 源码
greenplumn ILogger 代码
文件路径:/src/backend/gporca/libgpos/src/error/ILogger.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2010 Greenplum, Inc.
//
// @filename:
// ILogger.cpp
//
// @doc:
// Worker abstraction, e.g. thread
//---------------------------------------------------------------------------
#include "gpos/error/ILogger.h"
#include "gpos/common/clibwrapper.h"
#include "gpos/common/syslibwrapper.h"
#include "gpos/error/CLoggerStream.h"
#include "gpos/error/CLoggerSyslog.h"
#include "gpos/error/CMessageRepository.h"
#include "gpos/string/CWStringConst.h"
using namespace gpos;
//---------------------------------------------------------------------------
// @function:
// ILogger::ILogger
//
// @doc:
// Ctor
//
//---------------------------------------------------------------------------
ILogger::ILogger() = default;
//---------------------------------------------------------------------------
// @function:
// ILogger::~ILogger
//
// @doc:
// Dtor
//
//---------------------------------------------------------------------------
ILogger::~ILogger() = default;
//---------------------------------------------------------------------------
// @function:
// ILogger::Warning
//
// @doc:
// Retrieve warning message from repository and log it to error log
//
//---------------------------------------------------------------------------
void
ILogger::Warning(const CHAR *filename, ULONG line, ULONG major, ULONG minor...)
{
GPOS_CHECK_ABORT;
// get warning
CException exc(major, minor, filename, line);
ITask *task = ITask::Self();
// get current task's locale
ELocale locale = ElocEnUS_Utf8;
if (nullptr != task)
{
locale = task->Locale();
}
// retrieve warning message from repository
CMessage *msg =
CMessageRepository::GetMessageRepository()->LookupMessage(exc, locale);
GPOS_ASSERT(CException::ExsevWarning == msg->GetSeverity());
WCHAR buffer[GPOS_LOG_MESSAGE_BUFFER_SIZE];
CWStringStatic str(buffer, GPOS_ARRAY_SIZE(buffer));
// format warning message
{
VA_LIST va_args;
VA_START(va_args, minor);
msg->Format(&str, va_args);
VA_END(va_args);
}
LogTask(str.GetBuffer(), CException::ExsevWarning, true /*is_err*/,
filename, line);
}
//---------------------------------------------------------------------------
// @function:
// ILogger::Trace
//
// @doc:
// Format and log debugging message to current task's output or error log
//
//---------------------------------------------------------------------------
void
ILogger::Trace(const CHAR *filename, ULONG line, BOOL is_err, const WCHAR *msg)
{
GPOS_CHECK_ABORT;
LogTask(msg, CException::ExsevTrace, is_err, filename, line);
}
//---------------------------------------------------------------------------
// @function:
// ILogger::TraceFormat
//
// @doc:
// Format and log debugging message to current task's output or error log
//
//---------------------------------------------------------------------------
void
ILogger::TraceFormat(const CHAR *filename, ULONG line, BOOL is_err,
const WCHAR *format, ...)
{
GPOS_CHECK_ABORT;
WCHAR buffer[GPOS_LOG_TRACE_BUFFER_SIZE];
CWStringStatic str(buffer, GPOS_ARRAY_SIZE(buffer));
VA_LIST va_args;
// get arguments
VA_START(va_args, format);
str.AppendFormatVA(format, va_args);
// reset arguments
VA_END(va_args);
LogTask(str.GetBuffer(), CException::ExsevTrace, is_err, filename, line);
}
//---------------------------------------------------------------------------
// @function:
// ILogger::LogTask
//
// @doc:
// Log message to current task's logger;
// Use stdout/stderr-wrapping loggers outside worker framework;
//
//---------------------------------------------------------------------------
void
ILogger::LogTask(const WCHAR *msg, ULONG severity, BOOL is_err,
const CHAR *filename, ULONG line)
{
CLogger *log = nullptr;
if (is_err)
{
log = &CLoggerStream::m_stderr_stream_logger;
}
else
{
log = &CLoggerStream::m_stdout_stream_logger;
}
ITask *task = ITask::Self();
if (nullptr != task)
{
if (is_err)
{
log = dynamic_cast<CLogger *>(task->GetErrorLogger());
}
else
{
log = dynamic_cast<CLogger *>(task->GetOutputLogger());
}
}
GPOS_ASSERT(nullptr != log);
log->Log(msg, severity, filename, line);
}
// EOF
相关信息
相关文章
greenplumn CAutoExceptionStack 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦