mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge pull request #1726 from profanity-im/feat/1627-change-log-level
Switch log level while running
This commit is contained in:
commit
2aade0db2d
@ -151,6 +151,7 @@ static Autocomplete notify_trigger_ac;
|
|||||||
static Autocomplete prefs_ac;
|
static Autocomplete prefs_ac;
|
||||||
static Autocomplete sub_ac;
|
static Autocomplete sub_ac;
|
||||||
static Autocomplete log_ac;
|
static Autocomplete log_ac;
|
||||||
|
static Autocomplete log_level_ac;
|
||||||
static Autocomplete autoaway_ac;
|
static Autocomplete autoaway_ac;
|
||||||
static Autocomplete autoaway_mode_ac;
|
static Autocomplete autoaway_mode_ac;
|
||||||
static Autocomplete autoaway_presence_ac;
|
static Autocomplete autoaway_presence_ac;
|
||||||
@ -391,6 +392,13 @@ cmd_ac_init(void)
|
|||||||
autocomplete_add(log_ac, "rotate");
|
autocomplete_add(log_ac, "rotate");
|
||||||
autocomplete_add(log_ac, "shared");
|
autocomplete_add(log_ac, "shared");
|
||||||
autocomplete_add(log_ac, "where");
|
autocomplete_add(log_ac, "where");
|
||||||
|
autocomplete_add(log_ac, "level");
|
||||||
|
|
||||||
|
log_level_ac = autocomplete_new();
|
||||||
|
autocomplete_add(log_level_ac, "WARN");
|
||||||
|
autocomplete_add(log_level_ac, "INFO");
|
||||||
|
autocomplete_add(log_level_ac, "DEBUG");
|
||||||
|
autocomplete_add(log_level_ac, "ERROR");
|
||||||
|
|
||||||
autoaway_ac = autocomplete_new();
|
autoaway_ac = autocomplete_new();
|
||||||
autocomplete_add(autoaway_ac, "mode");
|
autocomplete_add(autoaway_ac, "mode");
|
||||||
@ -1353,6 +1361,7 @@ cmd_ac_reset(ProfWin* window)
|
|||||||
autocomplete_reset(who_roster_ac);
|
autocomplete_reset(who_roster_ac);
|
||||||
autocomplete_reset(prefs_ac);
|
autocomplete_reset(prefs_ac);
|
||||||
autocomplete_reset(log_ac);
|
autocomplete_reset(log_ac);
|
||||||
|
autocomplete_reset(log_level_ac);
|
||||||
autocomplete_reset(commands_ac);
|
autocomplete_reset(commands_ac);
|
||||||
autocomplete_reset(autoaway_ac);
|
autocomplete_reset(autoaway_ac);
|
||||||
autocomplete_reset(autoaway_mode_ac);
|
autocomplete_reset(autoaway_mode_ac);
|
||||||
@ -1533,6 +1542,7 @@ cmd_ac_uninit(void)
|
|||||||
autocomplete_free(sub_ac);
|
autocomplete_free(sub_ac);
|
||||||
autocomplete_free(wintitle_ac);
|
autocomplete_free(wintitle_ac);
|
||||||
autocomplete_free(log_ac);
|
autocomplete_free(log_ac);
|
||||||
|
autocomplete_free(log_level_ac);
|
||||||
autocomplete_free(prefs_ac);
|
autocomplete_free(prefs_ac);
|
||||||
autocomplete_free(autoaway_ac);
|
autocomplete_free(autoaway_ac);
|
||||||
autocomplete_free(autoaway_mode_ac);
|
autocomplete_free(autoaway_mode_ac);
|
||||||
@ -2441,6 +2451,10 @@ _log_autocomplete(ProfWin* window, const char* const input, gboolean previous)
|
|||||||
if (result) {
|
if (result) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
result = autocomplete_param_with_ac(input, "/log level", log_level_ac, TRUE, previous);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
result = autocomplete_param_with_ac(input, "/log", log_ac, TRUE, previous);
|
result = autocomplete_param_with_ac(input, "/log", log_ac, TRUE, previous);
|
||||||
if (result) {
|
if (result) {
|
||||||
return result;
|
return result;
|
||||||
|
@ -1884,14 +1884,16 @@ static struct cmd_t command_defs[] = {
|
|||||||
"/log where",
|
"/log where",
|
||||||
"/log rotate on|off",
|
"/log rotate on|off",
|
||||||
"/log maxsize <bytes>",
|
"/log maxsize <bytes>",
|
||||||
"/log shared on|off")
|
"/log shared on|off",
|
||||||
|
"/log level INFO|DEBUG|WARN|ERROR")
|
||||||
CMD_DESC(
|
CMD_DESC(
|
||||||
"Manage profanity log settings.")
|
"Manage profanity log settings.")
|
||||||
CMD_ARGS(
|
CMD_ARGS(
|
||||||
{ "where", "Show the current log file location." },
|
{ "where", "Show the current log file location." },
|
||||||
{ "rotate on|off", "Rotate log, default on. Does not take effect if you specified a filename yourself when starting Profanity." },
|
{ "rotate on|off", "Rotate log, default on. Does not take effect if you specified a filename yourself when starting Profanity." },
|
||||||
{ "maxsize <bytes>", "With rotate enabled, specifies the max log size, defaults to 1048580 (1MB)." },
|
{ "maxsize <bytes>", "With rotate enabled, specifies the max log size, defaults to 10485760 (10MB)." },
|
||||||
{ "shared on|off", "Share logs between all instances, default: on. When off, the process id will be included in the log filename. Does not take effect if you specified a filename yourself when starting Profanity." })
|
{ "shared on|off", "Share logs between all instances, default: on. When off, the process id will be included in the log filename. Does not take effect if you specified a filename yourself when starting Profanity." },
|
||||||
|
{"level INFO|DEBUG|WARN|EFFOR", "Set the log level. Default is INFO. Only works with default log file, not with user provided log file during startup via -f." })
|
||||||
CMD_NOEXAMPLES
|
CMD_NOEXAMPLES
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -6495,9 +6495,19 @@ cmd_log(ProfWin* window, const char* const command, gchar** args)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
cons_bad_cmd_usage(command);
|
if (strcmp(subcmd, "level") == 0) {
|
||||||
|
if (g_strcmp0(value, "INFO") == 0 || g_strcmp0(value, "DEBUG") == 0 || g_strcmp0(value, "WARN") == 0 || g_strcmp0(value, "ERROR") == 0) {
|
||||||
|
|
||||||
/* TODO: make 'level' subcommand for debug level */
|
log_level_t prof_log_level = log_level_from_string(value);
|
||||||
|
log_close();
|
||||||
|
log_init(prof_log_level, NULL);
|
||||||
|
|
||||||
|
cons_show("Log level changed to: %s.", value);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cons_bad_cmd_usage(command);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
24
src/log.c
24
src/log.c
@ -89,7 +89,7 @@ static void _free_chat_log(struct dated_chat_log* dated_log);
|
|||||||
static gboolean _key_equals(void* key1, void* key2);
|
static gboolean _key_equals(void* key1, void* key2);
|
||||||
static char* _get_log_filename(const char* const other, const char* const login, GDateTime* dt, gboolean is_room);
|
static char* _get_log_filename(const char* const other, const char* const login, GDateTime* dt, gboolean is_room);
|
||||||
static void _rotate_log_file(void);
|
static void _rotate_log_file(void);
|
||||||
static char* _log_string_from_level(log_level_t level);
|
static char* _log_abbreviation_string_from_level(log_level_t level);
|
||||||
static void _chat_log_chat(const char* const login, const char* const other, const gchar* const msg,
|
static void _chat_log_chat(const char* const login, const char* const other, const gchar* const msg,
|
||||||
chat_log_direction_t direction, GDateTime* timestamp, const char* const resourcepart);
|
chat_log_direction_t direction, GDateTime* timestamp, const char* const resourcepart);
|
||||||
static void _groupchat_log_chat(const gchar* const login, const gchar* const room, const gchar* const nick,
|
static void _groupchat_log_chat(const gchar* const login, const gchar* const room, const gchar* const nick,
|
||||||
@ -189,7 +189,7 @@ log_msg(log_level_t level, const char* const area, const char* const msg)
|
|||||||
if (level >= level_filter && logp) {
|
if (level >= level_filter && logp) {
|
||||||
GDateTime* dt = g_date_time_new_now_local();
|
GDateTime* dt = g_date_time_new_now_local();
|
||||||
|
|
||||||
char* level_str = _log_string_from_level(level);
|
char* level_str = _log_abbreviation_string_from_level(level);
|
||||||
|
|
||||||
gchar* date_fmt = g_date_time_format_iso8601(dt);
|
gchar* date_fmt = g_date_time_format_iso8601(dt);
|
||||||
|
|
||||||
@ -225,6 +225,23 @@ log_level_from_string(char* log_level)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char*
|
||||||
|
log_string_from_level(log_level_t level)
|
||||||
|
{
|
||||||
|
switch (level) {
|
||||||
|
case PROF_LEVEL_ERROR:
|
||||||
|
return "ERROR";
|
||||||
|
case PROF_LEVEL_WARN:
|
||||||
|
return "WARN";
|
||||||
|
case PROF_LEVEL_INFO:
|
||||||
|
return "INFO";
|
||||||
|
case PROF_LEVEL_DEBUG:
|
||||||
|
return "DEBUG";
|
||||||
|
default:
|
||||||
|
return "LOG";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_rotate_log_file(void)
|
_rotate_log_file(void)
|
||||||
{
|
{
|
||||||
@ -700,8 +717,9 @@ _get_log_filename(const char* const other, const char* const login, GDateTime* d
|
|||||||
return logfile_path;
|
return logfile_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// abbreviation string is the prefix thats used in the log file
|
||||||
static char*
|
static char*
|
||||||
_log_string_from_level(log_level_t level)
|
_log_abbreviation_string_from_level(log_level_t level)
|
||||||
{
|
{
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case PROF_LEVEL_ERROR:
|
case PROF_LEVEL_ERROR:
|
||||||
|
@ -63,6 +63,7 @@ void log_warning(const char* const msg, ...);
|
|||||||
void log_error(const char* const msg, ...);
|
void log_error(const char* const msg, ...);
|
||||||
void log_msg(log_level_t level, const char* const area, const char* const msg);
|
void log_msg(log_level_t level, const char* const area, const char* const msg);
|
||||||
log_level_t log_level_from_string(char* log_level);
|
log_level_t log_level_from_string(char* log_level);
|
||||||
|
const char* log_string_from_level(log_level_t level);
|
||||||
|
|
||||||
void log_stderr_init(log_level_t level);
|
void log_stderr_init(log_level_t level);
|
||||||
void log_stderr_close(void);
|
void log_stderr_close(void);
|
||||||
|
@ -2018,6 +2018,10 @@ cons_log_setting(void)
|
|||||||
cons_show("Shared log (/log shared) : ON");
|
cons_show("Shared log (/log shared) : ON");
|
||||||
else
|
else
|
||||||
cons_show("Shared log (/log shared) : OFF");
|
cons_show("Shared log (/log shared) : OFF");
|
||||||
|
|
||||||
|
log_level_t filter = log_get_filter();
|
||||||
|
const gchar* level = log_string_from_level(filter);
|
||||||
|
cons_show("Log level (/log level) : %s", level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user