Separate output for log file and stdout

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • amit.uttam@gmail.com

    Separate output for log file and stdout

    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
  • Ben Finney

    #2
    Re: Separate output for log file and stdout

    amit.uttam@gmai l.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 :-)
    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.

    --
    \ "I went to the hardware store and bought some used paint. It |
    `\ was in the shape of a house." -- Steven Wright |
    _o__) |
    Ben Finney

    Comment

    • amit.uttam@gmail.com

      #3
      Re: Separate output for log file and stdout

      On May 16, 6:37 pm, Ben Finney <bignose+hate s-s...@benfinney. id.au>
      wrote:
      amit.ut...@gmai l.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

      Comment

      • Kam-Hung Soh

        #4
        Re: Separate output for log file and stdout

        On Tue, 20 May 2008 06:58:28 +1000, <amit.uttam@gma il.comwrote:
        On May 16, 6:37 pm, Ben Finney <bignose+hate s-s...@benfinney. id.au>
        wrote:
        >amit.ut...@gma il.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
        --

        >
        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_PA TH,
        format='%(ascti me)s,%(levelnam e)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>

        Comment

        • amit.uttam@gmail.com

          #5
          Re: Separate output for log file and stdout

          On May 19, 4:05 pm, "Kam-Hung Soh" <kamhung....@gm ail.comwrote:
          On Tue, 20 May 2008 06:58:28 +1000, <amit.ut...@gma il.comwrote:
          On May 16, 6:37 pm, Ben Finney <bignose+hate s-s...@benfinney. id.au>
          wrote:
          amit.ut...@gmai l.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?
          >>
          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_PA TH,
          format='%(ascti me)s,%(levelnam e)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 @canoga.com>
          #

          import os
          import sys

          logfile = None
          global logfile

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

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

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

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

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


          Thanks,
          Amit

          Comment

          • amit.uttam@gmail.com

            #6
            Re: Separate output for log file and stdout

            On May 19, 4:05 pm, "Kam-Hung Soh" <kamhung....@gm ail.comwrote:
            On Tue, 20 May 2008 06:58:28 +1000, <amit.ut...@gma il.comwrote:
            On May 16, 6:37 pm, Ben Finney <bignose+hate s-s...@benfinney. id.au>
            wrote:
            amit.ut...@gmai l.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?
            >>
            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_PA TH,
            format='%(ascti me)s,%(levelnam e)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 @canoga.com>
            #

            import os
            import sys

            logfile = None
            global logfile

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

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

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

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

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


            Thanks,
            Amit

            Comment

            Working...