ircd::log: Rename facility to level.

This commit is contained in:
Jason Volk 2018-12-19 12:52:08 -08:00
parent 7137280b05
commit 5a0a9989e4
7 changed files with 218 additions and 218 deletions

View File

@ -30,7 +30,7 @@ namespace ircd::db
size_t file_count(const database &);
size_t bytes(const database &);
options getopt(const database &);
log::facility loglevel(const database &);
log::level loglevel(const database &);
// Property information interface
using prop_int = uint64_t;
@ -44,7 +44,7 @@ namespace ircd::db
rocksdb::Cache *cache(database &);
// Control panel
void loglevel(database &, const log::facility &);
void loglevel(database &, const log::level &);
void setopt(database &, const string_view &key, const string_view &val);
void fdeletions(database &, const bool &enable, const bool &force = false);
uint64_t checkpoint(database &);

View File

@ -11,7 +11,7 @@
#pragma once
#define HAVE_IRCD_LOGGER_H
// windows.h #define conflicts with our facility
// windows.h #define conflicts with our level
#ifdef HAVE_WINDOWS_H
#undef ERROR
#endif
@ -24,7 +24,7 @@ namespace ircd
/// Logging system
namespace ircd::log
{
enum facility :int;
enum level :int;
struct log;
struct vlog;
struct logf;
@ -43,8 +43,8 @@ namespace ircd::log
extern log star; // "*", '*'
extern log general; // "ircd", 'G'
string_view reflect(const facility &);
facility reflect(const string_view &);
string_view reflect(const level &);
level reflect(const string_view &);
// The mask is the list of named loggers to allow; an empty mask disallows
// all loggers. An empty unmask allows all loggers. An unmask of a logger
@ -54,9 +54,9 @@ namespace ircd::log
void console_mask(const vector_view<string_view> & = {});
// This suite adjusts the output for an entire level.
bool console_enabled(const facility &);
void console_disable(const facility &);
void console_enable(const facility &);
bool console_enabled(const level &);
void console_disable(const level &);
void console_enable(const level &);
void console_disable();
void console_enable();
@ -68,7 +68,7 @@ namespace ircd::log
void fini();
}
enum ircd::log::facility
enum ircd::log::level
:int
{
CRITICAL = 0, ///< Catastrophic/unrecoverable; program is in a compromised state.
@ -96,7 +96,7 @@ struct ircd::log::log
bool fmasked {true}; // currently in the file mask (enabled)
public:
template<class... args> void operator()(const facility &, const string_view &fmt, args&&...);
template<class... args> void operator()(const level &, const string_view &fmt, args&&...);
#if RB_LOG_LEVEL >= 0
template<class... args> void critical(const string_view &fmt, args&&...);
@ -155,21 +155,21 @@ struct ircd::log::log
struct ircd::log::vlog
{
vlog(const log &log, const facility &, const string_view &fmt, const va_rtti &ap);
vlog(const log &log, const level &, const string_view &fmt, const va_rtti &ap);
};
struct ircd::log::logf
{
template<class... args>
logf(const log &log, const facility &facility, const string_view &fmt, args&&... a)
logf(const log &log, const level &level, const string_view &fmt, args&&... a)
{
vlog(log, facility, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level, fmt, va_rtti{std::forward<args>(a)...});
}
};
struct ircd::log::mark
{
mark(const facility &, const string_view &msg = {});
mark(const level &, const string_view &msg = {});
mark(const string_view &msg = {});
};
@ -185,13 +185,13 @@ struct ircd::log::debug
template<class... args>
debug(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::DEBUG, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::DEBUG, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
debug(const string_view &fmt, args&&... a)
{
vlog(general, facility::DEBUG, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::DEBUG, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -215,13 +215,13 @@ struct ircd::log::dwarning
template<class... args>
dwarning(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::DWARNING, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::DWARNING, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
dwarning(const string_view &fmt, args&&... a)
{
vlog(general, facility::DWARNING, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::DWARNING, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -245,13 +245,13 @@ struct ircd::log::derror
template<class... args>
derror(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::DERROR, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::DERROR, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
derror(const string_view &fmt, args&&... a)
{
vlog(general, facility::DERROR, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::DERROR, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -275,13 +275,13 @@ struct ircd::log::info
template<class... args>
info(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::INFO, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::INFO, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
info(const string_view &fmt, args&&... a)
{
vlog(general, facility::INFO, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::INFO, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -305,13 +305,13 @@ struct ircd::log::notice
template<class... args>
notice(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::NOTICE, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::NOTICE, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
notice(const string_view &fmt, args&&... a)
{
vlog(general, facility::NOTICE, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::NOTICE, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -335,13 +335,13 @@ struct ircd::log::warning
template<class... args>
warning(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::WARNING, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::WARNING, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
warning(const string_view &fmt, args&&... a)
{
vlog(general, facility::WARNING, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::WARNING, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -365,13 +365,13 @@ struct ircd::log::error
template<class... args>
error(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::ERROR, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::ERROR, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
error(const string_view &fmt, args&&... a)
{
vlog(general, facility::ERROR, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::ERROR, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -395,13 +395,13 @@ struct ircd::log::critical
template<class... args>
critical(const log &log, const string_view &fmt, args&&... a)
{
vlog(log, facility::CRITICAL, fmt, va_rtti{std::forward<args>(a)...});
vlog(log, level::CRITICAL, fmt, va_rtti{std::forward<args>(a)...});
}
template<class... args>
critical(const string_view &fmt, args&&... a)
{
vlog(general, facility::CRITICAL, fmt, va_rtti{std::forward<args>(a)...});
vlog(general, level::CRITICAL, fmt, va_rtti{std::forward<args>(a)...});
}
};
#else
@ -425,7 +425,7 @@ void
ircd::log::log::debug(const string_view &fmt,
args&&... a)
{
operator()(facility::DEBUG, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::DEBUG, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -442,7 +442,7 @@ void
ircd::log::log::dwarning(const string_view &fmt,
args&&... a)
{
operator()(facility::DWARNING, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::DWARNING, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -459,7 +459,7 @@ void
ircd::log::log::derror(const string_view &fmt,
args&&... a)
{
operator()(facility::DERROR, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::DERROR, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -476,7 +476,7 @@ void
ircd::log::log::info(const string_view &fmt,
args&&... a)
{
operator()(facility::INFO, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::INFO, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -493,7 +493,7 @@ void
ircd::log::log::notice(const string_view &fmt,
args&&... a)
{
operator()(facility::NOTICE, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::NOTICE, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -510,7 +510,7 @@ void
ircd::log::log::warning(const string_view &fmt,
args&&... a)
{
operator()(facility::WARNING, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::WARNING, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -527,7 +527,7 @@ void
ircd::log::log::error(const string_view &fmt,
args&&... a)
{
operator()(facility::ERROR, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::ERROR, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -544,7 +544,7 @@ void
ircd::log::log::critical(const string_view &fmt,
args&&... a)
{
operator()(facility::CRITICAL, fmt, va_rtti{std::forward<args>(a)...});
operator()(level::CRITICAL, fmt, va_rtti{std::forward<args>(a)...});
}
#else
inline void
@ -557,7 +557,7 @@ ircd::log::log::critical(const string_view &fmt,
template<class... args>
void
ircd::log::log::operator()(const facility &f,
ircd::log::log::operator()(const level &f,
const string_view &fmt,
args&&... a)
{

View File

@ -552,14 +552,14 @@ ircd::db::bgcancel(database &d,
property<uint64_t>(d, rocksdb::DB::Properties::kBackgroundErrors)
};
const auto facility
const auto level
{
errors? log::facility::ERROR : log::facility::DEBUG
errors? log::level::ERROR : log::level::DEBUG
};
log::logf
{
log, facility,
log, level,
"'%s': Canceled all background work; errors:%lu",
name(d),
errors
@ -647,14 +647,14 @@ ircd::db::setopt(database &d,
};
}
/// Set the rdb logging level by translating our ircd::log::facility to the
/// Set the rdb logging level by translating our ircd::log::level to the
/// RocksDB enum. This translation is a reasonable convenience, as both
/// enums are similar enough.
void
ircd::db::loglevel(database &d,
const ircd::log::facility &fac)
const ircd::log::level &fac)
{
using ircd::log::facility;
using ircd::log::level;
rocksdb::InfoLogLevel lev
{
@ -663,24 +663,24 @@ ircd::db::loglevel(database &d,
switch(fac)
{
case facility::CRITICAL: lev = rocksdb::FATAL_LEVEL; break;
case facility::ERROR: lev = rocksdb::ERROR_LEVEL; break;
case facility::WARNING:
case facility::NOTICE: lev = rocksdb::WARN_LEVEL; break;
case facility::INFO: lev = rocksdb::INFO_LEVEL; break;
case facility::DERROR:
case facility::DWARNING:
case facility::DEBUG: lev = rocksdb::DEBUG_LEVEL; break;
case facility::_NUM_: assert(0); break;
case level::CRITICAL: lev = rocksdb::FATAL_LEVEL; break;
case level::ERROR: lev = rocksdb::ERROR_LEVEL; break;
case level::WARNING:
case level::NOTICE: lev = rocksdb::WARN_LEVEL; break;
case level::INFO: lev = rocksdb::INFO_LEVEL; break;
case level::DERROR:
case level::DWARNING:
case level::DEBUG: lev = rocksdb::DEBUG_LEVEL; break;
case level::_NUM_: assert(0); break;
}
d.logger->SetInfoLogLevel(lev);
}
/// Set the rdb logging level by translating our ircd::log::facility to the
/// Set the rdb logging level by translating our ircd::log::level to the
/// RocksDB enum. This translation is a reasonable convenience, as both
/// enums are similar enough.
ircd::log::facility
ircd::log::level
ircd::db::loglevel(const database &d)
{
const auto &level
@ -695,11 +695,11 @@ ircd::db::loglevel(const database &d)
assert(0);
case rocksdb::HEADER_LEVEL:
case rocksdb::FATAL_LEVEL: return log::facility::CRITICAL;
case rocksdb::ERROR_LEVEL: return log::facility::ERROR;
case rocksdb::WARN_LEVEL: return log::facility::WARNING;
case rocksdb::INFO_LEVEL: return log::facility::INFO;
case rocksdb::DEBUG_LEVEL: return log::facility::DEBUG;
case rocksdb::FATAL_LEVEL: return log::level::CRITICAL;
case rocksdb::ERROR_LEVEL: return log::level::ERROR;
case rocksdb::WARN_LEVEL: return log::level::WARNING;
case rocksdb::INFO_LEVEL: return log::level::INFO;
case rocksdb::DEBUG_LEVEL: return log::level::DEBUG;
}
}
@ -2049,7 +2049,7 @@ noexcept
}
static
ircd::log::facility
ircd::log::level
translate(const rocksdb::InfoLogLevel &level)
{
switch(level)
@ -2057,13 +2057,13 @@ translate(const rocksdb::InfoLogLevel &level)
// Treat all infomational messages from rocksdb as debug here for now.
// We can clean them up and make better reports for our users eventually.
default:
case rocksdb::InfoLogLevel::DEBUG_LEVEL: return ircd::log::facility::DEBUG;
case rocksdb::InfoLogLevel::INFO_LEVEL: return ircd::log::facility::DEBUG;
case rocksdb::InfoLogLevel::DEBUG_LEVEL: return ircd::log::level::DEBUG;
case rocksdb::InfoLogLevel::INFO_LEVEL: return ircd::log::level::DEBUG;
case rocksdb::InfoLogLevel::WARN_LEVEL: return ircd::log::facility::WARNING;
case rocksdb::InfoLogLevel::ERROR_LEVEL: return ircd::log::facility::ERROR;
case rocksdb::InfoLogLevel::FATAL_LEVEL: return ircd::log::facility::CRITICAL;
case rocksdb::InfoLogLevel::HEADER_LEVEL: return ircd::log::facility::NOTICE;
case rocksdb::InfoLogLevel::WARN_LEVEL: return ircd::log::level::WARNING;
case rocksdb::InfoLogLevel::ERROR_LEVEL: return ircd::log::level::ERROR;
case rocksdb::InfoLogLevel::FATAL_LEVEL: return ircd::log::level::CRITICAL;
case rocksdb::InfoLogLevel::HEADER_LEVEL: return ircd::log::level::NOTICE;
}
}
@ -2599,16 +2599,16 @@ ircd::db::database::events::OnCompactionCompleted(rocksdb::DB *const db,
const rocksdb::CompactionJobInfo &info)
noexcept
{
const log::facility facility
const log::level level
{
info.status == rocksdb::Status::OK()?
log::facility::INFO:
log::facility::ERROR
log::level::INFO:
log::level::ERROR
};
log::logf
{
log, facility,
log, level,
"'%s': %d compacted '%s' ctx:%lu level[in:%d out:%d] files[in:%zu out:%zu] reason:%d #%d: %s",
d->name,
info.job_id,
@ -2630,16 +2630,16 @@ void
ircd::db::database::events::OnTableFileDeleted(const rocksdb::TableFileDeletionInfo &info)
noexcept
{
const log::facility facility
const log::level level
{
info.status == rocksdb::Status::OK()?
log::facility::DEBUG:
log::facility::ERROR
log::level::DEBUG:
log::level::ERROR
};
log::logf
{
log, facility,
log, level,
"'%s': %d table file delete [%s][%s] #%d: %s",
d->name,
info.job_id,
@ -2654,16 +2654,16 @@ void
ircd::db::database::events::OnTableFileCreated(const rocksdb::TableFileCreationInfo &info)
noexcept
{
const log::facility facility
const log::level level
{
info.status == rocksdb::Status::OK()?
log::facility::DEBUG:
log::facility::ERROR
log::level::DEBUG:
log::level::ERROR
};
log::logf
{
log, facility,
log, level,
"'%s': %d table file closed [%s][%s] '%s' #%d: %s",
d->name,
info.job_id,
@ -2758,11 +2758,11 @@ noexcept
false
};
const log::facility fac
const log::level fac
{
ignore?
log::facility::DERROR:
log::facility::ERROR
log::level::DERROR:
log::level::ERROR
};
log::logf
@ -6313,18 +6313,18 @@ try
}
catch(const std::system_error &e)
{
// Set the facility to downplay some errors which the user shouldn't
// Set the level to downplay some errors which the user shouldn't
// be alerted to with a log message under normal operations.
const log::facility facility
const log::level level
{
is(e.code(), std::errc::no_such_file_or_directory)?
log::facility::DERROR:
log::facility::ERROR
log::level::DERROR:
log::level::ERROR
};
log::logf
{
log, facility, "'%s': opening seqfile:%p `%s' (%d) :%s",
log, level, "'%s': opening seqfile:%p `%s' (%d) :%s",
d->name,
this,
name,

View File

@ -17,7 +17,7 @@
#define IRCD_JS_FIX
// This was only ever defined for the SpiderMonkey headers and some of our hacks,
// but we need to undef it to not step on the log facility log::DEBUG.
// but we need to undef it to not step on the log level log::DEBUG.
// Use JS_DEBUG as an analog instead.
#undef DEBUG
@ -3426,13 +3426,13 @@ ircd::js::context::handle_error(JSContext *const cx,
noexcept try
{
assert(report);
const log::facility facility
const log::level level
{
JSREPORT_IS_WARNING(report->flags)? log::WARNING:
log::DEBUG
};
log(facility, "context(%p): %s",
log(level, "context(%p): %s",
(const void *)cx,
debug(*report).c_str());

View File

@ -16,21 +16,21 @@ namespace ircd::log
{
struct confs;
extern const std::array<string_view, num_of<facility>()> default_ansi;
extern std::array<confs, num_of<facility>()> confs;
extern const std::array<string_view, num_of<level>()> default_ansi;
extern std::array<confs, num_of<level>()> confs;
std::array<std::ofstream, num_of<facility>()> file;
std::array<ulong, num_of<facility>()> console_quiet_stdout;
std::array<ulong, num_of<facility>()> console_quiet_stderr;
std::array<std::ofstream, num_of<level>()> file;
std::array<ulong, num_of<level>()> console_quiet_stdout;
std::array<ulong, num_of<level>()> console_quiet_stderr;
std::ostream &out_console{std::cout};
std::ostream &err_console{std::cerr};
static std::string dir_path();
static std::string file_path(const facility &);
static std::string file_path(const level &);
static void mkdir();
static void open(const facility &);
static void open(const level &);
}
struct ircd::log::confs
@ -47,7 +47,7 @@ void
ircd::log::init()
{
if(!ircd::debugmode)
console_disable(facility::DEBUG);
console_disable(level::DEBUG);
mkdir();
}
@ -76,37 +76,37 @@ ircd::log::mkdir()
void
ircd::log::open()
{
for_each<facility>([](const facility &fac)
for_each<level>([](const level &lev)
{
const auto &conf(confs.at(fac));
const auto &conf(confs.at(lev));
if(!bool(conf.file_enable))
return;
if(file[fac].is_open())
file[fac].close();
if(file[lev].is_open())
file[lev].close();
file[fac].clear();
file[fac].exceptions(std::ios::badbit | std::ios::failbit);
open(fac);
file[lev].clear();
file[lev].exceptions(std::ios::badbit | std::ios::failbit);
open(lev);
});
}
void
ircd::log::close()
{
for_each<facility>([](const facility &fac)
for_each<level>([](const level &lev)
{
if(file[fac].is_open())
file[fac].close();
if(file[lev].is_open())
file[lev].close();
});
}
void
ircd::log::flush()
{
for_each<facility>([](const facility &fac)
for_each<level>([](const level &lev)
{
file[fac].flush();
file[lev].flush();
});
std::flush(out_console);
@ -114,23 +114,23 @@ ircd::log::flush()
}
void
ircd::log::open(const facility &fac)
ircd::log::open(const level &lev)
try
{
const auto &mode(std::ios::app);
const auto &path(file_path(fac));
file[fac].open(path.c_str(), mode);
const auto &path(file_path(lev));
file[lev].open(path.c_str(), mode);
}
catch(const std::exception &e)
{
fprintf(stderr, "!!! Opening log file [%s] failed: %s",
file_path(fac).c_str(),
file_path(lev).c_str(),
e.what());
throw;
}
std::string
ircd::log::file_path(const facility &fac)
ircd::log::file_path(const level &lev)
{
const std::string base
{
@ -139,7 +139,7 @@ ircd::log::file_path(const facility &fac)
const string_view parts[]
{
base, reflect(fac)
base, reflect(lev)
};
return fs::make_path(parts);
@ -159,43 +159,43 @@ ircd::log::dir_path()
void
ircd::log::console_enable()
{
for_each<facility>([](const facility &fac)
for_each<level>([](const level &lev)
{
console_enable(fac);
console_enable(lev);
});
}
void
ircd::log::console_disable()
{
for_each<facility>([](const facility &fac)
for_each<level>([](const level &lev)
{
console_disable(fac);
console_disable(lev);
});
}
void
ircd::log::console_enable(const facility &fac)
ircd::log::console_enable(const level &lev)
{
if(console_quiet_stdout[fac])
console_quiet_stdout[fac]--;
if(console_quiet_stdout[lev])
console_quiet_stdout[lev]--;
if(console_quiet_stderr[fac])
console_quiet_stderr[fac]--;
if(console_quiet_stderr[lev])
console_quiet_stderr[lev]--;
}
void
ircd::log::console_disable(const facility &fac)
ircd::log::console_disable(const level &lev)
{
console_quiet_stdout[fac]++;
console_quiet_stderr[fac]++;
console_quiet_stdout[lev]++;
console_quiet_stderr[lev]++;
}
bool
ircd::log::console_enabled(const facility &fac)
ircd::log::console_enabled(const level &lev)
{
return !console_quiet_stdout[fac] ||
!console_quiet_stderr[fac];
return !console_quiet_stdout[lev] ||
!console_quiet_stderr[lev];
}
void
@ -235,17 +235,17 @@ ircd::log::console_quiet::~console_quiet()
ircd::log::mark::mark(const string_view &msg)
{
for_each<facility>([&msg]
(const auto &fac)
for_each<level>([&msg]
(const auto &lev)
{
mark(fac, msg);
mark(lev, msg);
});
}
ircd::log::mark::mark(const facility &fac,
ircd::log::mark::mark(const level &lev,
const string_view &msg)
{
vlog(star, fac, "%s", msg);
vlog(star, lev, "%s", msg);
}
//
@ -346,8 +346,8 @@ ircd::log::log::log(const string_view &name,
namespace ircd::log
{
static void check(std::ostream &) noexcept;
static void slog(const log &, const facility &, const window_buffer::closure &) noexcept;
static void vlog_threadsafe(const log &, const facility &, const string_view &fmt, const va_rtti &ap);
static void slog(const log &, const level &, const window_buffer::closure &) noexcept;
static void vlog_threadsafe(const log &, const level &, const string_view &fmt, const va_rtti &ap);
}
decltype(ircd::log::star)
@ -368,7 +368,7 @@ ircd::log::general
/// main IRCd event loop which is running on the main thread.
void
ircd::log::vlog_threadsafe(const log &log,
const facility &fac,
const level &lev,
const string_view &fmt,
const va_rtti &ap)
{
@ -380,14 +380,14 @@ ircd::log::vlog_threadsafe(const log &log,
// The pointer to the logger is copied to the main thread.
auto *const logp{&log};
ircd::post([fac, str(std::move(str)), logp]
ircd::post([lev, str(std::move(str)), logp]
{
// If that named logger was destroyed while this closure was
// travelling to the main thread then we just discard this message.
if(!log::exists(logp))
return;
slog(*logp, fac, [&str](const mutable_buffer &out) -> size_t
slog(*logp, lev, [&str](const mutable_buffer &out) -> size_t
{
return copy(out, string_view{str});
});
@ -395,17 +395,17 @@ ircd::log::vlog_threadsafe(const log &log,
}
ircd::log::vlog::vlog(const log &log,
const facility &fac,
const level &lev,
const string_view &fmt,
const va_rtti &ap)
{
if(!is_main_thread())
{
vlog_threadsafe(log, fac, fmt, ap);
vlog_threadsafe(log, lev, fmt, ap);
return;
}
slog(log, fac, [&fmt, &ap](const mutable_buffer &out) -> size_t
slog(log, lev, [&fmt, &ap](const mutable_buffer &out) -> size_t
{
return fmt::vsprintf(out, fmt, ap);
});
@ -416,17 +416,17 @@ namespace ircd::log
// linkage for slog() reentrance assertion
bool entered;
static bool can_skip(const log &, const facility &);
static bool can_skip(const log &, const level &);
}
void
ircd::log::slog(const log &log,
const facility &fac,
const level &lev,
const window_buffer::closure &closure)
noexcept
{
const auto &conf(confs.at(fac));
if(can_skip(log, fac))
const auto &conf(confs.at(lev));
if(can_skip(log, lev))
return;
// Have to be on the main thread to call slog().
@ -455,7 +455,7 @@ noexcept
<< string_view{conf.console_ansi}
<< std::setw(8)
<< std::right
<< reflect(fac)
<< reflect(lev)
<< (string_view{conf.console_ansi}? "\033[0m " : " ")
// << (log.snote? log.snote : '-')
<< std::setw(9)
@ -492,14 +492,14 @@ noexcept
}};
// copy to std::cerr
if(log.cmasked && bool(conf.console_stderr) && !console_quiet_stderr[fac])
if(log.cmasked && bool(conf.console_stderr) && !console_quiet_stderr[lev])
{
err_console.clear();
write(err_console);
}
// copy to std::cout
if(log.cmasked && bool(conf.console_stdout) && !console_quiet_stdout[fac])
if(log.cmasked && bool(conf.console_stdout) && !console_quiet_stdout[lev])
{
out_console.clear();
write(out_console);
@ -508,28 +508,28 @@ noexcept
}
// copy to file
if(log.fmasked && file[fac].is_open())
if(log.fmasked && file[lev].is_open())
{
file[fac].clear();
write(file[fac]);
file[lev].clear();
write(file[lev]);
if(conf.file_flush)
std::flush(file[fac]);
std::flush(file[lev]);
}
}
bool
ircd::log::can_skip(const log &log,
const facility &fac)
const level &lev)
{
const auto &conf(confs.at(fac));
const auto &conf(confs.at(lev));
// When all of these conditions are true there is no possible log output
// so we can bail real quick.
if(!file[fac].is_open() && !bool(conf.console_stdout) && !bool(conf.console_stderr))
if(!file[lev].is_open() && !bool(conf.console_stdout) && !bool(conf.console_stderr))
return true;
// Same for this set of conditions...
if((!file[fac].is_open() || !log.fmasked) && (!log.cmasked || !console_enabled(fac)))
if((!file[lev].is_open() || !log.fmasked) && (!log.cmasked || !console_enabled(lev)))
return true;
return false;
@ -565,43 +565,43 @@ catch(const std::exception &e)
ircd::terminate();
}
ircd::log::facility
ircd::log::level
ircd::log::reflect(const string_view &f)
{
if(f == "CRITICAL") return facility::CRITICAL;
if(f == "ERROR") return facility::ERROR;
if(f == "DERROR") return facility::DERROR;
if(f == "DWARNING") return facility::DWARNING;
if(f == "WARNING") return facility::WARNING;
if(f == "NOTICE") return facility::NOTICE;
if(f == "INFO") return facility::INFO;
if(f == "DEBUG") return facility::DEBUG;
if(f == "CRITICAL") return level::CRITICAL;
if(f == "ERROR") return level::ERROR;
if(f == "DERROR") return level::DERROR;
if(f == "DWARNING") return level::DWARNING;
if(f == "WARNING") return level::WARNING;
if(f == "NOTICE") return level::NOTICE;
if(f == "INFO") return level::INFO;
if(f == "DEBUG") return level::DEBUG;
throw ircd::error
{
"'%s' is not a recognized log facility", f
"'%s' is not a recognized log level", f
};
}
ircd::string_view
ircd::log::reflect(const facility &f)
ircd::log::reflect(const level &f)
{
switch(f)
{
case facility::CRITICAL: return "CRITICAL";
case facility::ERROR: return "ERROR";
case facility::DERROR: return "ERROR";
case facility::WARNING: return "WARNING";
case facility::DWARNING: return "WARNING";
case facility::INFO: return "INFO";
case facility::NOTICE: return "NOTICE";
case facility::DEBUG: return "DEBUG";
case facility::_NUM_: break; // Allows -Wswitch to remind developer to add reflection here
case level::CRITICAL: return "CRITICAL";
case level::ERROR: return "ERROR";
case level::DERROR: return "ERROR";
case level::WARNING: return "WARNING";
case level::DWARNING: return "WARNING";
case level::INFO: return "INFO";
case level::NOTICE: return "NOTICE";
case level::DEBUG: return "DEBUG";
case level::_NUM_: break; // Allows -Wswitch to remind developer to add reflection here
};
throw assertive
{
"'%d' is not a recognized log facility", int(f)
"'%d' is not a recognized log level", int(f)
};
}
@ -676,8 +676,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.critical.console.ansi" },
{ "default", default_ansi.at(facility::CRITICAL) },
{ "name", "ircd.log.critical.console.ansi" },
{ "default", default_ansi.at(level::CRITICAL) },
}
},
@ -715,8 +715,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.error.console.ansi" },
{ "default", default_ansi.at(facility::ERROR) },
{ "name", "ircd.log.error.console.ansi" },
{ "default", default_ansi.at(level::ERROR) },
}
},
@ -754,8 +754,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.warning.console.ansi" },
{ "default", default_ansi.at(facility::WARNING) },
{ "name", "ircd.log.warning.console.ansi" },
{ "default", default_ansi.at(level::WARNING) },
}
},
@ -793,8 +793,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.notice.console.ansi" },
{ "default", default_ansi.at(facility::NOTICE) },
{ "name", "ircd.log.notice.console.ansi" },
{ "default", default_ansi.at(level::NOTICE) },
}
},
@ -832,8 +832,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.info.console.ansi" },
{ "default", default_ansi.at(facility::INFO) },
{ "name", "ircd.log.info.console.ansi" },
{ "default", default_ansi.at(level::INFO) },
}
},
@ -871,8 +871,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.derror.console.ansi" },
{ "default", default_ansi.at(facility::DERROR) },
{ "name", "ircd.log.derror.console.ansi" },
{ "default", default_ansi.at(level::DERROR) },
}
},
@ -910,8 +910,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.dwarning.console.ansi" },
{ "default", default_ansi.at(facility::DWARNING) },
{ "name", "ircd.log.dwarning.console.ansi" },
{ "default", default_ansi.at(level::DWARNING) },
}
},
@ -949,8 +949,8 @@ ircd::log::confs
// console ansi
{
{ "name", "ircd.log.debug.console.ansi" },
{ "default", default_ansi.at(facility::DEBUG) },
{ "name", "ircd.log.debug.console.ansi" },
{ "default", default_ansi.at(level::DEBUG) },
}
}
}};

View File

@ -1100,20 +1100,20 @@ ircd::resource::response::response(client &client,
};
#ifdef RB_DEBUG
const log::facility facility
const log::level level
{
ushort(code) >= 200 && ushort(code) < 300?
log::facility::DEBUG:
log::level::DEBUG:
ushort(code) >= 300 && ushort(code) < 400?
log::facility::DWARNING:
log::level::DWARNING:
ushort(code) >= 400 && ushort(code) < 500?
log::facility::DERROR:
log::facility::ERROR
log::level::DERROR:
log::level::ERROR
};
log::logf
{
log, facility,
log, level,
"%s HTTP %d `%s' %s in %ld$us; %s content-length:%s",
client.loghead(),
uint(code),

View File

@ -491,13 +491,13 @@ console_cmd__log__level(opt &out, const string_view &line)
if(!param.count())
{
for(int i(0); i < num_of<log::facility>(); ++i)
for(int i(0); i < num_of<log::level>(); ++i)
if(i > RB_LOG_LEVEL)
out << "[\033[1;40m-\033[0m]: " << reflect(log::facility(i)) << std::endl;
else if(console_enabled(log::facility(i)))
out << "[\033[1;42m+\033[0m]: " << reflect(log::facility(i)) << std::endl;
out << "[\033[1;40m-\033[0m]: " << reflect(log::level(i)) << std::endl;
else if(console_enabled(log::level(i)))
out << "[\033[1;42m+\033[0m]: " << reflect(log::level(i)) << std::endl;
else
out << "[\033[1;41m-\033[0m]: " << reflect(log::facility(i)) << std::endl;
out << "[\033[1;41m-\033[0m]: " << reflect(log::level(i)) << std::endl;
return true;
}
@ -507,18 +507,18 @@ console_cmd__log__level(opt &out, const string_view &line)
param.at<int>(0)
};
for(int i(0); i < num_of<log::facility>(); ++i)
for(int i(0); i < num_of<log::level>(); ++i)
if(i > RB_LOG_LEVEL)
{
out << "[\033[1;40m-\033[0m]: " << reflect(log::facility(i)) << std::endl;
out << "[\033[1;40m-\033[0m]: " << reflect(log::level(i)) << std::endl;
}
else if(i <= level)
{
console_enable(log::facility(i));
out << "[\033[1;42m+\033[0m]: " << reflect(log::facility(i)) << std::endl;
console_enable(log::level(i));
out << "[\033[1;42m+\033[0m]: " << reflect(log::level(i)) << std::endl;
} else {
console_disable(log::facility(i));
out << "[\033[1;41m-\033[0m]: " << reflect(log::facility(i)) << std::endl;
console_disable(log::level(i));
out << "[\033[1;41m-\033[0m]: " << reflect(log::level(i)) << std::endl;
}
return true;
@ -1541,15 +1541,15 @@ try
return true;
}
const log::facility &fac
const log::level &lev
{
log::reflect(param.at("level"))
};
loglevel(database, fac);
loglevel(database, lev);
out << "set logging level of '" << name(database) << "'"
<< " database to '" << reflect(fac) << "'"
<< " database to '" << reflect(lev) << "'"
<< std::endl;
return true;