13 actFileTransfer = 101,
25 actOptimiseStore = 106,
44 actBuildWaiting = 111,
60 resUntrustedPath = 102,
61 resCorruptedPath = 103,
91typedef uint64_t ActivityId;
95 #include "logging-settings.gen.inc"
102 friend struct Activity;
109 enum { tInt = 0, tString = 1 } type;
112 Field(
const std::string & s) : type(tString), s(s) { }
113 Field(
const char * s) : type(tString), s(s) { }
114 Field(
const uint64_t & i) : type(tInt), i(i) { }
117 typedef std::vector<Field> Fields;
121 virtual void pause() { };
122 virtual void resetProgress() { };
123 virtual void resume() { };
126 virtual bool isVerbose() {
return false; }
128 virtual void log(Verbosity lvl, std::string_view s) = 0;
130 void log(std::string_view s)
135 virtual void logEI(
const ErrorInfo & ei) = 0;
137 void logEI(Verbosity lvl, ErrorInfo ei)
143 virtual void warn(
const std::string & msg);
145 virtual void startActivity(ActivityId act, Verbosity lvl, ActivityType type,
146 const std::string & s,
const Fields & fields, ActivityId parent) { };
148 virtual void stopActivity(ActivityId act) { };
150 virtual void result(ActivityId act, ResultType type,
const Fields & fields) { };
152 virtual void writeToStdout(std::string_view s);
154 template<
typename... Args>
155 inline void cout(
const Args & ... args)
157 writeToStdout(
fmt(args...));
160 virtual std::optional<char> ask(std::string_view s)
163 virtual void setPrintBuildLogs(
bool printBuildLogs)
166 virtual void setPrintMultiline(
bool printMultiline)
177 template<
typename... T> nop(T...)
181ActivityId getCurActivity();
182void setCurActivity(
const ActivityId activityId);
190 Activity(Logger & logger, Verbosity lvl,
ActivityType type,
const std::string & s =
"",
191 const Logger::Fields & fields = {}, ActivityId parent = getCurActivity());
194 const Logger::Fields & fields = {}, ActivityId parent = getCurActivity())
195 : Activity(logger, lvlError, type,
"", fields, parent) { };
197 Activity(
const Activity & act) =
delete;
201 void progress(uint64_t done = 0, uint64_t expected = 0, uint64_t running = 0, uint64_t failed = 0)
const
202 { result(
resProgress, done, expected, running, failed); }
204 void setExpected(
ActivityType type2, uint64_t expected)
const
207 template<
typename...
Args>
210 Logger::Fields fields;
212 result(type, fields);
215 void result(
ResultType type,
const Logger::Fields & fields)
const
217 logger.result(
id, type, fields);
225 std::optional<ActivityId> prevAct;
228 PushActivity(ActivityId act) : prevAct(getCurActivity())
233 PushActivity(PushActivity && other)
235 std::swap(prevAct, other.prevAct);
238 PushActivity & operator=(PushActivity && other)
240 auto tmp(std::move(other));
241 std::swap(prevAct, tmp.prevAct);
248 setCurActivity(*prevAct);
255Logger * makeSimpleLogger(
bool printBuildLogs =
true);
262extern Verbosity verbosity;
270#define logErrorInfo(level, errorInfo...) \
272 if ((level) <= nix::verbosity) { \
273 logger->logEI((level), errorInfo); \
277#define logError(errorInfo...) logErrorInfo(lvlError, errorInfo)
278#define logWarning(errorInfo...) logErrorInfo(lvlWarn, errorInfo)
285#define printMsgUsing(loggerParam, level, args...) \
287 auto _lix_logger_print_lvl = level; \
288 if (_lix_logger_print_lvl <= nix::verbosity) { \
289 loggerParam->log(_lix_logger_print_lvl, fmt(args)); \
292#define printMsg(level, args...) printMsgUsing(logger, level, args)
294#define printError(args...) printMsg(lvlError, args)
295#define notice(args...) printMsg(lvlNotice, args)
296#define printInfo(args...) printMsg(lvlInfo, args)
297#define printTalkative(args...) printMsg(lvlTalkative, args)
298#define debug(args...) printMsg(lvlDebug, args)
299#define vomit(args...) printMsg(lvlVomit, args)
304template<
typename... Args>
305inline void warn(
const std::string & fs,
const Args & ... args)
307 logger->warn(
HintFmt(fs, args...).str());
310void writeLogsToStderr(std::string_view s);
314void logFatal(std::string
const & s);
319std::optional<JSON> parseJSONMessage(
const std::string & msg, std::string_view source);
324bool handleJSONLogMessage(JSON & json,
325 const Activity & act, std::map<ActivityId, Activity> & activities,
326 std::string_view source,
332bool handleJSONLogMessage(
const std::string & msg,
333 const Activity & act, std::map<ActivityId, Activity> & activities,
334 std::string_view source,
Definition logging.hh:101
This file defines two main structs/classes used in nix error handling.
std::string fmt(const std::string &s)
Definition fmt.hh:127
void warn(const std::string &fs, const Args &... args)
Definition logging.hh:305
ActivityType
Definition logging.hh:10
@ actBuild
Definition logging.hh:24
@ actQueryPathInfo
Definition logging.hh:38
@ actSubstitute
Definition logging.hh:32
@ actPostBuildHook
Definition logging.hh:43
ResultType
Definition logging.hh:50
@ resPostBuildLogLine
Definition logging.hh:85
@ resBuildLogLine
Definition logging.hh:59
@ resSetPhase
Definition logging.hh:66
@ resProgress
Definition logging.hh:74
@ resFileLinked
Definition logging.hh:54
@ resSetExpected
Definition logging.hh:80
Definition logging.hh:107
Definition json-fwd.hh:21
Definition logging.hh:176