Change the logger one will get when asking for root Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experience Should we burninate the [wrap] tag?Python logging from multiple threadsHow do you change the size of figures drawn with matplotlib?How to get the current time in PythonGetting the class name of an instance?Getting the last element of a list in PythonHow do I get the number of elements in a list in Python?Lazy logger message string evaluationuWSGI async functions don't know about Django's logging settingsWhat are the benefits of using Flask's logger instead of your own?python logging __name__ and packagingHow to configure logger in decorator class in python
What's the difference between `auto x = vector<int>()` and `vector<int> x`?
Does surprise arrest existing movement?
If 'B is more likely given A', then 'A is more likely given B'
Why aren't air breathing engines used as small first stages
Should I call the interviewer directly, if HR aren't responding?
How to recreate this effect in Photoshop?
What do you call a plan that's an alternative plan in case your initial plan fails?
What causes the vertical darker bands in my photo?
How to motivate offshore teams and trust them to deliver?
What are the pros and cons of Aerospike nosecones?
Did Xerox really develop the first LAN?
3 doors, three guards, one stone
Can a non-EU citizen traveling with me come with me through the EU passport line?
When -s is used with third person singular. What's its use in this context?
What is the correct way to use the pinch test for dehydration?
How to find all the available tools in macOS terminal?
How can players work together to take actions that are otherwise impossible?
Why is there no army of Iron-Mans in the MCU?
Should I discuss the type of campaign with my players?
How much radiation do nuclear physics experiments expose researchers to nowadays?
Is there a service that would inform me whenever a new direct route is scheduled from a given airport?
Is the address of a local variable a constexpr?
How can I fade player when goes inside or outside of the area?
Why was the term "discrete" used in discrete logarithm?
Change the logger one will get when asking for root
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
The Ask Question Wizard is Live!
Data science time! April 2019 and salary with experience
Should we burninate the [wrap] tag?Python logging from multiple threadsHow do you change the size of figures drawn with matplotlib?How to get the current time in PythonGetting the class name of an instance?Getting the last element of a list in PythonHow do I get the number of elements in a list in Python?Lazy logger message string evaluationuWSGI async functions don't know about Django's logging settingsWhat are the benefits of using Flask's logger instead of your own?python logging __name__ and packagingHow to configure logger in decorator class in python
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I'm using pythons logging utility for logging in multiple threads (concurrent). Unlike many examples on this (cookbook, another so question) I want each thread to log to its own file (keep the thread-logs separate). This works well by using a separate FileHandler
for each logger (and by explicitly getting a named logger for each thread) as shown in the below example.
Now the problem arises that I'd like to call more generic packages from within each thread and also from other places in the code that produce their owns loggings. How do I ensure their loggings are captured in the file belonging to the thread that called it?
import logging
import concurrent.futures
def generic_function(xyz):
logger = logging.getLogger(__name__)
logger.info("Very generic stuff")
def do_work(i):
logger = logging.getLogger(f'loggeri')
logger.setLevel(logging.INFO)
fh = logging.FileHandler(f'logging_i.log')
logger.addHandler(fh)
logger.info(f"BeeBaaBoo i")
generic_function(123)
return
outps = []
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
for i in range(10):
outp = executor.submit(do_work, i)
outps.append(outp)
for outp in outps:
if outp.exception() is not None:
raise outp.exception()
I know I can pass around the logger instance or its name, but that would require me to make the generic package more specific. I can change the generic package to adapt better logging principles but don't want to require it to expect my threading business.
Maybe it's possible to change the logger one will get when asking for a new one?
python multithreading logging concurrent.futures
add a comment |
I'm using pythons logging utility for logging in multiple threads (concurrent). Unlike many examples on this (cookbook, another so question) I want each thread to log to its own file (keep the thread-logs separate). This works well by using a separate FileHandler
for each logger (and by explicitly getting a named logger for each thread) as shown in the below example.
Now the problem arises that I'd like to call more generic packages from within each thread and also from other places in the code that produce their owns loggings. How do I ensure their loggings are captured in the file belonging to the thread that called it?
import logging
import concurrent.futures
def generic_function(xyz):
logger = logging.getLogger(__name__)
logger.info("Very generic stuff")
def do_work(i):
logger = logging.getLogger(f'loggeri')
logger.setLevel(logging.INFO)
fh = logging.FileHandler(f'logging_i.log')
logger.addHandler(fh)
logger.info(f"BeeBaaBoo i")
generic_function(123)
return
outps = []
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
for i in range(10):
outp = executor.submit(do_work, i)
outps.append(outp)
for outp in outps:
if outp.exception() is not None:
raise outp.exception()
I know I can pass around the logger instance or its name, but that would require me to make the generic package more specific. I can change the generic package to adapt better logging principles but don't want to require it to expect my threading business.
Maybe it's possible to change the logger one will get when asking for a new one?
python multithreading logging concurrent.futures
I could see putting each work item's logs in a separate file, but why would you want to segregate logs by thread? If you really want to do that, it should be the responsibility of the logHandler
rather than requiring a separateLogger
object for each thread.
– Daniel Pryden
Mar 8 at 16:38
Not sure if I understand your question. One work thread calculates everything about a human protein, its binding site, its moleculary interaction field, its associated ligand bindings etc. The next thread does the same thing, for another protein. During these calculations there are all sorts of things that work and don't work, I'd like to keep a track of that per protein. If I send this all to the same file, output from different protein's will be all interleaved. Still think I shouldn't want this or do it differently? I'd like to hear,...
– Bastiaan
Mar 8 at 16:46
1
My point is that you don't need a separateLogger
to get separate output. ALogger
is a source of log messages; aHandler
is what produces output. If you want to define a context for a series of log messages that are related (so that aHandler
can do something different with them), you probably want to use aFilter
that reads from a thread-local variable.
– Daniel Pryden
Mar 8 at 18:11
Ah, that could be it! And the filter can be different for the same library depending on where it got called from?
– Bastiaan
Mar 8 at 19:20
add a comment |
I'm using pythons logging utility for logging in multiple threads (concurrent). Unlike many examples on this (cookbook, another so question) I want each thread to log to its own file (keep the thread-logs separate). This works well by using a separate FileHandler
for each logger (and by explicitly getting a named logger for each thread) as shown in the below example.
Now the problem arises that I'd like to call more generic packages from within each thread and also from other places in the code that produce their owns loggings. How do I ensure their loggings are captured in the file belonging to the thread that called it?
import logging
import concurrent.futures
def generic_function(xyz):
logger = logging.getLogger(__name__)
logger.info("Very generic stuff")
def do_work(i):
logger = logging.getLogger(f'loggeri')
logger.setLevel(logging.INFO)
fh = logging.FileHandler(f'logging_i.log')
logger.addHandler(fh)
logger.info(f"BeeBaaBoo i")
generic_function(123)
return
outps = []
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
for i in range(10):
outp = executor.submit(do_work, i)
outps.append(outp)
for outp in outps:
if outp.exception() is not None:
raise outp.exception()
I know I can pass around the logger instance or its name, but that would require me to make the generic package more specific. I can change the generic package to adapt better logging principles but don't want to require it to expect my threading business.
Maybe it's possible to change the logger one will get when asking for a new one?
python multithreading logging concurrent.futures
I'm using pythons logging utility for logging in multiple threads (concurrent). Unlike many examples on this (cookbook, another so question) I want each thread to log to its own file (keep the thread-logs separate). This works well by using a separate FileHandler
for each logger (and by explicitly getting a named logger for each thread) as shown in the below example.
Now the problem arises that I'd like to call more generic packages from within each thread and also from other places in the code that produce their owns loggings. How do I ensure their loggings are captured in the file belonging to the thread that called it?
import logging
import concurrent.futures
def generic_function(xyz):
logger = logging.getLogger(__name__)
logger.info("Very generic stuff")
def do_work(i):
logger = logging.getLogger(f'loggeri')
logger.setLevel(logging.INFO)
fh = logging.FileHandler(f'logging_i.log')
logger.addHandler(fh)
logger.info(f"BeeBaaBoo i")
generic_function(123)
return
outps = []
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
for i in range(10):
outp = executor.submit(do_work, i)
outps.append(outp)
for outp in outps:
if outp.exception() is not None:
raise outp.exception()
I know I can pass around the logger instance or its name, but that would require me to make the generic package more specific. I can change the generic package to adapt better logging principles but don't want to require it to expect my threading business.
Maybe it's possible to change the logger one will get when asking for a new one?
python multithreading logging concurrent.futures
python multithreading logging concurrent.futures
edited Mar 8 at 16:32
Bastiaan
asked Mar 8 at 16:25
BastiaanBastiaan
2,03311523
2,03311523
I could see putting each work item's logs in a separate file, but why would you want to segregate logs by thread? If you really want to do that, it should be the responsibility of the logHandler
rather than requiring a separateLogger
object for each thread.
– Daniel Pryden
Mar 8 at 16:38
Not sure if I understand your question. One work thread calculates everything about a human protein, its binding site, its moleculary interaction field, its associated ligand bindings etc. The next thread does the same thing, for another protein. During these calculations there are all sorts of things that work and don't work, I'd like to keep a track of that per protein. If I send this all to the same file, output from different protein's will be all interleaved. Still think I shouldn't want this or do it differently? I'd like to hear,...
– Bastiaan
Mar 8 at 16:46
1
My point is that you don't need a separateLogger
to get separate output. ALogger
is a source of log messages; aHandler
is what produces output. If you want to define a context for a series of log messages that are related (so that aHandler
can do something different with them), you probably want to use aFilter
that reads from a thread-local variable.
– Daniel Pryden
Mar 8 at 18:11
Ah, that could be it! And the filter can be different for the same library depending on where it got called from?
– Bastiaan
Mar 8 at 19:20
add a comment |
I could see putting each work item's logs in a separate file, but why would you want to segregate logs by thread? If you really want to do that, it should be the responsibility of the logHandler
rather than requiring a separateLogger
object for each thread.
– Daniel Pryden
Mar 8 at 16:38
Not sure if I understand your question. One work thread calculates everything about a human protein, its binding site, its moleculary interaction field, its associated ligand bindings etc. The next thread does the same thing, for another protein. During these calculations there are all sorts of things that work and don't work, I'd like to keep a track of that per protein. If I send this all to the same file, output from different protein's will be all interleaved. Still think I shouldn't want this or do it differently? I'd like to hear,...
– Bastiaan
Mar 8 at 16:46
1
My point is that you don't need a separateLogger
to get separate output. ALogger
is a source of log messages; aHandler
is what produces output. If you want to define a context for a series of log messages that are related (so that aHandler
can do something different with them), you probably want to use aFilter
that reads from a thread-local variable.
– Daniel Pryden
Mar 8 at 18:11
Ah, that could be it! And the filter can be different for the same library depending on where it got called from?
– Bastiaan
Mar 8 at 19:20
I could see putting each work item's logs in a separate file, but why would you want to segregate logs by thread? If you really want to do that, it should be the responsibility of the log
Handler
rather than requiring a separate Logger
object for each thread.– Daniel Pryden
Mar 8 at 16:38
I could see putting each work item's logs in a separate file, but why would you want to segregate logs by thread? If you really want to do that, it should be the responsibility of the log
Handler
rather than requiring a separate Logger
object for each thread.– Daniel Pryden
Mar 8 at 16:38
Not sure if I understand your question. One work thread calculates everything about a human protein, its binding site, its moleculary interaction field, its associated ligand bindings etc. The next thread does the same thing, for another protein. During these calculations there are all sorts of things that work and don't work, I'd like to keep a track of that per protein. If I send this all to the same file, output from different protein's will be all interleaved. Still think I shouldn't want this or do it differently? I'd like to hear,...
– Bastiaan
Mar 8 at 16:46
Not sure if I understand your question. One work thread calculates everything about a human protein, its binding site, its moleculary interaction field, its associated ligand bindings etc. The next thread does the same thing, for another protein. During these calculations there are all sorts of things that work and don't work, I'd like to keep a track of that per protein. If I send this all to the same file, output from different protein's will be all interleaved. Still think I shouldn't want this or do it differently? I'd like to hear,...
– Bastiaan
Mar 8 at 16:46
1
1
My point is that you don't need a separate
Logger
to get separate output. A Logger
is a source of log messages; a Handler
is what produces output. If you want to define a context for a series of log messages that are related (so that a Handler
can do something different with them), you probably want to use a Filter
that reads from a thread-local variable.– Daniel Pryden
Mar 8 at 18:11
My point is that you don't need a separate
Logger
to get separate output. A Logger
is a source of log messages; a Handler
is what produces output. If you want to define a context for a series of log messages that are related (so that a Handler
can do something different with them), you probably want to use a Filter
that reads from a thread-local variable.– Daniel Pryden
Mar 8 at 18:11
Ah, that could be it! And the filter can be different for the same library depending on where it got called from?
– Bastiaan
Mar 8 at 19:20
Ah, that could be it! And the filter can be different for the same library depending on where it got called from?
– Bastiaan
Mar 8 at 19:20
add a comment |
0
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',
autoActivateHeartbeat: false,
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
);
);
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%2f55067183%2fchange-the-logger-one-will-get-when-asking-for-root%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
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%2f55067183%2fchange-the-logger-one-will-get-when-asking-for-root%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
I could see putting each work item's logs in a separate file, but why would you want to segregate logs by thread? If you really want to do that, it should be the responsibility of the log
Handler
rather than requiring a separateLogger
object for each thread.– Daniel Pryden
Mar 8 at 16:38
Not sure if I understand your question. One work thread calculates everything about a human protein, its binding site, its moleculary interaction field, its associated ligand bindings etc. The next thread does the same thing, for another protein. During these calculations there are all sorts of things that work and don't work, I'd like to keep a track of that per protein. If I send this all to the same file, output from different protein's will be all interleaved. Still think I shouldn't want this or do it differently? I'd like to hear,...
– Bastiaan
Mar 8 at 16:46
1
My point is that you don't need a separate
Logger
to get separate output. ALogger
is a source of log messages; aHandler
is what produces output. If you want to define a context for a series of log messages that are related (so that aHandler
can do something different with them), you probably want to use aFilter
that reads from a thread-local variable.– Daniel Pryden
Mar 8 at 18:11
Ah, that could be it! And the filter can be different for the same library depending on where it got called from?
– Bastiaan
Mar 8 at 19:20