logging: support context-specific severity
Allow messages to have severity set to INFO or DEBUG depending on the context in which they are made to allow logging important changes made from chronyc or sourcefile, but not spam the system log if those changes are normally expected (e.g. specified in the config).
This commit is contained in:
parent
7b97668319
commit
b328c8c348
4 changed files with 51 additions and 0 deletions
4
cmdmon.c
4
cmdmon.c
|
@ -1515,6 +1515,8 @@ read_from_cmd_socket(int sock_fd, int event, void *anything)
|
|||
}
|
||||
|
||||
if (allowed) {
|
||||
LOG_SetContext(LOGC_Command);
|
||||
|
||||
switch(rx_command) {
|
||||
case REQ_NULL:
|
||||
/* Do nothing */
|
||||
|
@ -1762,6 +1764,8 @@ read_from_cmd_socket(int sock_fd, int event, void *anything)
|
|||
tx_message.status = htons(STT_FAILED);
|
||||
break;
|
||||
}
|
||||
|
||||
LOG_UnsetContext(LOGC_Command);
|
||||
} else {
|
||||
tx_message.status = htons(STT_UNAUTH);
|
||||
}
|
||||
|
|
4
conf.c
4
conf.c
|
@ -1704,6 +1704,8 @@ reload_source_dirs(void)
|
|||
new_ids = ARR_GetElements(ntp_source_ids);
|
||||
unresolved = 0;
|
||||
|
||||
LOG_SetContext(LOGC_SourceFile);
|
||||
|
||||
qsort(new_sources, new_size, sizeof (new_sources[0]), compare_sources);
|
||||
|
||||
for (i = j = 0; i < prev_size || j < new_size; ) {
|
||||
|
@ -1739,6 +1741,8 @@ reload_source_dirs(void)
|
|||
}
|
||||
}
|
||||
|
||||
LOG_UnsetContext(LOGC_SourceFile);
|
||||
|
||||
for (i = 0; i < prev_size; i++)
|
||||
Free(prev_sources[i].params.name);
|
||||
Free(prev_sources);
|
||||
|
|
29
logging.c
29
logging.c
|
@ -39,6 +39,9 @@
|
|||
/* This is used by DEBUG_LOG macro */
|
||||
LOG_Severity log_min_severity = LOGS_INFO;
|
||||
|
||||
/* Current logging contexts */
|
||||
static LOG_Context log_contexts;
|
||||
|
||||
/* ================================================== */
|
||||
/* Flag indicating we have initialised */
|
||||
static int initialised = 0;
|
||||
|
@ -72,6 +75,8 @@ void
|
|||
LOG_Initialise(void)
|
||||
{
|
||||
debug_prefix = Strdup("");
|
||||
log_contexts = 0;
|
||||
|
||||
initialised = 1;
|
||||
LOG_OpenFileLog(NULL);
|
||||
}
|
||||
|
@ -237,6 +242,30 @@ LOG_GetMinSeverity(void)
|
|||
|
||||
/* ================================================== */
|
||||
|
||||
void
|
||||
LOG_SetContext(LOG_Context context)
|
||||
{
|
||||
log_contexts |= context;
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
void
|
||||
LOG_UnsetContext(LOG_Context context)
|
||||
{
|
||||
log_contexts &= ~context;
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
LOG_Severity
|
||||
LOG_GetContextSeverity(LOG_Context contexts)
|
||||
{
|
||||
return log_contexts & contexts ? LOGS_INFO : LOGS_DEBUG;
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
void
|
||||
LOG_SetDebugPrefix(const char *prefix)
|
||||
{
|
||||
|
|
14
logging.h
14
logging.h
|
@ -100,6 +100,20 @@ extern void LOG_SetMinSeverity(LOG_Severity severity);
|
|||
/* Get the minimum severity */
|
||||
extern LOG_Severity LOG_GetMinSeverity(void);
|
||||
|
||||
/* Flags for info messages that should be logged only in specific contexts */
|
||||
typedef enum {
|
||||
LOGC_Command = 1,
|
||||
LOGC_SourceFile = 2,
|
||||
} LOG_Context;
|
||||
|
||||
/* Modify current contexts */
|
||||
extern void LOG_SetContext(LOG_Context context);
|
||||
extern void LOG_UnsetContext(LOG_Context context);
|
||||
|
||||
/* Get severity depending on the current active contexts: INFO if they contain
|
||||
at least one of the specified contexts, DEBUG otherwise */
|
||||
extern LOG_Severity LOG_GetContextSeverity(LOG_Context contexts);
|
||||
|
||||
/* Set a prefix for debug messages */
|
||||
extern void LOG_SetDebugPrefix(const char *prefix);
|
||||
|
||||
|
|
Loading…
Reference in a new issue