libutil: disable direct access to logger verbosity

that way we can sync it with rust for nearly free.

Change-Id: Ib3f1e0335884e077a0293f4b13c5919297748522
This commit is contained in:
eldritch horrors
2026-06-28 13:01:45 +00:00
parent 91663cca2d
commit c5bcb9a312
20 changed files with 64 additions and 45 deletions
+1 -1
View File
@@ -362,7 +362,7 @@ static int main_build_remote(AsyncIoRoot & aio, std::string programName, Strings
if (argv.size() != 1)
throw UsageError("called without required arguments");
verbosity = (Verbosity) std::stoll(argv.front());
setVerbosity((Verbosity) std::stoll(argv.front()));
auto conn = aio.kj.lowLevelProvider->wrapUnixSocketFd(1);
capnp::TwoPartyServer srv(kj::heap<Instance>());
+1 -1
View File
@@ -35,7 +35,7 @@ static int main_builtin_builder(AsyncIoRoot & aio, std::string programName, Stri
};
if (auto val = string2Int<int>(getArg("verbosity"))) {
verbosity = verbosityFromIntClamped(*val);
setVerbosity(verbosityFromIntClamped(*val));
} else {
throw Error("expected a verbosity argument");
}
+1 -1
View File
@@ -948,7 +948,7 @@ opServe(std::shared_ptr<Store> store, AsyncIoRoot & aio, Strings opFlags, String
auto getBuildSettings = [&]() {
// FIXME: changing options here doesn't work if we're
// building through the daemon.
verbosity = lvlError;
setVerbosity(lvlError);
settings.keepLog.override(false);
settings.useSubstitutes.override(false);
settings.maxSilentTime.override(readNum<unsigned>(in));
+3 -3
View File
@@ -16,21 +16,21 @@ MixCommonArgs::MixCommonArgs(const std::string & programName)
.shortName = 'v',
.description = "Increase the logging verbosity level.",
.category = loggingCategory,
.handler = {[]() { verbosity = verbosityFromIntClamped(int(verbosity) + 1); }},
.handler = {[]() { setVerbosity(verbosityFromIntClamped(int(getVerbosity()) + 1)); }},
});
addFlag({
.longName = "quiet",
.description = "Decrease the logging verbosity level.",
.category = loggingCategory,
.handler = {[]() { verbosity = verbosityFromIntClamped(int(verbosity) - 1); }},
.handler = {[]() { setVerbosity(verbosityFromIntClamped(int(getVerbosity()) - 1)); }},
});
addFlag({
.longName = "debug",
.description = "Set the logging verbosity level to 'debug'.",
.category = loggingCategory,
.handler = {[]() { verbosity = lvlDebug; }},
.handler = {[]() { setVerbosity(lvlDebug); }},
});
addFlag({
+3 -2
View File
@@ -106,7 +106,7 @@ bool ProgressBar::isVerbose()
Logger::BufferState ProgressBar::log(Verbosity lvl, std::string_view s)
{
if (lvl > verbosity) {
if (lvl > getVerbosity()) {
return BufferState::HasSpace;
}
auto state(state_.lock());
@@ -142,8 +142,9 @@ Logger::BufferState ProgressBar::startActivityImpl(
{
auto state(state_.lock());
if (lvl <= verbosity && !s.empty() && type != actBuildWaiting)
if (lvl <= getVerbosity() && !s.empty() && type != actBuildWaiting) {
(void) log(*state, lvl, s + "...");
}
state->activities.emplace_back(ActInfo {
.s = s,
+1 -1
View File
@@ -75,7 +75,7 @@ try {
auto buildHook = canonPath(buildHookArgs.front());
buildHookArgs.emplace(std::next(buildHookArgs.begin()), baseNameOf(buildHook));
buildHookArgs.push_back(std::to_string(verbosity));
buildHookArgs.push_back(std::to_string(getVerbosity()));
/* Create the communication pipes. */
auto [selfRPC, hookRPC] = SocketPair::stream();
+2 -2
View File
@@ -897,7 +897,7 @@ try {
if (drv->isBuiltin()) {
args.push_back("builtin-builder");
args.push_back(std::to_string(verbosity));
args.push_back(std::to_string(getVerbosity()));
std::map<std::string, AbstractConfig::SettingInfo> changedSettings;
globalConfig.getChangedSettings(changedSettings);
@@ -984,7 +984,7 @@ try {
auto groups = buildUser->getSupplementaryGIDs();
creds.setSupplementaryGroups({groups.data(), groups.size()});
}
request.setDebug(verbosity >= lvlDebug);
request.setDebug(getVerbosity() >= lvlDebug);
fillBuilderConfig(request);
+3 -3
View File
@@ -95,7 +95,7 @@ struct TunnelLogger : public Logger
BufferState log(Verbosity lvl, std::string_view s) override
{
if (lvl > verbosity) {
if (lvl > getVerbosity()) {
return BufferState::HasSpace;
}
@@ -106,7 +106,7 @@ struct TunnelLogger : public Logger
BufferState logEI(const ErrorInfo & ei) override
{
if (ei.level > verbosity) {
if (ei.level > getVerbosity()) {
return BufferState::HasSpace;
}
@@ -195,7 +195,7 @@ struct ClientSettings
settings.keepFailed.override(keepFailed);
settings.keepGoing.override(keepGoing);
settings.tryFallback.override(tryFallback);
nix::verbosity = verbosity;
setVerbosity(verbosity);
settings.maxBuildJobs.override(maxBuildJobs);
settings.maxSilentTime.override(maxSilentTime);
settings.verboseBuild = verboseBuild;
+1 -1
View File
@@ -177,7 +177,7 @@ struct TransferItem
}
}
if (verbosity >= lvlVomit) {
if (getVerbosity() >= lvlVomit) {
curl_easy_setopt(req.get(), CURLOPT_VERBOSE, 1);
curl_easy_setopt(req.get(), CURLOPT_DEBUGFUNCTION, TransferItem::debugCallback);
}
+3 -1
View File
@@ -127,11 +127,12 @@ kj::Promise<Result<void>> RemoteStore::setOptions(Connection & conn)
try {
StringSink command;
// clang-format off
command << WorkerProto::Op::SetOptions
<< settings.keepFailed
<< settings.keepGoing
<< settings.tryFallback
<< verbosity
<< getVerbosity()
<< settings.maxBuildJobs
<< settings.maxSilentTime
<< true
@@ -140,6 +141,7 @@ try {
<< 0 /* obsolete print build trace */
<< settings.buildCores
<< settings.useSubstitutes;
// clang-format on
std::map<std::string, Config::SettingInfo> overrides;
settings.getSettings(overrides, true); // libstore settings
+6 -4
View File
@@ -97,7 +97,10 @@ class AwsLogger : public Aws::Utils::Logging::FormattedLogSystem
void ProcessFormattedStatement(Aws::String && statement) override
{
// FIXME: workaround for truly excessive log spam in debug level: https://github.com/aws/aws-sdk-cpp/pull/3003
if ((statement.find("(SSLDataIn)") != std::string::npos || statement.find("(SSLDataOut)") != std::string::npos) && verbosity <= lvlDebug) {
if ((statement.find("(SSLDataIn)") != std::string::npos
|| statement.find("(SSLDataOut)") != std::string::npos)
&& getVerbosity() <= lvlDebug)
{
return;
}
debug("AWS: %s", chomp(statement));
@@ -116,9 +119,8 @@ static void initAWS()
shared.cc), so don't let aws-sdk-cpp override it. */
options.cryptoOptions.initAndCleanupOpenSSL = false;
if (verbosity >= lvlDebug) {
options.loggingOptions.logLevel =
verbosity == lvlDebug
if (getVerbosity() >= lvlDebug) {
options.loggingOptions.logLevel = getVerbosity() == lvlDebug
? Aws::Utils::Logging::LogLevel::Debug
: Aws::Utils::Logging::LogLevel::Trace;
options.loggingOptions.logger_create_fn = [options]() {
+1 -1
View File
@@ -100,7 +100,7 @@ void RootArgs::parseCmdline(const Strings & _cmdline)
throw UsageError("Invalid word number to get completion for: %zu\n. Your autocompletions might be misconfigured", n);
*std::next(cmdline.begin(), n - 1) += completionMarker;
completions = std::make_shared<Completions>();
verbosity = lvlError;
setVerbosity(lvlError);
}
for (auto pos = cmdline.begin(); pos != cmdline.end(); ) {
+8 -3
View File
@@ -76,7 +76,7 @@ public:
BufferState log(Verbosity lvl, std::string_view s) override
{
if (lvl > verbosity) {
if (lvl > getVerbosity()) {
return BufferState::HasSpace;
}
@@ -116,7 +116,7 @@ public:
ActivityId parent
) override
{
if (lvl <= verbosity && !s.empty()) {
if (lvl <= getVerbosity() && !s.empty()) {
return log(lvl, s + "...");
}
return BufferState::HasSpace;
@@ -136,7 +136,12 @@ public:
}
};
Verbosity verbosity = lvlInfo;
Verbosity detail::verbosity = lvlInfo;
void setVerbosity(Verbosity v)
{
detail::verbosity = v;
}
Verbosity verbosityFromIntClamped(int val)
{
+13 -5
View File
@@ -319,10 +319,19 @@ Logger * makeSimpleLogger(bool printBuildLogs = true);
Logger * makeJSONLogger(Logger & prevLogger);
namespace detail {
extern Verbosity verbosity;
}
inline Verbosity getVerbosity()
{
return detail::verbosity;
}
/**
* suppress msgs > this
*/
extern Verbosity verbosity;
void setVerbosity(Verbosity v);
extern LoggerSettings loggerSettings;
@@ -388,7 +397,7 @@ extern LoggerSettings loggerSettings;
*/
#define logErrorInfo(level, errorInfo...) \
do { \
if ((level) <= ::nix::verbosity) { \
if ((level) <= ::nix::detail::verbosity) { \
(void) ::nix::logger->logEI((level), errorInfo); \
} \
} while (0)
@@ -405,9 +414,8 @@ extern LoggerSettings loggerSettings;
do { \
auto _lix_logger_print_lvl = level; \
const char * _lix_format = []<size_t N>(const char (&_lix_fs)[N]) { return _lix_fs; }(fs); \
if (_lix_logger_print_lvl <= ::nix::verbosity) { \
(void \
) loggerParam->log(_lix_logger_print_lvl, ::nix::HintFmt(_lix_format, ##args).str()); \
if (_lix_logger_print_lvl <= ::nix::detail::verbosity) { \
(void) loggerParam->log(_lix_logger_print_lvl, ::nix::HintFmt(_lix_format, ##args).str()); \
} \
} while (0)
#define printMsg(level, fs, args...) printMsgUsing(::nix::logger, level, fs, ##args)
+2 -2
View File
@@ -393,7 +393,7 @@ try {
"--for",
peer.pid ? fmt("%1%", *peer.pid) : "unknown",
"--log-level",
fmt("%1%", int(verbosity)),
fmt("%1%", int(getVerbosity())),
"--protocol",
std::string(socket.id()),
},
@@ -687,7 +687,7 @@ main_nix_daemon(AsyncIoRoot & aio, std::string programName, Strings argv, std::s
}).parseCmdline(argv);
if (isInstance) {
verbosity = Verbosity(std::min<uint64_t>(subdaemonLogLevel, lvlVomit));
setVerbosity(Verbosity(std::min<uint64_t>(subdaemonLogLevel, lvlVomit)));
daemonInstance(daemon::getProtocol(protocol), aio, isTrustedOpt, peerPidArg);
} else {
runDaemon(aio, stdio, isTrustedOpt);
+2 -1
View File
@@ -599,8 +599,9 @@ struct CmdDevelop : Common, MixEnvironment
auto script = makeRcScript(*state, store, buildEnvironment, (Path) tmpDir);
if (verbosity >= lvlDebug)
if (getVerbosity() >= lvlDebug) {
script += "set -x\n";
}
script += fmt("command rm -f '%s'\n", rcFilePath);
+2 -2
View File
@@ -505,9 +505,9 @@ int mainWrapped(AsyncIoRoot & aio, int argc, char ** argv)
// FIXME: stop messing about with log verbosity depending on if it is interactive use
if (isatty(STDERR_FILENO)) {
verbosity = lvlNotice;
setVerbosity(lvlNotice);
} else {
verbosity = lvlInfo;
setVerbosity(lvlInfo);
}
registerCommands();
+1 -1
View File
@@ -78,7 +78,7 @@ void init()
void setVerbosity(int level)
CODE:
verbosity = (Verbosity) level;
setVerbosity((Verbosity) level);
int isValidPath(char * path)
+1 -1
View File
@@ -445,7 +445,7 @@ TEST(FileTransfer, DISABLED_interrupt)
}
};
verbosity = lvlDebug;
setVerbosity(lvlDebug);
logger = new InterruptingLogger;
AsyncIoRoot aio;
+4 -4
View File
@@ -102,7 +102,7 @@ namespace nix {
}
TEST(logEI, loggingErrorOnTalkativeLevel) {
verbosity = lvlTalkative;
setVerbosity(lvlTalkative);
testing::internal::CaptureStderr();
@@ -115,7 +115,7 @@ namespace nix {
}
TEST(logEI, loggingErrorOnChattyLevel) {
verbosity = lvlChatty;
setVerbosity(lvlChatty);
testing::internal::CaptureStderr();
@@ -128,7 +128,7 @@ namespace nix {
}
TEST(logEI, loggingErrorOnDebugLevel) {
verbosity = lvlDebug;
setVerbosity(lvlDebug);
testing::internal::CaptureStderr();
@@ -141,7 +141,7 @@ namespace nix {
}
TEST(logEI, loggingErrorOnVomitLevel) {
verbosity = lvlVomit;
setVerbosity(lvlVomit);
testing::internal::CaptureStderr();