Merge pull request #8526 from jdgleaver/log-to-file-update

More 'Log to File' Additions
This commit is contained in:
Twinaphex 2019-03-25 23:57:53 +01:00 committed by GitHub
commit cc07982ee0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 128 additions and 62 deletions

View File

@ -440,6 +440,7 @@ static bool menu_swap_ok_cancel_buttons = false;
static bool quit_press_twice = false;
static bool default_log_to_file = false;
static bool log_to_file_timestamp = false;
/* Crop overscanned frames. */
static const bool crop_overscan = true;

View File

@ -1595,6 +1595,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
#endif
SETTING_BOOL("log_to_file", &settings->bools.log_to_file, true, default_log_to_file, false);
SETTING_BOOL("log_to_file_timestamp", &settings->bools.log_to_file_timestamp, true, log_to_file_timestamp, false);
*size = count;

View File

@ -321,6 +321,7 @@ typedef struct settings
#endif
bool log_to_file;
bool log_to_file_timestamp;
} bools;
struct

View File

@ -93,14 +93,6 @@ static void frontend_ctr_get_environment_settings(int* argc, char* argv[],
{
(void)args;
#ifndef IS_SALAMANDER
#if defined(HAVE_LOGGER)
logger_init();
#elif defined(HAVE_FILE_LOGGER)
retro_main_log_file_init("sdmc:/retroarch/retroarch-log.txt");
#endif
#endif
fill_pathname_basedir(g_defaults.dirs[DEFAULT_DIR_PORT], elf_path_cst, sizeof(g_defaults.dirs[DEFAULT_DIR_PORT]));
RARCH_LOG("port dir: [%s]\n", g_defaults.dirs[DEFAULT_DIR_PORT]);
@ -125,11 +117,13 @@ static void frontend_ctr_get_environment_settings(int* argc, char* argv[],
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_REMAP], g_defaults.dirs[DEFAULT_DIR_PORT],
"config/remaps", sizeof(g_defaults.dirs[DEFAULT_DIR_REMAP]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER], g_defaults.dirs[DEFAULT_DIR_PORT],
"filters", sizeof(g_defaults.dirs[DEFAULT_DIR_REMAP]));
"filters", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_FILTER]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_DATABASE], g_defaults.dirs[DEFAULT_DIR_PORT],
"database/rdb", sizeof(g_defaults.dirs[DEFAULT_DIR_DATABASE]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CURSOR], g_defaults.dirs[DEFAULT_DIR_PORT],
"database/cursors", sizeof(g_defaults.dirs[DEFAULT_DIR_CURSOR]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], g_defaults.dirs[DEFAULT_DIR_PORT],
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
fill_pathname_join(g_defaults.path.config, g_defaults.dirs[DEFAULT_DIR_PORT],
file_path_str(FILE_PATH_MAIN_CONFIG), sizeof(g_defaults.path.config));
}
@ -145,11 +139,18 @@ static void frontend_ctr_deinit(void* data)
(void)data;
#ifndef IS_SALAMANDER
/* Note: frontend_ctr_deinit() is normally called when
* forking to load new content. When this happens, the
* log messages generated in frontend_ctr_exec() *must*
* be printed to screen (provided bottom screen is not
* turned off...), since the 'first core launch' warning
* can prevent sdcard corruption. We therefore close any
* existing log file, enable verbose logging and revert
* to console output. (Normal logging will be resumed
* once retroarch.cfg has been re-read) */
retro_main_log_file_deinit();
verbosity_enable();
#ifdef HAVE_FILE_LOGGER
command_event(CMD_EVENT_LOG_FILE_DEINIT, NULL);
#endif
retro_main_log_file_init(NULL, false);
if ((gfxBottomFramebuffers[0] == (u8*)currentConsole->frameBuffer)
&& (ctr_fork_mode == FRONTEND_FORK_NONE))
@ -203,9 +204,9 @@ static void frontend_ctr_exec(const char* path, bool should_load_game)
if (should_load_game && !path_is_empty(RARCH_PATH_CONTENT))
{
strcpy(game_path, path_get(RARCH_PATH_CONTENT));
arg_data[args] = game_path;
arg_data[args + 1] = NULL;
args++;
arg_data[args] = game_path;
arg_data[args + 1] = NULL;
args++;
RARCH_LOG("content path: [%s].\n", path_get(RARCH_PATH_CONTENT));
}
#endif

