Separate output for log file and stdout
amit.uttam at gmail.com
amit.uttam at gmail.com
Wed May 21 18:48:48 EDT 2008
On May 19, 4:05 pm, "Kam-Hung Soh" <kamhung.... at gmail.com> wrote:
> On Tue, 20 May 2008 06:58:28 +1000, <amit.ut... at gmail.com> wrote:
> > On May 16, 6:37 pm, Ben Finney <bignose+hates-s... at benfinney.id.au>
> > wrote:
> >> amit.ut... at gmail.com writes:
> >> > I've recently jumped big time into python and I'm working on a
> >> > software program for testing automation.
>
> >> Welcome, to both fields :-)
>
> > Thanks! I am having a great time learning and coding in python. It's
> > an amazing programming language.
>
> >> > 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
>
> >> 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
> > --
> >http://mail.python.org/mailman/listinfo/python-list
>
> 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
>
> --
> Kam-Hung Soh <a href="http://kamhungsoh.com/blog">Software Salariman</a>
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 <auttamchandani at canoga.com>
#
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
More information about the Python-list
mailing list