logging and propagation

O

oj

Hi,

I want to setup logging with two loggers:

The child logger is used when something different needs to be done
with the log record, and the log record will propagate and be logged
by the root logger as usual.

However, there are certain times when I don't want a log record to
propagate from the child to the parent.

I don't really want to add a filter to the root logger, as it should
be up to the child whether the record propagates or not.

I've tried setting the child to a lower level then the parent, but if
a record is dealt with by the child, the parent deals with it anyway
regardless of its own log level.

Also, filters only apply particular handlers and do not affect
propagation.

Can anyone suggest a simple way to achieve this?

Currently, the only thing I can think of, is overriding the
callHandlers method in a custom Logger class.
 
P

Paul Rudin

oj said:
Hi,

I want to setup logging with two loggers:

The child logger is used when something different needs to be done
with the log record, and the log record will propagate and be logged
by the root logger as usual.

However, there are certain times when I don't want a log record to
propagate from the child to the parent.

I don't really want to add a filter to the root logger, as it should
be up to the child whether the record propagates or not.

I've tried setting the child to a lower level then the parent, but if
a record is dealt with by the child, the parent deals with it anyway
regardless of its own log level.

Also, filters only apply particular handlers and do not affect
propagation.

Can anyone suggest a simple way to achieve this?

Currently, the only thing I can think of, is overriding the
callHandlers method in a custom Logger class.

Loggers have a "propagate" attribute. If you set this to False in the
child then you should get what you want I think.
 
O

oj

Loggers have a "propagate" attribute. If you set this to False in the
child then you should get what you want I think.

No, because I want message to propagate usually. There are only
specific instances when I don't want it to propagate.
 
P

Paul Rudin

oj said:
No, because I want message to propagate usually. There are only
specific instances when I don't want it to propagate.

Can't you set propagate to False during those specific instances and 1
the rest of the time?
 
D

Diez B. Roggisch

Paul said:
Can't you set propagate to False during those specific instances and 1
the rest of the time?

That calls for concurrency-issues, doesn't it?

I think he will have to go down the subclass-route.

Diez
 
V

Vinay Sajip

Hi,

I want to setuploggingwith two loggers:

The child logger is used when something different needs to be done
with the log record, and the log record will propagate and be logged
by the root logger as usual.

However, there are certain times when I don't want a log record to
propagate from the child to the parent.

I don't really want to add a filter to the root logger, as it should
be up to the child whether the record propagates or not.

I've tried setting the child to a lower level then the parent, but if
a record is dealt with by the child, the parent deals with it anyway
regardless of its own log level.

Also, filters only apply particular handlers and do not affect
propagation.

Can anyone suggest a simple way to achieve this?

Currently, the only thing I can think of, is overriding the
callHandlers method in a custom Logger class.

Do you already have a Logger subclass? Where and when is the decision
being made about whether to propagate or not?
 
O

oj

Do you already have a Logger subclass? Where and when is the decision
being made about whether to propagate or not?

The decision is being made in a filter. Certain log records are dealt
with differently from there.

The filter also prevents the handler from dealing with those log
records, but it doesn't stop the handlers of parent loggers dealing
with them.
 
V

Vinay Sajip

The decision is being made in a filter. Certain log records are dealt
with differently from there.

The filter also prevents the handler from dealing with those log
records, but it doesn't stop the handlers of parent loggers dealing
with them.

Why not apply the same filter to the parent loggers?
 
V

Vinay Sajip

Why not apply the same filter to the parent loggers?

Of course, you can apply filters at the loggers or the handlers. The
filters at the logger are checked first. If they pass, then the event
is handled - and filters at the handlers get to participate.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,479
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top