View File

@ -401,6 +401,7 @@ static void frontend_darwin_get_environment_settings(int *argc, char *argv[],
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SAVESTATE], home_dir_buf, "states", sizeof(g_defaults.dirs[DEFAULT_DIR_SAVESTATE]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG], home_dir_buf, "records_config", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT], home_dir_buf, "records", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], home_dir_buf, "logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
#if defined(IOS)
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_PLAYLIST], home_dir_buf, "playlists", sizeof(g_defaults.dirs[DEFAULT_DIR_PLAYLIST]));
#endif

View File

@ -198,6 +198,8 @@ static void frontend_emscripten_get_env(int *argc, char *argv[],
"system", sizeof(g_defaults.dirs[DEFAULT_DIR_SYSTEM]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS], user_path,
"thumbnails", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], user_path,
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
/* cache dir */
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CACHE], "/tmp/",

View File

@ -20,6 +20,7 @@
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <sys/iosupport.h>
#include <gccore.h>
#include <ogcsys.h>
@ -65,17 +66,6 @@ extern void system_exec_wii(const char *path, bool should_load_game);
static enum frontend_fork gx_fork_mode = FRONTEND_FORK_NONE;
#endif
#ifndef IS_SALAMANDER
#include "../../paths.h"
enum
{
GX_DEVICE_SD = 0,
GX_DEVICE_USB,
GX_DEVICE_END
};
#if defined(HAVE_LOGGER) || defined(HAVE_FILE_LOGGER)
static devoptab_t dotab_stdout = {
"stdout", /* device name */
0, /* size of file structure */
@ -101,7 +91,16 @@ static devoptab_t dotab_stdout = {
NULL, /* device fsync_r */
NULL, /* deviceData; */
};
#endif
#ifndef IS_SALAMANDER
#include "../../paths.h"
enum
{
GX_DEVICE_SD = 0,
GX_DEVICE_USB,
GX_DEVICE_END
};
#ifdef HW_RVL
static struct
@ -151,22 +150,6 @@ static void gx_devthread(void *a)
}
#endif
#ifdef HAVE_LOGGER
static int gx_logger_net(struct _reent *r, int fd, const char *ptr, size_t len)
{
#ifdef HAVE_LOGGER
static char temp[4000];
size_t l = (len >= 4000) ? 3999 : len - 1;
memcpy(temp, ptr, l);
temp[l] = 0;
logger_send("%s", temp);
#elif defined(HAVE_FILE_LOGGER)
fwrite(ptr, 1, len, retro_main_log_file());
#endif
return len;
}
#endif
#endif
#ifdef IS_SALAMANDER
@ -180,11 +163,6 @@ static void frontend_gx_get_environment_settings(
char *last_slash = NULL;
char *device_end = NULL;
#ifndef IS_SALAMANDER
#if defined(HAVE_LOGGER)
logger_init();
#elif defined(HAVE_FILE_LOGGER)
retro_main_log_file_init("/retroarch-log.txt");
#endif
/* This situation can happen on some loaders so we really need some
fake args or else retroarch will just crash on parsing NULL pointers */
@ -253,6 +231,8 @@ static void frontend_gx_get_environment_settings(
"savefiles", sizeof(g_defaults.dirs[DEFAULT_DIR_SAVESTATE]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_PLAYLIST], g_defaults.dirs[DEFAULT_DIR_PORT],
"playlists", sizeof(g_defaults.dirs[DEFAULT_DIR_PLAYLIST]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], g_defaults.dirs[DEFAULT_DIR_PORT],
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
#ifdef IS_SALAMANDER
if (*argc > 2 && argv[1] != NULL && argv[2] != NULL)
@ -326,15 +306,8 @@ static void frontend_gx_init(void *data)
fatInitDefault();
#ifdef HAVE_LOGGER
devoptab_list[STD_OUT] = &dotab_stdout;
devoptab_list[STD_ERR] = &dotab_stdout;
dotab_stdout.write_r = gx_logger_net;
#elif defined(HAVE_FILE_LOGGER) && !defined(IS_SALAMANDER)
devoptab_list[STD_OUT] = &dotab_stdout;
devoptab_list[STD_ERR] = &dotab_stdout;
dotab_stdout.write_r = gx_logger_file;
#endif
#if defined(HW_RVL) && !defined(IS_SALAMANDER)
gx_devices[GX_DEVICE_SD].interface = &__io_wiisd;

View File

@ -169,6 +169,8 @@ static void frontend_orbis_get_environment_settings(int *argc, char *argv[],
"overlays", sizeof(g_defaults.dirs[DEFAULT_DIR_OVERLAY]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS], user_path,
"thumbnails", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], user_path,
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
strlcpy(g_defaults.dirs[DEFAULT_DIR_CONTENT_HISTORY],
user_path, sizeof(g_defaults.dirs[DEFAULT_DIR_CONTENT_HISTORY]));
fill_pathname_join(g_defaults.path.config, user_path,

View File

@ -77,6 +77,8 @@ static void create_path_names(void)
"SCREENSHOTS", sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SYSTEM], user_path,
"SYSTEM", sizeof(g_defaults.dirs[DEFAULT_DIR_SYSTEM]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], user_path,
"LOGS", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
/* cache dir */
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CACHE], user_path,

View File

@ -263,6 +263,9 @@ static void frontend_ps3_get_environment_settings(int *argc, char *argv[],
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG],
g_defaults.dirs[DEFAULT_DIR_CORE],
"autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS],
g_defaults.dirs[DEFAULT_DIR_CORE],
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
}
#ifndef IS_SALAMANDER

