Log to file improvements

This commit is contained in:
jdgleaver 2019-03-21 16:56:24 +00:00
parent 538576e6f9
commit 93506a0d18
17 changed files with 212 additions and 49 deletions

View File

@ -439,11 +439,7 @@ static bool menu_swap_ok_cancel_buttons = false;
static bool quit_press_twice = false;
#if defined(ANDROID)
static bool default_log_to_file = true;
#else
static bool default_log_to_file = false;
#endif
/* Crop overscanned frames. */
static const bool crop_overscan = true;
@ -922,6 +918,4 @@ static char buildbot_assets_server_url[] = "http://buildbot.libretro.com/assets/
static char default_discord_app_id[] = "475456035851599874";
static char default_log_file[] = "retroarch.log";
#endif

View File

@ -1310,8 +1310,7 @@ static struct config_path_setting *populate_settings_path(settings_t *settings,
global->record.config_dir, false, NULL, true);
}
SETTING_ARRAY("log_file", settings->paths.log_file, true, default_log_file, true);
SETTING_ARRAY("log_dir", settings->paths.log_dir, true, "", true);
SETTING_ARRAY("log_dir", settings->paths.log_dir, true, NULL, true);
*size = count;
@ -1594,6 +1593,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
#ifdef HAVE_OZONE
SETTING_BOOL("ozone_collapse_sidebar", &settings->bools.ozone_collapse_sidebar, true, ozone_collapse_sidebar, false);
#endif
SETTING_BOOL("log_to_file", &settings->bools.log_to_file, true, default_log_to_file, false);
*size = count;
@ -1961,12 +1961,6 @@ void config_set_defaults(void)
strlcpy(settings->arrays.discord_app_id,
default_discord_app_id, sizeof(settings->arrays.discord_app_id));
strlcpy(settings->paths.log_file,
default_log_file, sizeof(settings->paths.log_file));
strlcpy(settings->paths.log_dir,
g_defaults.dirs[DEFAULT_DIR_LOGS], sizeof(settings->paths.log_dir));
#ifdef HAVE_MATERIALUI
if (g_defaults.menu.materialui.menu_color_theme_enable)
settings->uints.menu_materialui_color_theme = g_defaults.menu.materialui.menu_color_theme;
@ -2128,6 +2122,8 @@ void config_set_defaults(void)
*settings->paths.directory_content_history = '\0';
*settings->paths.path_audio_dsp_plugin = '\0';
*settings->paths.log_dir = '\0';
video_driver_default_settings();
if (!string_is_empty(g_defaults.dirs[DEFAULT_DIR_WALLPAPERS]))
@ -3160,6 +3156,20 @@ static bool config_load_file(const char *path, bool set_defaults,
if (string_is_equal(settings->paths.directory_system, "default"))
*settings->paths.directory_system = '\0';
/* Log directory is a special case, since it must contain
* a valid path as soon as possible - if config file
* value is 'default' must copy g_defaults.dirs[DEFAULT_DIR_LOGS]
* directly... */
if (string_is_equal(settings->paths.log_dir, "default"))
{
if (!string_is_empty(g_defaults.dirs[DEFAULT_DIR_LOGS]))
strlcpy(settings->paths.log_dir,
g_defaults.dirs[DEFAULT_DIR_LOGS],
sizeof(settings->paths.log_dir));
else
*settings->paths.log_dir = '\0';
}
if (settings->floats.slowmotion_ratio < 1.0f)
configuration_set_float(settings, settings->floats.slowmotion_ratio, 1.0f);

View File

@ -594,7 +594,6 @@ typedef struct settings
char streaming_title[PATH_MAX_LENGTH];
char log_dir[PATH_MAX_LENGTH];
char log_file[PATH_MAX_LENGTH];
} paths;
bool modified;

View File

@ -94,7 +94,9 @@ enum file_path_enum
FILE_PATH_XM_EXTENSION,
FILE_PATH_CONFIG_EXTENSION,
FILE_PATH_CORE_INFO_EXTENSION,
FILE_PATH_RUNTIME_EXTENSION
FILE_PATH_RUNTIME_EXTENSION,
FILE_PATH_DEFAULT_EVENT_LOG,
FILE_PATH_EVENT_LOG_EXTENSION
};
enum application_special_type

