Implement some basic logging for windows
This commit is contained in:
parent
1388b749c9
commit
fa490fa8c4
@ -26,7 +26,7 @@ static inline bool check_path(const char* data, const char *path,
|
||||
dstr_copy(output, path);
|
||||
dstr_cat(output, data);
|
||||
|
||||
blog(LOG_INFO, "Attempting path: %s\n", output->array);
|
||||
blog(LOG_DEBUG, "Attempting path: %s\n", output->array);
|
||||
|
||||
return os_file_exists(output->array);
|
||||
}
|
||||
|
@ -27,10 +27,12 @@ static int log_output_level = LOG_DEBUG;
|
||||
static int log_output_level = LOG_INFO;
|
||||
#endif
|
||||
|
||||
static int crashing = 0;
|
||||
static int crashing = 0;
|
||||
static void *log_param = NULL;
|
||||
static void *crash_param = NULL;
|
||||
|
||||
static void def_log_handler(int log_level, const char *format,
|
||||
va_list args)
|
||||
va_list args, void *param)
|
||||
{
|
||||
char out[4096];
|
||||
vsnprintf(out, sizeof(out), format, args);
|
||||
@ -57,6 +59,8 @@ static void def_log_handler(int log_level, const char *format,
|
||||
fflush(stderr);
|
||||
}
|
||||
}
|
||||
|
||||
UNUSED_PARAMETER(param);
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
@ -65,24 +69,35 @@ static void def_log_handler(int log_level, const char *format,
|
||||
#define NORETURN __attribute__((noreturn))
|
||||
#endif
|
||||
|
||||
NORETURN static void def_crash_handler(const char *format, va_list args)
|
||||
NORETURN static void def_crash_handler(const char *format, va_list args,
|
||||
void *param)
|
||||
{
|
||||
vfprintf(stderr, format, args);
|
||||
exit(0);
|
||||
|
||||
UNUSED_PARAMETER(param);
|
||||
}
|
||||
|
||||
static void (*log_handler)(int log_level, const char *, va_list) =
|
||||
static void (*log_handler)(int log_level, const char *, va_list, void *) =
|
||||
def_log_handler;
|
||||
static void (*crash_handler)(const char *, va_list) = def_crash_handler;
|
||||
static void (*crash_handler)(const char *, va_list, void *) = def_crash_handler;
|
||||
|
||||
void base_set_log_handler(
|
||||
void (*handler)(int log_level, const char *, va_list))
|
||||
void (*handler)(int log_level, const char *, va_list, void *),
|
||||
void *param)
|
||||
{
|
||||
if (!handler)
|
||||
handler = def_log_handler;
|
||||
|
||||
log_param = param;
|
||||
log_handler = handler;
|
||||
}
|
||||
|
||||
void base_set_crash_handler(void (*handler)(const char *, va_list))
|
||||
void base_set_crash_handler(
|
||||
void (*handler)(const char *, va_list, void *),
|
||||
void *param)
|
||||
{
|
||||
crash_param = param;
|
||||
crash_handler = handler;
|
||||
}
|
||||
|
||||
@ -97,13 +112,13 @@ void bcrash(const char *format, ...)
|
||||
|
||||
crashing = 1;
|
||||
va_start(args, format);
|
||||
crash_handler(format, args);
|
||||
crash_handler(format, args, crash_param);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void blogva(int log_level, const char *format, va_list args)
|
||||
{
|
||||
log_handler(log_level, format, args);
|
||||
log_handler(log_level, format, args, log_param);
|
||||
}
|
||||
|
||||
void blog(int log_level, const char *format, ...)
|
||||
@ -111,6 +126,6 @@ void blog(int log_level, const char *format, ...)
|
||||
va_list args;
|
||||
|
||||
va_start(args, format);
|
||||
log_handler(log_level, format, args);
|
||||
blogva(log_level, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
@ -59,8 +59,11 @@ enum {
|
||||
};
|
||||
|
||||
EXPORT void base_set_log_handler(
|
||||
void (*handler)(int log_level, const char *, va_list));
|
||||
EXPORT void base_set_crash_handler(void (*handler)(const char *, va_list));
|
||||
void (*handler)(int log_level, const char *, va_list, void *),
|
||||
void *param);
|
||||
EXPORT void base_set_crash_handler(
|
||||
void (*handler)(const char *, va_list, void *),
|
||||
void *param);
|
||||
|
||||
EXPORT void blogva(int log_level, const char *format, va_list args);
|
||||
|
||||
|
@ -29,29 +29,29 @@
|
||||
#include "platform.hpp"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <fstream>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
||||
static void do_log(int log_level, const char *msg, va_list args)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
static void do_log(int log_level, const char *msg, va_list args, void *param)
|
||||
{
|
||||
fstream &logFile = *static_cast<fstream*>(param);
|
||||
char bla[4096];
|
||||
vsnprintf(bla, 4095, msg, args);
|
||||
|
||||
OutputDebugStringA(bla);
|
||||
OutputDebugStringA("\n");
|
||||
|
||||
if (log_level <= LOG_INFO)
|
||||
logFile << bla << endl;
|
||||
|
||||
if (log_level <= LOG_ERROR && IsDebuggerPresent())
|
||||
__debugbreak();
|
||||
#else
|
||||
vprintf(msg, args);
|
||||
printf("\n");
|
||||
|
||||
UNUSED_PARAMETER(log_level);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
bool OBSApp::InitGlobalConfigDefaults()
|
||||
{
|
||||
@ -220,7 +220,15 @@ int main(int argc, char *argv[])
|
||||
int ret = -1;
|
||||
QCoreApplication::addLibraryPath(".");
|
||||
#ifdef _WIN32
|
||||
base_set_log_handler(do_log);
|
||||
char *logPath = os_get_config_path("obs-studio/log.txt");
|
||||
fstream logFile;
|
||||
|
||||
logFile.open(logPath, ios_base::in | ios_base::out | ios_base::trunc,
|
||||
_SH_DENYNO);
|
||||
bfree(logPath);
|
||||
|
||||
if (logFile.is_open())
|
||||
base_set_log_handler(do_log, &logFile);
|
||||
#endif
|
||||
|
||||
try {
|
||||
@ -234,5 +242,6 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
blog(LOG_INFO, "Number of memory leaks: %ld", bnum_allocs());
|
||||
base_set_log_handler(nullptr, nullptr);
|
||||
return ret;
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ static LRESULT CALLBACK sceneProc(HWND hwnd, UINT message, WPARAM wParam,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void do_log(int log_level, const char *msg, va_list args)
|
||||
static void do_log(int log_level, const char *msg, va_list args, void *param)
|
||||
{
|
||||
char bla[4096];
|
||||
vsnprintf(bla, 4095, msg, args);
|
||||
@ -61,6 +61,8 @@ static void do_log(int log_level, const char *msg, va_list args)
|
||||
|
||||
if (log_level <= LOG_WARNING)
|
||||
__debugbreak();
|
||||
|
||||
UNUSED_PARAMETER(param);
|
||||
}
|
||||
|
||||
static void CreateOBS(HWND hwnd)
|
||||
@ -122,7 +124,7 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine,
|
||||
int numCmd)
|
||||
{
|
||||
HWND hwnd = NULL;
|
||||
base_set_log_handler(do_log);
|
||||
base_set_log_handler(do_log, nullptr);
|
||||
|
||||
try {
|
||||
hwnd = CreateTestWindow(instance);
|
||||
|
Loading…
x
Reference in New Issue
Block a user