View File

@ -147,6 +147,8 @@ static void frontend_psp_get_environment_settings(int *argc, char *argv[],
"overlays", sizeof(g_defaults.dirs[DEFAULT_DIR_OVERLAY]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS], user_path,
"thumbnails", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], user_path,
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
strlcpy(g_defaults.dirs[DEFAULT_DIR_CONTENT_HISTORY],
user_path, sizeof(g_defaults.dirs[DEFAULT_DIR_CONTENT_HISTORY]));
fill_pathname_join(g_defaults.path.config, user_path,
@ -177,6 +179,8 @@ static void frontend_psp_get_environment_settings(int *argc, char *argv[],
"SCREENSHOTS", sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SYSTEM], user_path,
"SYSTEM", sizeof(g_defaults.dirs[DEFAULT_DIR_SYSTEM]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], user_path,
"LOGS", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
/* cache dir */
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CACHE], user_path,

View File

@ -130,6 +130,8 @@ static void frontend_qnx_get_environment_settings(int *argc, char *argv[],
"thumbnails", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAIL]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_WALLPAPERS], user_path,
"wallpapers", sizeof(g_defaults.dirs[DEFAULT_DIR_WALLPAPERS]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], user_path,
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
/* tmp */
strlcpy(g_defaults.dirs[DEFAULT_DIR_CACHE],

View File

@ -223,6 +223,9 @@ static void frontend_switch_get_environment_settings(int *argc, char *argv[], vo
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS], g_defaults.dirs[DEFAULT_DIR_PORT],
"thumbnails", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], g_defaults.dirs[DEFAULT_DIR_PORT],
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
int i = 0;
for (i; i < DEFAULT_DIR_LAST; i++)
{

View File

@ -374,6 +374,8 @@ static void frontend_uwp_environment_get(int *argc, char *argv[],
"~\\states", sizeof(g_defaults.dirs[DEFAULT_DIR_SAVESTATE]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SYSTEM],
"~\\system", sizeof(g_defaults.dirs[DEFAULT_DIR_SYSTEM]));
fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_LOGS],
"~\\logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
#ifdef HAVE_MENU
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)

