case LTTNG_DOMAIN_KERNEL:
case LTTNG_DOMAIN_UST:
case LTTNG_DOMAIN_JUL:
+ case LTTNG_DOMAIN_LOG4J:
memcpy(dst, src, sizeof(struct lttng_domain));
break;
default:
/* Don't add filter for the '*' event. */
if (ev->name[0] != '*') {
if (filter) {
- err = asprintf(&jul_filter, "%s && logger_name == \"%s\"", filter,
+ err = asprintf(&jul_filter, "(%s) && (logger_name == \"%s\")", filter,
ev->name);
} else {
err = asprintf(&jul_filter, "logger_name == \"%s\"", ev->name);
if (filter || jul_filter) {
char *new_filter;
- err = asprintf(&new_filter, "%s && int_loglevel %s %d",
+ err = asprintf(&new_filter, "(%s) && (int_loglevel %s %d)",
jul_filter ? jul_filter : filter, op,
ev->loglevel);
if (jul_filter) {
ret = -LTTNG_ERR_FILTER_INVAL;
goto parse_error;
}
+ /* Validate strings used as literals in the expression */
+ ret = filter_visitor_ir_validate_string(ctx);
+ if (ret) {
+ ret = -LTTNG_ERR_FILTER_INVAL;
+ goto parse_error;
+ }
dbg_printf("done\n");
dbg_printf("Generating bytecode... ");
* filtering by logger name.
*/
if (exclusion_count == 0 && filter_expression == NULL &&
- handle->domain.type != LTTNG_DOMAIN_JUL) {
+ (handle->domain.type != LTTNG_DOMAIN_JUL &&
+ handle->domain.type != LTTNG_DOMAIN_LOG4J)) {
goto ask_sessiond;
}
*/
/* Parse filter expression */
- if (filter_expression != NULL || handle->domain.type == LTTNG_DOMAIN_JUL) {
- if (handle->domain.type == LTTNG_DOMAIN_JUL) {
+ if (filter_expression != NULL || handle->domain.type == LTTNG_DOMAIN_JUL
+ || handle->domain.type == LTTNG_DOMAIN_LOG4J) {
+ if (handle->domain.type == LTTNG_DOMAIN_JUL ||
+ handle->domain.type == LTTNG_DOMAIN_LOG4J) {
char *jul_filter;
/* Setup JUL filter if needed. */
lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
- if (name != NULL) {
+ if (name != NULL && *name != '*') {
lttng_ctl_copy_string(lsm.u.disable.name, name,
sizeof(lsm.u.disable.name));
lsm.cmd_type = LTTNG_DISABLE_EVENT;