Logging from different python scripts to different output files
Peter Otten
__peter__ at web.de
Tue Mar 28 04:43:15 EDT 2017
James McMahon wrote:
> I'm struggling with Python logging. Have tried to apply several examples I
> have found in the open source literature, but can't get it to work. What I
> need to do is this: I have two python scripts, a.py and b.py. Each is
> called by NiFi ExecuteScript processor repeatedly against many incoming
> flowfiles. In every case I need to output log messages to two distinct and
> different log files. My scripts run in the same Python interpreter, which
> as i understand it means they rely on the same root level logger. I have
> tried establishing non-root loggers for each, and associating distinct
> file handles for each to those loggers.
>
> My output still appears in multiple log files, and appears to be repeating
> in increasing numbers each time I try a test run (first test, output line
> appeared in log once. second test, twice. third test, three times, etc).
> Is there an example that anyone knows of that demonstrates how two
> concurrently running python scripts within the same interpreter can direct
> output to two distinct log files? Thanks in advance for any help.
Here's a simple example:
$ cat logme.py
import logging
a = logging.getLogger("a")
b = logging.getLogger("b")
def add_handler(logger, filename):
if logger.hasHandlers():
print("add_handler() called twice for logger
{!r}".format(logger.name))
return
formatter = logging.Formatter(logging.BASIC_FORMAT)
handler = logging.FileHandler(filename)
handler.setFormatter(formatter)
logger.addHandler(handler)
add_handler(a, "logs/a.log")
add_handler(b, "logs/b.log")
a.warn("foo")
b.warn("bar")
The 'if logger.hasHandlers(): ...' check is for debugging purposes, in your
actual code a.py would only contain
import logging
a = logging.getLogger("a")
a.warn("whatever")
The corresponding setup code
import logging
a = logging.getLogger("a")
add_handler(a, "logs/a.log")
should only run once.
More information about the Python-list
mailing list