View File

@ -227,6 +227,12 @@ const char *file_path_str(enum file_path_enum enum_idx)
case FILE_PATH_RUNTIME_EXTENSION:
str = ".lrtl";
break;
case FILE_PATH_DEFAULT_EVENT_LOG:
str = "retroarch.log";
break;
case FILE_PATH_EVENT_LOG_EXTENSION:
str = ".log";
break;
case FILE_PATH_UNKNOWN:
default:
break;

View File

@ -1920,6 +1920,8 @@ static void frontend_unix_get_env(int *argc,
"screenshots", sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS], base_path,
"thumbnails", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], base_path,
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
#endif
for (i = 0; i < DEFAULT_DIR_LAST; i++)

View File

@ -647,6 +647,8 @@ MSG_HASH(MENU_ENUM_LABEL_LOGGING_SETTINGS,
"logging_settings")
MSG_HASH(MENU_ENUM_LABEL_LOG_VERBOSITY,
"log_verbosity")
MSG_HASH(MENU_ENUM_LABEL_LOG_TO_FILE,
"log_to_file")
MSG_HASH(MENU_ENUM_LABEL_MAIN_MENU,
"main_menu")
MSG_HASH(MENU_ENUM_LABEL_MANAGEMENT,
@ -1811,3 +1813,5 @@ MSG_HASH(MENU_ENUM_LABEL_VIBRATE_ON_KEYPRESS,
"vibrate_on_keypress")
MSG_HASH(MENU_ENUM_LABEL_ENABLE_DEVICE_VIBRATION,
"enable_device_vibration")
MSG_HASH(MENU_ENUM_LABEL_LOG_DIR,
"log_dir")

View File

@ -1616,6 +1616,14 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY,
"Logging Verbosity"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_LOG_TO_FILE,
"Log To File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_LOG_TO_FILE,
"Redirects system event log messages to file. Requires 'Logging Verbosity' to be enabled."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MAIN_MENU,
"Main Menu"
@ -8494,3 +8502,11 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_ENABLE_DEVICE_VIBRATION,
"Enable device vibration (for supported cores)"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_LOG_DIR,
"System Event Logs"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_LOG_DIR,
"Save system event log files to this directory."
)

View File

@ -143,6 +143,8 @@ default_sublabel_macro(action_bind_sublabel_systeminfo_cpu_cores, MENU_
default_sublabel_macro(action_bind_sublabel_toggle_gamepad_combo, MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO)
default_sublabel_macro(action_bind_sublabel_show_hidden_files, MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES)
default_sublabel_macro(action_bind_sublabel_log_verbosity, MENU_ENUM_SUBLABEL_LOG_VERBOSITY)
default_sublabel_macro(action_bind_sublabel_log_to_file, MENU_ENUM_SUBLABEL_LOG_TO_FILE)
default_sublabel_macro(action_bind_sublabel_log_dir, MENU_ENUM_SUBLABEL_LOG_DIR)
default_sublabel_macro(action_bind_sublabel_video_monitor_index, MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX)
default_sublabel_macro(action_bind_sublabel_video_refresh_rate_auto, MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO)
default_sublabel_macro(action_bind_sublabel_video_hard_sync, MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC)
@ -2129,6 +2131,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_LOG_VERBOSITY:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_verbosity);
break;
case MENU_ENUM_LABEL_LOG_TO_FILE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_to_file);
break;
case MENU_ENUM_LABEL_LOG_DIR:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_dir);
break;
case MENU_ENUM_LABEL_SHOW_HIDDEN_FILES:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_show_hidden_files);
break;

View File

