*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <inttypes.h>
#include <popt.h>
#include <stdio.h>
static int opt_kernel;
static int opt_jul;
static int opt_log4j;
+static int opt_python;
static char *opt_channel;
static int opt_domain;
static int opt_fields;
{"kernel", 'k', POPT_ARG_VAL, &opt_kernel, 1, 0, 0},
{"jul", 'j', POPT_ARG_VAL, &opt_jul, 1, 0, 0},
{"log4j", 'l', POPT_ARG_VAL, &opt_log4j, 1, 0, 0},
+ {"python", 'p', POPT_ARG_VAL, &opt_python, 1, 0, 0},
#if 0
/* Not implemented yet */
{"userspace", 'u', POPT_ARG_STRING | POPT_ARGFLAG_OPTIONAL, &opt_cmd_name, OPT_USERSPACE, 0, 0},
fprintf(ofp, " -k, --kernel Select kernel domain\n");
fprintf(ofp, " -u, --userspace Select user-space domain.\n");
fprintf(ofp, " -j, --jul Apply for Java application using JUL\n");
+ fprintf(ofp, " -l, --log4j Apply for Java application using LOG4J\n");
+ fprintf(ofp, " -p, --python Apply for Python application using logging\n");
fprintf(ofp, " -f, --fields List event fields.\n");
fprintf(ofp, " --syscall List available system calls.\n");
#if 0
}
/* Caller must free() *cmdline */
- cmdline = malloc(PATH_MAX);
+ cmdline = zmalloc(PATH_MAX);
if (!cmdline) {
perror("malloc cmdline");
goto end;
indent6,
event->name,
logleveltype_string(event->loglevel_type),
- mi_lttng_loglevel_string(event->loglevel),
+ mi_lttng_loglevel_string(event->loglevel, handle->domain.type),
event->loglevel,
enabled_string(event->enabled),
exclusion_string(event->exclusion),
}
/* Write an event */
- ret = mi_lttng_event(writer, &events[i], 0);
+ ret = mi_lttng_event(writer, &events[i], 0, handle->domain.type);
if (ret) {
goto end;
}
domain.type = LTTNG_DOMAIN_JUL;
} else if (opt_log4j) {
domain.type = LTTNG_DOMAIN_LOG4J;
+ } else if (opt_python) {
+ domain.type = LTTNG_DOMAIN_PYTHON;
}
agent_domain_str = get_domain_str(domain.type);
if (!event_element_open) {
/* Open and write the event */
- ret = mi_lttng_event(writer, &cur_event, 1);
+ ret = mi_lttng_event(writer, &cur_event, 1,
+ handle->domain.type);
if (ret) {
goto end;
}
}
for (i = 0; i < count; i++) {
- ret = mi_lttng_event(writer, &events[i], 0);
+ ret = mi_lttng_event(writer, &events[i], 0, handle->domain.type);
if (ret) {
goto end;
}
}
for (i = 0; i < count; i++) {
- ret = mi_lttng_event(writer, &events[i], 0);
+ ret = mi_lttng_event(writer, &events[i], 0, handle->domain.type);
if (ret) {
goto end;
}
}
for (i = 0; i < count; i++) {
- ret = mi_lttng_event(writer, &events[i], 0);
+ ret = mi_lttng_event(writer, &events[i], 0, handle->domain.type);
if (ret) {
goto end;
}
MSG("%s- %s%s (loglevel%s %s)", indent4, events[i].name,
enabled_string(events[i].enabled),
logleveltype_string(events[i].loglevel_type),
- mi_lttng_loglevel_string(events[i].loglevel));
+ mi_lttng_loglevel_string(events[i].loglevel,
+ handle->domain.type));
}
MSG("");
}
for (i = 0; i < count; i++) {
- ret = mi_lttng_event(writer, &events[i], 0);
+ ret = mi_lttng_event(writer, &events[i], 0, handle->domain.type);
if (ret) {
goto end;
}
}
} else {
/* Pretty print */
- if (channel_name == NULL) {
+ if (count) {
MSG("Channels:\n-------------");
}
case LTTNG_DOMAIN_LOG4J:
MSG(" - LOG4j (Logging for Java)");
break;
+ case LTTNG_DOMAIN_PYTHON:
+ MSG(" - Python (logging)");
+ break;
default:
break;
}
domain.type = LTTNG_DOMAIN_JUL;
} else if (opt_log4j) {
domain.type = LTTNG_DOMAIN_LOG4J;
+ } else if (opt_python) {
+ domain.type = LTTNG_DOMAIN_PYTHON;
}
if (!opt_kernel && opt_syscall) {
goto end;
}
- if (opt_kernel || opt_userspace || opt_jul || opt_log4j) {
+ if (opt_kernel || opt_userspace || opt_jul || opt_log4j || opt_python) {
handle = lttng_create_handle(session_name, &domain);
if (handle == NULL) {
ret = CMD_FATAL;
}
if (session_name == NULL) {
- if (!opt_kernel && !opt_userspace && !opt_jul && !opt_log4j) {
+ if (!opt_kernel && !opt_userspace && !opt_jul && !opt_log4j
+ && !opt_python) {
ret = list_sessions(NULL);
if (ret) {
goto end;
goto end;
}
}
- if (opt_jul || opt_log4j) {
+ if (opt_jul || opt_log4j || opt_python) {
ret = list_agent_events();
if (ret) {
goto end;
case LTTNG_DOMAIN_LOG4J:
MSG("=== Domain: LOG4j (Logging for Java) ===\n");
break;
+ case LTTNG_DOMAIN_PYTHON:
+ MSG("=== Domain: Python (logging) ===\n");
+ break;
default:
MSG("=== Domain: Unimplemented ===\n");
break;
}
if (domains[i].type == LTTNG_DOMAIN_JUL ||
- domains[i].type == LTTNG_DOMAIN_LOG4J) {
+ domains[i].type == LTTNG_DOMAIN_LOG4J ||
+ domains[i].type == LTTNG_DOMAIN_PYTHON) {
ret = list_session_agent_events();
if (ret) {
goto end;