Why is the Google Cloud Python library adding redundant logging?
up vote
1
down vote
favorite
During from google.cloud import pubsub_v1
, the Google library adds a StreamHandler
to the root logger.
This means that with my own logger, each line appears twice.
INFO:thelogger:Retrieving result for miqxxgcfuv, status Pending
2018-11-18 21:17:22;INFO;Retrieving result for miqxxgcfuv, status Pending
Setting the handlers=
on the root logger resolves this, but then various libraries including the Google libraries do not log at all, and I do want their logs.
python logging google-cloud-platform google-cloud-pubsub
|
show 1 more comment
up vote
1
down vote
favorite
During from google.cloud import pubsub_v1
, the Google library adds a StreamHandler
to the root logger.
This means that with my own logger, each line appears twice.
INFO:thelogger:Retrieving result for miqxxgcfuv, status Pending
2018-11-18 21:17:22;INFO;Retrieving result for miqxxgcfuv, status Pending
Setting the handlers=
on the root logger resolves this, but then various libraries including the Google libraries do not log at all, and I do want their logs.
python logging google-cloud-platform google-cloud-pubsub
How are you creating your logger? Possible you're using the default configuration and then adding an additional handler on top.
– n8sty
yesterday
I am creating it with the ordinary constructor logging.getLogger("thelogger"). You say "using the default configuration" -- how do I avoid that?
– Joshua Fox
yesterday
You're almost definitely adding multiple handlers. Runningimport logging; logger=logging.getLogger('thelogger'); logger.addHandler(logging.StreamHandler()); logger.setLevel(logging.INFO); logger.warning('hi')
returnshi
. If you run that same command twice, the second invocation will print hi to the console twice. The order in which a logger is created matters so it's hard to say exactly why you're getting what you're getting without you showing what you're doing.
– n8sty
yesterday
In the line after the double-logging thelogger.info("xxx), I tried print(thelogger.handlers). It shows "[<StreamHandler <stdout> (INFO)>]" -- in other words, only one Handler. But note -- this occurs under Flask [edited main body]. When I run, e.g. a unittest, I don't get this doubling
– Joshua Fox
yesterday
I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
– Joshua Fox
yesterday
|
show 1 more comment
up vote
1
down vote
favorite
up vote
1
down vote
favorite
During from google.cloud import pubsub_v1
, the Google library adds a StreamHandler
to the root logger.
This means that with my own logger, each line appears twice.
INFO:thelogger:Retrieving result for miqxxgcfuv, status Pending
2018-11-18 21:17:22;INFO;Retrieving result for miqxxgcfuv, status Pending
Setting the handlers=
on the root logger resolves this, but then various libraries including the Google libraries do not log at all, and I do want their logs.
python logging google-cloud-platform google-cloud-pubsub
During from google.cloud import pubsub_v1
, the Google library adds a StreamHandler
to the root logger.
This means that with my own logger, each line appears twice.
INFO:thelogger:Retrieving result for miqxxgcfuv, status Pending
2018-11-18 21:17:22;INFO;Retrieving result for miqxxgcfuv, status Pending
Setting the handlers=
on the root logger resolves this, but then various libraries including the Google libraries do not log at all, and I do want their logs.
python logging google-cloud-platform google-cloud-pubsub
python logging google-cloud-platform google-cloud-pubsub
edited 7 hours ago
asked yesterday
Joshua Fox
7,65595076
7,65595076
How are you creating your logger? Possible you're using the default configuration and then adding an additional handler on top.
– n8sty
yesterday
I am creating it with the ordinary constructor logging.getLogger("thelogger"). You say "using the default configuration" -- how do I avoid that?
– Joshua Fox
yesterday
You're almost definitely adding multiple handlers. Runningimport logging; logger=logging.getLogger('thelogger'); logger.addHandler(logging.StreamHandler()); logger.setLevel(logging.INFO); logger.warning('hi')
returnshi
. If you run that same command twice, the second invocation will print hi to the console twice. The order in which a logger is created matters so it's hard to say exactly why you're getting what you're getting without you showing what you're doing.
– n8sty
yesterday
In the line after the double-logging thelogger.info("xxx), I tried print(thelogger.handlers). It shows "[<StreamHandler <stdout> (INFO)>]" -- in other words, only one Handler. But note -- this occurs under Flask [edited main body]. When I run, e.g. a unittest, I don't get this doubling
– Joshua Fox
yesterday
I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
– Joshua Fox
yesterday
|
show 1 more comment
How are you creating your logger? Possible you're using the default configuration and then adding an additional handler on top.
– n8sty
yesterday
I am creating it with the ordinary constructor logging.getLogger("thelogger"). You say "using the default configuration" -- how do I avoid that?
– Joshua Fox
yesterday
You're almost definitely adding multiple handlers. Runningimport logging; logger=logging.getLogger('thelogger'); logger.addHandler(logging.StreamHandler()); logger.setLevel(logging.INFO); logger.warning('hi')
returnshi
. If you run that same command twice, the second invocation will print hi to the console twice. The order in which a logger is created matters so it's hard to say exactly why you're getting what you're getting without you showing what you're doing.
– n8sty
yesterday
In the line after the double-logging thelogger.info("xxx), I tried print(thelogger.handlers). It shows "[<StreamHandler <stdout> (INFO)>]" -- in other words, only one Handler. But note -- this occurs under Flask [edited main body]. When I run, e.g. a unittest, I don't get this doubling
– Joshua Fox
yesterday
I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
– Joshua Fox
yesterday
How are you creating your logger? Possible you're using the default configuration and then adding an additional handler on top.
– n8sty
yesterday
How are you creating your logger? Possible you're using the default configuration and then adding an additional handler on top.
– n8sty
yesterday
I am creating it with the ordinary constructor logging.getLogger("thelogger"). You say "using the default configuration" -- how do I avoid that?
– Joshua Fox
yesterday
I am creating it with the ordinary constructor logging.getLogger("thelogger"). You say "using the default configuration" -- how do I avoid that?
– Joshua Fox
yesterday
You're almost definitely adding multiple handlers. Running
import logging; logger=logging.getLogger('thelogger'); logger.addHandler(logging.StreamHandler()); logger.setLevel(logging.INFO); logger.warning('hi')
returns hi
. If you run that same command twice, the second invocation will print hi to the console twice. The order in which a logger is created matters so it's hard to say exactly why you're getting what you're getting without you showing what you're doing.– n8sty
yesterday
You're almost definitely adding multiple handlers. Running
import logging; logger=logging.getLogger('thelogger'); logger.addHandler(logging.StreamHandler()); logger.setLevel(logging.INFO); logger.warning('hi')
returns hi
. If you run that same command twice, the second invocation will print hi to the console twice. The order in which a logger is created matters so it's hard to say exactly why you're getting what you're getting without you showing what you're doing.– n8sty
yesterday
In the line after the double-logging thelogger.info("xxx), I tried print(thelogger.handlers). It shows "[<StreamHandler <stdout> (INFO)>]" -- in other words, only one Handler. But note -- this occurs under Flask [edited main body]. When I run, e.g. a unittest, I don't get this doubling
– Joshua Fox
yesterday
In the line after the double-logging thelogger.info("xxx), I tried print(thelogger.handlers). It shows "[<StreamHandler <stdout> (INFO)>]" -- in other words, only one Handler. But note -- this occurs under Flask [edited main body]. When I run, e.g. a unittest, I don't get this doubling
– Joshua Fox
yesterday
I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
– Joshua Fox
yesterday
I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
– Joshua Fox
yesterday
|
show 1 more comment
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53364595%2fwhy-is-the-google-cloud-python-library-adding-redundant-logging%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
How are you creating your logger? Possible you're using the default configuration and then adding an additional handler on top.
– n8sty
yesterday
I am creating it with the ordinary constructor logging.getLogger("thelogger"). You say "using the default configuration" -- how do I avoid that?
– Joshua Fox
yesterday
You're almost definitely adding multiple handlers. Running
import logging; logger=logging.getLogger('thelogger'); logger.addHandler(logging.StreamHandler()); logger.setLevel(logging.INFO); logger.warning('hi')
returnshi
. If you run that same command twice, the second invocation will print hi to the console twice. The order in which a logger is created matters so it's hard to say exactly why you're getting what you're getting without you showing what you're doing.– n8sty
yesterday
In the line after the double-logging thelogger.info("xxx), I tried print(thelogger.handlers). It shows "[<StreamHandler <stdout> (INFO)>]" -- in other words, only one Handler. But note -- this occurs under Flask [edited main body]. When I run, e.g. a unittest, I don't get this doubling
– Joshua Fox
yesterday
I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
– Joshua Fox
yesterday