diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c index e4acf70c2..fbaa2acfb 100644 --- a/frontends/amiga/gui.c +++ b/frontends/amiga/gui.c @@ -5841,6 +5841,9 @@ int main(int argc, char** argv) free(current_user_dir); FreeVec(current_user_faviconcache); + /* finalise logging */ + nslog_finalise(); + #ifndef __amigaos4__ /* OS3 low memory handler */ ami_memory_fini(memhandler); diff --git a/frontends/atari/gui.c b/frontends/atari/gui.c index a400285d3..6ee63b301 100644 --- a/frontends/atari/gui.c +++ b/frontends/atari/gui.c @@ -1225,6 +1225,10 @@ int main(int argc, char** argv) fclose(stderr); #endif NSLOG(netsurf, INFO, "exit_gem"); + + /* finalise logging */ + nslog_finalise(); + exit_gem(); return 0; diff --git a/frontends/beos/gui.cpp b/frontends/beos/gui.cpp index 69a0d6dde..19f8eac49 100644 --- a/frontends/beos/gui.cpp +++ b/frontends/beos/gui.cpp @@ -1066,6 +1066,12 @@ int main(int argc, char** argv) netsurf_exit(); + /* finalise options */ + nsoption_finalise(nsoptions, nsoptions_default); + + /* finalise logging */ + nslog_finalise(); + return 0; } diff --git a/frontends/framebuffer/gui.c b/frontends/framebuffer/gui.c index ebd0b7b66..e252f25f3 100644 --- a/frontends/framebuffer/gui.c +++ b/frontends/framebuffer/gui.c @@ -2215,6 +2215,9 @@ main(int argc, char** argv) /* finalise options */ nsoption_finalise(nsoptions, nsoptions_default); + /* finalise logging */ + nslog_finalise(); + return 0; } diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c index 6a61b3d06..8c9ad088d 100644 --- a/frontends/gtk/gui.c +++ b/frontends/gtk/gui.c @@ -1198,5 +1198,8 @@ int main(int argc, char** argv) /* finalise options */ nsoption_finalise(nsoptions, nsoptions_default); + /* finalise logging */ + nslog_finalise(); + return 0; } diff --git a/frontends/monkey/main.c b/frontends/monkey/main.c index d697f271f..53cde5a72 100644 --- a/frontends/monkey/main.c +++ b/frontends/monkey/main.c @@ -404,5 +404,8 @@ main(int argc, char **argv) /* finalise options */ nsoption_finalise(nsoptions, nsoptions_default); + /* finalise logging */ + nslog_finalise(); + return 0; } diff --git a/frontends/riscos/gui.c b/frontends/riscos/gui.c index 9d651bc10..cfc513f72 100644 --- a/frontends/riscos/gui.c +++ b/frontends/riscos/gui.c @@ -2557,5 +2557,8 @@ int main(int argc, char** argv) netsurf_exit(); nsoption_finalise(nsoptions, nsoptions_default); + /* finalise logging */ + nslog_finalise(); + return 0; } diff --git a/frontends/windows/main.c b/frontends/windows/main.c index 98e90be80..a3a7c2b39 100644 --- a/frontends/windows/main.c +++ b/frontends/windows/main.c @@ -419,5 +419,8 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd) /* finalise options */ nsoption_finalise(nsoptions, nsoptions_default); + /* finalise logging */ + nslog_finalise(); + return 0; } diff --git a/utils/log.c b/utils/log.c index 68a470aa9..e267b3179 100644 --- a/utils/log.c +++ b/utils/log.c @@ -137,8 +137,8 @@ nslog_set_filter(const char *filter) } err = nslog_filter_set_active(filt, NULL); + filt = nslog_filter_unref(filt); if (err != NSLOG_NO_ERROR) { - nslog_filter_unref(filt); return NSERROR_NOSPACE; } @@ -287,3 +287,19 @@ nslog_set_filter_by_options() else return nslog_set_filter(nsoption_charp(log_filter)); } + +/* exported interface documented in utils/log.h */ +void +nslog_finalise() +{ + NSLOG(netsurf, INFO, + "Finalising logging, please report any further messages"); + verbose_log = true; + if (logfile != stderr) { + fclose(logfile); + logfile = stderr; + } +#ifdef WITH_NSLOG + nslog_cleanup(); +#endif +} diff --git a/utils/log.h b/utils/log.h index a94afc130..b773ec4a2 100644 --- a/utils/log.h +++ b/utils/log.h @@ -43,6 +43,15 @@ typedef bool(nslog_ensure_t)(FILE *fptr); */ extern nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv); +/** + * Shut down the logging system. + * + * Shuts down the logging subsystem, resetting to verbose logging and output + * to stderr. Note, if logging is done after calling this, it will be sent + * to stderr without filtering. + */ +extern void nslog_finalise(void); + /** * Set the logging filter. *