View File

@ -104,6 +104,8 @@ static void frontend_wiiu_get_environment_settings(int *argc, char *argv[],
"database/rdb", sizeof(g_defaults.dirs[DEFAULT_DIR_DATABASE]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CURSOR], g_defaults.dirs[DEFAULT_DIR_PORT],
"database/cursors", sizeof(g_defaults.dirs[DEFAULT_DIR_CURSOR]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], g_defaults.dirs[DEFAULT_DIR_CORE],
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
fill_pathname_join(g_defaults.path.config, g_defaults.dirs[DEFAULT_DIR_PORT],
file_path_str(FILE_PATH_MAIN_CONFIG), sizeof(g_defaults.path.config));

View File

@ -132,6 +132,9 @@ static void frontend_xdk_get_environment_settings(int *argc, char *argv[],
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_PLAYLIST],
g_defaults.dirs[DEFAULT_DIR_CORE],
"playlists", sizeof(g_defaults.dirs[DEFAULT_DIR_PLAYLIST]));
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS],
g_defaults.dirs[DEFAULT_DIR_CORE],
"logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
#elif defined(_XBOX360)
strlcpy(g_defaults.dirs[DEFAULT_DIR_CORE],
"game:",
@ -152,6 +155,9 @@ static void frontend_xdk_get_environment_settings(int *argc, char *argv[],
sizeof(g_defaults.dirs[DEFAULT_DIR_SRAM]));
strlcpy(g_defaults.dirs[DEFAULT_DIR_SYSTEM],
"game:\\system", sizeof(g_defaults.dirs[DEFAULT_DIR_SYSTEM]));
strlcpy(g_defaults.dirs[DEFAULT_DIR_LOGS],
"game:\\logs",
sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS]));
#endif
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO],
g_defaults.dirs[DEFAULT_DIR_CORE],

View File

@ -649,6 +649,8 @@ 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_LOG_TO_FILE_TIMESTAMP,
"log_to_file_timestamp")
MSG_HASH(MENU_ENUM_LABEL_MAIN_MENU,
"main_menu")
MSG_HASH(MENU_ENUM_LABEL_MANAGEMENT,

View File

@ -1624,6 +1624,14 @@ 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_LOG_TO_FILE_TIMESTAMP,
"Timestamped Log Files"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_LOG_TO_FILE_TIMESTAMP,
"When logging to file, redirects the output from each RetroArch session to a new timestamped file. If disabled, log is overwritten each time RetroArch is restarted."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MAIN_MENU,
"Main Menu"

View File

@ -144,6 +144,7 @@ default_sublabel_macro(action_bind_sublabel_toggle_gamepad_combo, MENU_
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_to_file_timestamp, MENU_ENUM_SUBLABEL_LOG_TO_FILE_TIMESTAMP)
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)
@ -2134,6 +2135,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_LOG_TO_FILE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_to_file);
break;
case MENU_ENUM_LABEL_LOG_TO_FILE_TIMESTAMP:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_to_file_timestamp);
break;
case MENU_ENUM_LABEL_LOG_DIR:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_dir);
break;

View File

