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.










share|improve this question
























  • 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') 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










  • I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
    – Joshua Fox
    yesterday















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.










share|improve this question
























  • 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') 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










  • I narrowed this down to a Google library. See body. But I still don't know how to avoid it.
    – Joshua Fox
    yesterday













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.










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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. 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










  • 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










  • 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










  • 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

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














 

draft saved


draft discarded


















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






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















 

draft saved


draft discarded



















































 


draft saved


draft discarded














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





















































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







Popular posts from this blog

Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

A Topological Invariant for $pi_3(U(n))$