Separate output for log file and stdout

A

amit.uttam

Hey everyone,

I've recently jumped big time into python and I'm working on a
software program for testing automation. I had a question about proper
logging of output. What I would like is:

1. a function syslog (to log output to log file only)
2. a function stdout (to log output to stdout only)
3. a function sslog (to log output to both log and stdout)

Right now I am using StandOut module http://www.voidspace.org.uk/python/standout.html

It is quite useful but I can't seem to get good fine grained control
as my requirements.

How do the rest of you guys (gals) do this logging?

Thanks,
Amit
 
A

amit.uttam

Welcome, to both fields :)

Thanks! I am having a great time learning and coding in python. It's
an amazing programming language.
Have you investigated the 'logging' module in the Python standard
library <URL:http://www.python.org/doc/lib/module-logging>? It appears
to meet your listed requirements, without need of external
dependencies.

Hmm..Yeah I didn't realize python had its own standard logging
facility. I took a look at it and it seems to do the job. However, the
output seems to be syslog style output. In the program I am writing,
the log file stores all the output of the commands being run (e.g. tcl
scripts, etc). Will this be possible using the built in python logging
module?

Thanks,
Amit
 
K

Kam-Hung Soh

Thanks! I am having a great time learning and coding in python. It's
an amazing programming language.


Hmm..Yeah I didn't realize python had its own standard logging
facility. I took a look at it and it seems to do the job. However, the
output seems to be syslog style output. In the program I am writing,
the log file stores all the output of the commands being run (e.g. tcl
scripts, etc). Will this be possible using the built in python logging
module?

Thanks,
Amit

You can define the format of the log output in basicConfig(), for example:

from logging import basicConfig, error, info, INFO
....
basicConfig(
datefmt='%Y%m%d_T%H%M%S',
filemode='a',
filename=LOG_PATH,
format='%(asctime)s,%(levelname)s,%(message)s',
level=INFO
)

If you want to log the output of other commands in your log file, you can
connect a pipe to that command. Maybe look at "subprocess -- Subprocess
management" in http://docs.python.org/lib/module-subprocess.html
 
A

amit.uttam

You can define the format of the log output in basicConfig(), for example:

from logging import basicConfig, error, info, INFO
...
basicConfig(
datefmt='%Y%m%d_T%H%M%S',
filemode='a',
filename=LOG_PATH,
format='%(asctime)s,%(levelname)s,%(message)s',
level=INFO
)

If you want to log the output of other commands in your log file, you can
connect a pipe to that command. Maybe look at "subprocess -- Subprocess
management" inhttp://docs.python.org/lib/module-subprocess.html

Thanks for the reply.

Yeah I am using the subprocess module and I am able to capture the
output and save it to log a file. However, looking at module-logging
the output format is like syslog. What I want is my own custom log
file format. I wrote a separate module containing all the functions
for the logging but I can't seem to use it globally. How does one use
global variables in python?

Code:

# log.py - A base class that provides logging functionality.
#
# Copyright 2008 Amit Uttamchandani <[email protected]>
#

import os
import sys

logfile = None
global logfile

def createLogFile(filename):
'''Opens a file for logging.'''
try:
logfile = open(filename, 'w')
except IOError:
print 'Error: Cannot create log file: %s' %
os.abspath(logfile)
sys.exit(0)

def stdlog(logstr):
'''Writes output to stdout.'''
sys.stdout.write(logstr)

def syslog(logstr):
'''Writes output to logfile.'''
logfile.write(logstr)

def agglog(logstr):
'''Aggregate output of logstr.'''
syslog(logstr)
stdlog(logstr)

def closeLogFile():
'''Closes the log file.'''
logfile.close()


Thanks,
Amit
 
A

amit.uttam

You can define the format of the log output in basicConfig(), for example:

from logging import basicConfig, error, info, INFO
...
basicConfig(
datefmt='%Y%m%d_T%H%M%S',
filemode='a',
filename=LOG_PATH,
format='%(asctime)s,%(levelname)s,%(message)s',
level=INFO
)

If you want to log the output of other commands in your log file, you can
connect a pipe to that command. Maybe look at "subprocess -- Subprocess
management" inhttp://docs.python.org/lib/module-subprocess.html

Thanks for the reply.

Yeah I am using the subprocess module and I am able to capture the
output and save it to log a file. However, looking at module-logging
the output format is like syslog. What I want is my own custom log
file format. I wrote a separate module containing all the functions
for the logging but I can't seem to use it globally. How does one use
global variables in python?

Code:

# log.py - A base class that provides logging functionality.
#
# Copyright 2008 Amit Uttamchandani <[email protected]>
#

import os
import sys

logfile = None
global logfile

def createLogFile(filename):
'''Opens a file for logging.'''
try:
logfile = open(filename, 'w')
except IOError:
print 'Error: Cannot create log file: %s' %
os.abspath(logfile)
sys.exit(0)

def stdlog(logstr):
'''Writes output to stdout.'''
sys.stdout.write(logstr)

def syslog(logstr):
'''Writes output to logfile.'''
logfile.write(logstr)

def agglog(logstr):
'''Aggregate output of logstr.'''
syslog(logstr)
stdlog(logstr)

def closeLogFile():
'''Closes the log file.'''
logfile.close()


Thanks,
Amit
 

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

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,020
Latest member
GenesisGai

Latest Threads

Top