@ -5492,6 +5492,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOG_TO_FILE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOG_TO_FILE_TIMESTAMP,
PARSE_ONLY_BOOL, false);
{
settings_t *settings = config_get_ptr();

View File

@ -3342,6 +3342,7 @@ void general_write_handler(rarch_setting_t *setting)
}
break;
case MENU_ENUM_LABEL_LOG_DIR:
case MENU_ENUM_LABEL_LOG_TO_FILE_TIMESTAMP:
if (verbosity_is_enabled() && is_logging_to_file())
{
rarch_log_file_deinit();
@ -4975,6 +4976,21 @@ static bool setting_append_list(
general_read_handler,
SD_FLAG_ADVANCED);
CONFIG_BOOL(
list, list_info,
&settings->bools.log_to_file_timestamp,
MENU_ENUM_LABEL_LOG_TO_FILE_TIMESTAMP,
MENU_ENUM_LABEL_VALUE_LOG_TO_FILE_TIMESTAMP,
log_to_file_timestamp,
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,

View File

@ -1394,6 +1394,7 @@ enum msg_hash_enums
MENU_LABEL(LOG_VERBOSITY),
MENU_LABEL(LOG_TO_FILE),
MENU_LABEL(LOG_TO_FILE_TIMESTAMP),
MENU_ENUM_LABEL_OVERLAY_NEXT,

View File

@ -292,6 +292,7 @@ static char runtime_content_path[PATH_MAX_LENGTH] = {0};
static char runtime_core_path[PATH_MAX_LENGTH] = {0};
static bool log_file_created = false;
static char timestamped_log_file_name[64] = {0};
extern bool input_driver_flushing_input;
@ -5282,6 +5283,22 @@ void rarch_log_file_init(void)
FILE *fp = NULL;
bool success = false;
/* If this is the first run, generate a timestamped log
* file name (do this even when not outputting timestamped
* log files, since user may decide to switch at any moment...) */
if (string_is_empty(timestamped_log_file_name))
{
char format[256];
time_t cur_time = time(NULL);
format[0] = '\0';
strftime(format, sizeof(format), "retroarch__%Y_%m_%d__%H_%M_%S", localtime(&cur_time));
fill_pathname_noext(timestamped_log_file_name, format,
file_path_str(FILE_PATH_EVENT_LOG_EXTENSION), sizeof(timestamped_log_file_name));
}
/* 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()))
@ -5312,7 +5329,9 @@ void rarch_log_file_init(void)
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));
fill_pathname_join(buf, settings->paths.log_dir,
settings->bools.log_to_file_timestamp ? timestamped_log_file_name : file_path_str(FILE_PATH_DEFAULT_EVENT_LOG),
sizeof(buf));
if (!string_is_empty(buf))
{
/* When RetroArch is launched, log file is overwritten.

View File

@ -188,9 +188,7 @@ static void content_load_init_wrap(
const struct rarch_main_wrap *args,
int *argc, char **argv)
{
#ifdef HAVE_FILE_LOGGER
int i;
#endif
*argc = 0;
argv[(*argc)++] = strdup("retroarch");
@ -238,10 +236,8 @@ static void content_load_init_wrap(
if (args->verbose)
argv[(*argc)++] = strdup("-v");
#ifdef HAVE_FILE_LOGGER
for (i = 0; i < *argc; i++)
RARCH_LOG("arg #%d: %s\n", i, argv[i]);
#endif
}
/**

View File

@ -126,6 +126,14 @@ void retro_main_log_file_init(const char *path, bool append)
return;
log_file_fp = (FILE*)fopen_utf8(path, append ? "ab" : "wb");
if (!log_file_fp)
{
log_file_fp = stderr;
RARCH_ERR("Failed to open system event log file: %s\n", path);
return;
}
log_file_initialized = true;
#if !defined(PS2) /* TODO: PS2 IMPROVEMENT */
@ -137,7 +145,7 @@ void retro_main_log_file_init(const char *path, bool append)
void retro_main_log_file_deinit(void)
{
if (log_file_fp && log_file_fp != stderr)
if (log_file_fp && log_file_initialized)
{
fclose(log_file_fp);
log_file_fp = NULL;
@ -199,7 +207,10 @@ void RARCH_LOG_V(const char *tag, const char *fmt, va_list ap)
}
if (log_file_initialized)
{
vfprintf(log_file_fp, fmt, ap);
fflush(log_file_fp);
}
else
__android_log_vprint(prio,
file_path_str(FILE_PATH_PROGRAM_NAME),