Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Separate output for log file and stdout

Reply
Thread Tools

Separate output for log file and stdout

 
 
amit.uttam@gmail.com
Guest
Posts: n/a
 
      05-17-2008
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
 
Reply With Quote
 
 
 
 
amit.uttam@gmail.com
Guest
Posts: n/a
 
      05-19-2008
On May 16, 6:37 pm, Ben Finney <bignose+hates-s...@benfinney.id.au>
wrote:
> amit.ut...@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
 
Reply With Quote
 
 
 
 
Kam-Hung Soh
Guest
Posts: n/a
 
      05-19-2008
On Tue, 20 May 2008 06:58:28 +1000, <> wrote:

> On May 16, 6:37 pm, Ben Finney <bignose+hates-s...@benfinney.id.au>
> wrote:
>> amit.ut...@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" in http://docs.python.org/lib/module-subprocess.html

--
Kam-Hung Soh <a href="http://kamhungsoh.com/blog">Software Salariman</a>

 
Reply With Quote
 
amit.uttam@gmail.com
Guest
Posts: n/a
 
      05-21-2008
On May 19, 4:05 pm, "Kam-Hung Soh" <kamhung....@gmail.com> wrote:
> On Tue, 20 May 2008 06:58:28 +1000, <amit.ut...@gmail.com> wrote:
> > On May 16, 6:37 pm, Ben Finney <bignose+hates-s...@benfinney.id.au>
> > wrote:
> >> amit.ut...@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 <>
#

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
 
Reply With Quote
 
amit.uttam@gmail.com
Guest
Posts: n/a
 
      05-21-2008
On May 19, 4:05 pm, "Kam-Hung Soh" <kamhung....@gmail.com> wrote:
> On Tue, 20 May 2008 06:58:28 +1000, <amit.ut...@gmail.com> wrote:
> > On May 16, 6:37 pm, Ben Finney <bignose+hates-s...@benfinney.id.au>
> > wrote:
> >> amit.ut...@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 <>
#

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
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
IO.popen how to separate $stdout and $stderr Une Bévue Ruby 1 02-27-2008 12:52 AM
Separate Tabs, Separate Sessions BigAndy Firefox 0 05-09-2007 09:27 AM
Separate Tabs, Separate Sessions BigAndy Firefox 0 05-09-2007 09:26 AM
Using separate classpaths for separate classes? Frank Fredstone Java 1 06-27-2006 06:46 AM
How to use several separate classes (separate files) to be executed in one class (another file) EvgueniB Java 1 12-15-2003 01:18 AM



Advertisments