@ -213,6 +213,7 @@ default_fill_title_macro(action_get_title_assets_directory, MENU_ENUM_LABE
default_fill_title_macro(action_get_title_extraction_directory, MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY)
default_fill_title_macro(action_get_title_menu, MENU_ENUM_LABEL_VALUE_MENU_SETTINGS)
default_fill_title_macro(action_get_title_font_path, MENU_ENUM_LABEL_VALUE_XMB_FONT)
default_fill_title_macro(action_get_title_log_dir, MENU_ENUM_LABEL_VALUE_LOG_DIR)
default_title_copy_macro(action_get_title_help, MENU_ENUM_LABEL_VALUE_HELP_LIST)
default_title_copy_macro(action_get_title_input_settings, MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS)
@ -715,6 +716,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY:
BIND_ACTION_GET_TITLE(cbs, action_get_title_config_directory);
break;
case MENU_ENUM_LABEL_LOG_DIR:
BIND_ACTION_GET_TITLE(cbs, action_get_title_log_dir);
break;
case MENU_ENUM_LABEL_INFORMATION_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_title_information_list);
break;
@ -1047,6 +1051,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_RGUI_CONFIG_DIRECTORY:
BIND_ACTION_GET_TITLE(cbs, action_get_title_config_directory);
break;
case MENU_LABEL_LOG_DIR:
BIND_ACTION_GET_TITLE(cbs, action_get_title_log_dir);
break;
case MENU_LABEL_INFORMATION_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_title_information_list);
break;

View File

@ -5498,6 +5498,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOG_TO_FILE,
PARSE_ONLY_BOOL, false);
{
settings_t *settings = config_get_ptr();
@ -6735,6 +6738,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CACHE_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOG_DIR,
PARSE_ONLY_DIR, false);
info->need_refresh = true;
info->need_push = true;

View File

