Separate output for log file and stdout

amit.uttam at gmail.com amit.uttam at gmail.com
Wed May 21 18:59:39 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