compositor: Plug-in the file stream
Pass log scopes from the command line to subscribe log scopes dynamically to the 'logger' subscriber. Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
This commit is contained in:
parent
8b3ab3cd9b
commit
f387f8409a
@ -124,7 +124,6 @@ struct wet_compositor {
|
||||
static FILE *weston_logfile = NULL;
|
||||
static struct weston_log_scope *log_scope;
|
||||
static struct weston_log_scope *protocol_scope;
|
||||
|
||||
static int cached_tm_mday = -1;
|
||||
|
||||
static int weston_log_timestamp(void)
|
||||
@ -197,11 +196,7 @@ weston_log_file_close(void)
|
||||
static int
|
||||
vlog(const char *fmt, va_list ap)
|
||||
{
|
||||
int l;
|
||||
char timestr[128];
|
||||
va_list ap2;
|
||||
|
||||
va_copy(ap2, ap);
|
||||
|
||||
if (weston_log_scope_is_enabled(log_scope)) {
|
||||
weston_log_scope_printf(log_scope, "%s ",
|
||||
@ -210,23 +205,14 @@ vlog(const char *fmt, va_list ap)
|
||||
weston_log_scope_vprintf(log_scope, fmt, ap);
|
||||
}
|
||||
|
||||
l = weston_log_timestamp();
|
||||
l += vfprintf(weston_logfile, fmt, ap2);
|
||||
va_end(ap2);
|
||||
|
||||
return l;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
vlog_continue(const char *fmt, va_list argp)
|
||||
{
|
||||
va_list argp2;
|
||||
|
||||
va_copy(argp2, argp);
|
||||
weston_log_scope_vprintf(log_scope, fmt, argp2);
|
||||
va_end(argp2);
|
||||
|
||||
return vfprintf(weston_logfile, fmt, argp);
|
||||
weston_log_scope_vprintf(log_scope, fmt, argp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *
|
||||
@ -656,6 +642,9 @@ usage(int error_code)
|
||||
" --no-config\t\tDo not read weston.ini\n"
|
||||
" --wait-for-debugger\tRaise SIGSTOP on start-up\n"
|
||||
" --debug\t\tEnable debug extension\n"
|
||||
" -l, --logger-scopes=SCOPE\n\t\t\tSpecify log scopes to "
|
||||
"subscribe to.\n\t\t\tCan specify multiple scopes, "
|
||||
"each followed by comma\n"
|
||||
" -h, --help\t\tThis help message\n\n");
|
||||
|
||||
#if defined(BUILD_DRM_COMPOSITOR)
|
||||
@ -2916,6 +2905,23 @@ wet_load_xwayland(struct weston_compositor *comp)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
weston_log_setup_scopes(struct weston_log_context *log_ctx,
|
||||
struct weston_log_subscriber *subscriber,
|
||||
const char *names)
|
||||
{
|
||||
assert(log_ctx);
|
||||
assert(subscriber);
|
||||
|
||||
char *tokenize = strdup(names);
|
||||
char *token = strtok(tokenize, ",");
|
||||
while (token) {
|
||||
weston_log_subscribe(log_ctx, subscriber, token);
|
||||
token = strtok(NULL, ",");
|
||||
}
|
||||
free(tokenize);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int ret = EXIT_FAILURE;
|
||||
@ -2930,6 +2936,7 @@ int main(int argc, char *argv[])
|
||||
char *modules = NULL;
|
||||
char *option_modules = NULL;
|
||||
char *log = NULL;
|
||||
char *log_scopes = NULL;
|
||||
char *server_socket = NULL;
|
||||
int32_t idle_time = -1;
|
||||
int32_t help = 0;
|
||||
@ -2946,6 +2953,7 @@ int main(int argc, char *argv[])
|
||||
struct weston_seat *seat;
|
||||
struct wet_compositor wet = { 0 };
|
||||
struct weston_log_context *log_ctx = NULL;
|
||||
struct weston_log_subscriber *logger = NULL;
|
||||
int require_input;
|
||||
sigset_t mask;
|
||||
|
||||
@ -2968,6 +2976,7 @@ int main(int argc, char *argv[])
|
||||
{ WESTON_OPTION_STRING, "config", 'c', &config_file },
|
||||
{ WESTON_OPTION_BOOLEAN, "wait-for-debugger", 0, &wait_for_debugger },
|
||||
{ WESTON_OPTION_BOOLEAN, "debug", 0, &debug_protocol },
|
||||
{ WESTON_OPTION_STRING, "logger-scopes", 'l', &log_scopes },
|
||||
};
|
||||
|
||||
wl_list_init(&wet.layoutput_list);
|
||||
@ -2995,6 +3004,12 @@ int main(int argc, char *argv[])
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
logger = weston_log_subscriber_create_log(weston_logfile);
|
||||
if (log_scopes)
|
||||
weston_log_setup_scopes(log_ctx, logger, log_scopes);
|
||||
else
|
||||
weston_log_subscribe(log_ctx, logger, "log");
|
||||
|
||||
weston_log_set_handler(vlog, vlog_continue);
|
||||
weston_log_file_open(log);
|
||||
|
||||
@ -3203,6 +3218,7 @@ out:
|
||||
weston_compositor_log_scope_destroy(log_scope);
|
||||
log_scope = NULL;
|
||||
weston_compositor_destroy(wet.compositor);
|
||||
weston_log_subscriber_destroy_log(logger);
|
||||
|
||||
out_signals:
|
||||
for (i = ARRAY_LENGTH(signals) - 1; i >= 0; i--)
|
||||
|
@ -147,6 +147,12 @@ to take screenshots of the outputs using weston-screenshooter application,
|
||||
which can lead to silently leaking the output contents. This option should
|
||||
not be used in production.
|
||||
.TP
|
||||
\fB\-\^l\fIscope1,scope2\fR, \fB\-\-logger-scopes\fR=\fIscope1,scope2\fR
|
||||
Specify to which log scopes should subscribe to. When no scopes are supplied,
|
||||
the log "log" scope will be subscribed by default. Useful to control which
|
||||
streams to write data into the logger and can be helpful in diagnosing early
|
||||
start-up code.
|
||||
.TP
|
||||
.BR \-\-version
|
||||
Print the program version.
|
||||
.TP
|
||||
|
Loading…
x
Reference in New Issue
Block a user