@ -3321,11 +3321,33 @@ void general_write_handler(rarch_setting_t *setting)
break;
case MENU_ENUM_LABEL_LOG_VERBOSITY:
if (!verbosity_is_enabled())
{
rarch_log_file_init();
verbosity_enable();
}
else
{
verbosity_disable();
rarch_log_file_deinit();
}
retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL);
break;
case MENU_ENUM_LABEL_LOG_TO_FILE:
if (verbosity_is_enabled())
{
if (settings->bools.log_to_file && !is_logging_to_file())
rarch_log_file_init();
else if (!settings->bools.log_to_file && is_logging_to_file())
rarch_log_file_deinit();
}
break;
case MENU_ENUM_LABEL_LOG_DIR:
if (verbosity_is_enabled() && is_logging_to_file())
{
rarch_log_file_deinit();
rarch_log_file_init();
}
break;
case MENU_ENUM_LABEL_VIDEO_SMOOTH:
video_driver_set_filtering(1, settings->bools.video_smooth);
break;
@ -4938,6 +4960,21 @@ static bool setting_append_list(
&setting_get_string_representation_uint_libretro_log_level;
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
CONFIG_BOOL(
list, list_info,
&settings->bools.log_to_file,
MENU_ENUM_LABEL_LOG_TO_FILE,
MENU_ENUM_LABEL_VALUE_LOG_TO_FILE,
default_log_to_file,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_ADVANCED);
END_SUB_GROUP(list, list_info, parent_group);
START_SUB_GROUP(list, list_info, "Performance Counters", &group_info, &subgroup_info,
@ -11414,6 +11451,21 @@ static bool setting_append_list(
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
CONFIG_DIR(
list, list_info,
settings->paths.log_dir,
sizeof(settings->paths.log_dir),
MENU_ENUM_LABEL_LOG_DIR,
MENU_ENUM_LABEL_VALUE_LOG_DIR,
g_defaults.dirs[DEFAULT_DIR_LOGS],
MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
END_SUB_GROUP(list, list_info, parent_group);
END_GROUP(list, list_info, parent_group);
break;

View File

@ -1393,6 +1393,7 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VOLUME_DOWN,
MENU_LABEL(LOG_VERBOSITY),
MENU_LABEL(LOG_TO_FILE),
MENU_ENUM_LABEL_OVERLAY_NEXT,
@ -1703,6 +1704,7 @@ enum msg_hash_enums
MENU_LABEL(VIDEO_SHADER_DIR),
MENU_LABEL(VIDEO_FILTER_DIR),
MENU_LABEL(AUDIO_FILTER_DIR),
MENU_LABEL(LOG_DIR),
MENU_LABEL(TURBO_DEADZONE_LIST),
MENU_LABEL(LIBRETRO_DIR_PATH),
@ -2477,6 +2479,7 @@ enum msg_hash_enums
#define MENU_LABEL_RGUI_CONFIG_DIRECTORY 0x0cb3e005U
#define MENU_LABEL_ASSETS_DIRECTORY 0xde1ae8ecU
#define MENU_LABEL_CACHE_DIRECTORY 0x851dfb8dU
#define MENU_LABEL_LOG_DIR 0x87BB87E5U
/* RDB settings */

View File

@ -187,7 +187,6 @@ enum
RA_OPT_FEATURES,
RA_OPT_VERSION,
RA_OPT_EOF_EXIT,
RA_OPT_LOG_FILE,
RA_OPT_MAX_FRAMES,
RA_OPT_MAX_FRAMES_SCREENSHOT,
RA_OPT_MAX_FRAMES_SCREENSHOT_PATH
@ -292,6 +291,8 @@ static retro_time_t libretro_core_runtime_usec = 0;
static char runtime_content_path[PATH_MAX_LENGTH] = {0};
static char runtime_core_path[PATH_MAX_LENGTH] = {0};
static bool log_file_created = false;
extern bool input_driver_flushing_input;
static char launch_arguments[4096];
@ -1084,7 +1085,6 @@ static void retroarch_print_help(const char *arg0)
puts(" -h, --help Show this help message.");
puts(" -v, --verbose Verbose logging.");
puts(" --log-file FILE Log messages to FILE.");
puts(" --version Show version.");
puts(" --features Prints available features compiled into "
"program.");
@ -1277,9 +1277,6 @@ static void retroarch_parse_input_and_config(int argc, char *argv[])
{ "max-frames-ss-path", 1, NULL, RA_OPT_MAX_FRAMES_SCREENSHOT_PATH },
{ "eof-exit", 0, NULL, RA_OPT_EOF_EXIT },
{ "version", 0, NULL, RA_OPT_VERSION },
#ifdef HAVE_FILE_LOGGER
{ "log-file", 1, NULL, RA_OPT_LOG_FILE },
#endif
{ NULL, 0, NULL, 0 }
};
@ -1735,12 +1732,6 @@ static void retroarch_parse_input_and_config(int argc, char *argv[])
retroarch_print_version();
exit(0);
#ifdef HAVE_FILE_LOGGER
case RA_OPT_LOG_FILE:
retro_main_log_file_init(optarg);
break;
#endif
case 'c':
case 'h':
case RA_OPT_APPENDCONFIG:
@ -1759,19 +1750,8 @@ static void retroarch_parse_input_and_config(int argc, char *argv[])
}
}
if (verbosity_is_enabled())
{
settings_t *settings = config_get_ptr();
if (settings->bools.log_to_file &&
!string_is_empty(settings->paths.log_dir) && !string_is_empty(settings->paths.log_file))
{
char buf[PATH_MAX_LENGTH];
fill_pathname_join(buf, settings->paths.log_dir, settings->paths.log_file, sizeof(buf));
RARCH_LOG("Logging to file: %s\n", buf);
retro_main_log_file_init(buf);
}
}
rarch_log_file_init();
#ifdef HAVE_GIT_VERSION
RARCH_LOG("RetroArch %s (Git %s)\n",
@ -1975,7 +1955,8 @@ bool retroarch_main_init(int argc, char *argv[])
rarch_error_on_init = true;
retro_main_log_file_init(NULL);
/* Have to initialise non-file logging once at the start... */
retro_main_log_file_init(NULL, false);
retroarch_parse_input_and_config(argc, argv);
@ -1993,8 +1974,8 @@ bool retroarch_main_init(int argc, char *argv[])
RARCH_LOG_OUTPUT("CPU Model Name: %s\n", cpu_model);
retroarch_get_capabilities(RARCH_CAPABILITIES_CPU, str, sizeof(str));
fprintf(stderr, "%s: %s\n", msg_hash_to_str(MSG_CAPABILITIES), str);
fprintf(stderr, "Built: %s\n", __DATE__);
RARCH_LOG_OUTPUT("%s: %s\n", msg_hash_to_str(MSG_CAPABILITIES), str);
RARCH_LOG_OUTPUT("Built: %s\n", __DATE__);
RARCH_LOG_OUTPUT("Version: %s\n", PACKAGE_VERSION);
#ifdef HAVE_GIT_VERSION
RARCH_LOG_OUTPUT("Git: %s\n", retroarch_git_version);
@ -5296,3 +5277,74 @@ finish:
free(info_buf);
#endif
}
void rarch_log_file_init(void)
{
settings_t *settings = config_get_ptr();
FILE *fp = NULL;
bool success = false;
/* If nothing has changed, do nothing */
if ((!settings->bools.log_to_file && !is_logging_to_file()) ||
(settings->bools.log_to_file && is_logging_to_file()))
return;
/* If we are currently logging to file and wish to stop,
* de-initialise existing logger... */
if (!settings->bools.log_to_file && is_logging_to_file())
{
retro_main_log_file_deinit();
/* ...and revert to console */
retro_main_log_file_init(NULL, false);
return;
}
/* If we reach this point, then we are not currently
* logging to file, and wish to do so */
/* > Check whether we are already logging to console */
fp = retro_main_log_file();
if (fp)
{
/* De-initialise existing logger */
retro_main_log_file_deinit();
}
/* > Attempt to initialise log file */
if (!string_is_empty(settings->paths.log_dir))
{
char buf[PATH_MAX_LENGTH];
fill_pathname_join(buf, settings->paths.log_dir, file_path_str(FILE_PATH_DEFAULT_EVENT_LOG), sizeof(buf));
if (!string_is_empty(buf))
{
/* When RetroArch is launched, log file is overwritten.
* On subsequent calls within the same session, it is appended to. */
retro_main_log_file_init(buf, log_file_created);
log_file_created = true;
success = true;
}
}
/* > Fall back to console logging if something went wrong */
if (!success)
retro_main_log_file_init(NULL, false);
}
void rarch_log_file_deinit(void)
{
FILE *fp = NULL;
/* De-initialise existing logger, if currently logging to file */
if (is_logging_to_file())
{
retro_main_log_file_deinit();
}
/* If logging is currently disabled... */
fp = retro_main_log_file();
if (!fp)
{
/* ...initialise logging to console */
retro_main_log_file_init(NULL, false);
}
}

View File

@ -428,6 +428,10 @@ bool rarch_write_debug_info(void);
void rarch_get_cpu_architecture_string(char *cpu_arch_str, size_t len);
void rarch_log_file_init(void);
void rarch_log_file_deinit(void);
RETRO_END_DECLS
#endif

View File

@ -111,7 +111,7 @@ void *retro_main_log_file(void)
return log_file_fp;
}
void retro_main_log_file_init(const char *path)
void retro_main_log_file_init(const char *path, bool append)
{
if (log_file_initialized)
return;
@ -125,7 +125,7 @@ void retro_main_log_file_init(const char *path)
if (path == NULL)
return;
log_file_fp = (FILE*)fopen_utf8(path, "wb");
log_file_fp = (FILE*)fopen_utf8(path, append ? "ab" : "wb");
log_file_initialized = true;
#if !defined(PS2) /* TODO: PS2 IMPROVEMENT */
@ -145,6 +145,8 @@ void retro_main_log_file_deinit(void)
if (log_file_buf)
free(log_file_buf);
log_file_buf = NULL;
log_file_initialized = false;
}
#if !defined(HAVE_LOGGER)
@ -210,11 +212,7 @@ void RARCH_LOG_V(const char *tag, const char *fmt, va_list ap)
#if defined(HAVE_QT) || defined(__WINRT__)
char buffer[1024];
#endif
#ifdef HAVE_FILE_LOGGER
FILE *fp = (FILE*)retro_main_log_file();
#else
FILE *fp = stderr;
#endif
#if defined(HAVE_QT) || defined(__WINRT__)
buffer[0] = '\0';

View File

@ -39,7 +39,7 @@ void *retro_main_log_file(void);
void retro_main_log_file_deinit(void);
void retro_main_log_file_init(const char *path);
void retro_main_log_file_init(const char *path, bool append);
bool is_logging_to_file(void);