@@ -48,16 +48,15 @@ void IConsoleInit()
}
static void IConsoleWriteToLogFile(const std::string &string)
{
if (_iconsole_output_file != nullptr) {
/* if there is an console output file ... also print it there */
const char *header = GetLogPrefix();
if ((strlen(header) != 0 && fwrite(header, strlen(header), 1, _iconsole_output_file) != 1) ||
fwrite(string.c_str(), string.size(), 1, _iconsole_output_file) != 1 ||
fwrite("\n", 1, 1, _iconsole_output_file) != 1) {
try {
fmt::print(_iconsole_output_file, "{}{}\n", GetLogPrefix(), string);
} catch (const std::system_error &) {
fclose(_iconsole_output_file);
_iconsole_output_file = nullptr;
IConsolePrint(CC_ERROR, "Cannot write to console log file; closing the log file.");
@@ -216,24 +216,22 @@ std::string GetDebugString()
return result;
/**
* Get the prefix for logs; if show_date_in_logs is enabled it returns
* the date, otherwise it returns nothing.
* @return the prefix for logs (do not free), never nullptr
* the date, otherwise it returns an empty string.
* @return the prefix for logs.
*/
const char *GetLogPrefix()
std::string GetLogPrefix()
static std::string _log_prefix;
std::string log_prefix;
if (_settings_client.gui.show_date_in_logs) {
_log_prefix = fmt::format("[{:%Y-%m-%d %H:%M:%S}] ", fmt::localtime(time(nullptr)));
} else {
_log_prefix.clear();
log_prefix = fmt::format("[{:%Y-%m-%d %H:%M:%S}] ", fmt::localtime(time(nullptr)));
return _log_prefix.c_str();
return log_prefix;
* Send the queued Debug messages to either NetworkAdminConsole or IConsolePrint from the
* GameLoop thread to prevent concurrent accesses to both the NetworkAdmin's packet queue
* as well as IConsolePrint's buffers.
@@ -117,12 +117,12 @@ std::string GetDebugString();
void ShowInfoI(const std::string &str);
#define ShowInfo(format_string, ...) ShowInfoI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__))
const char *GetLogPrefix();
std::string GetLogPrefix();
void DebugSendRemoteMessages();
void DebugReconsiderSendRemoteMessages();
#endif /* DEBUG_H */
Status change: