Procházet zdrojové kódy

Optionally log stderr for processes.

Chris McDonough před 19 roky
rodič
revize
a66766700e
4 změnil soubory, kde provedl 9 přidání a 6 odebrání
  1. 0 2
      TODO.txt
  2. 1 0
      sample.conf
  3. 6 2
      src/supervisor/options.py
  4. 2 2
      src/supervisor/supervisord.py

+ 0 - 2
TODO.txt

@@ -12,8 +12,6 @@
 
    - Error conditions when X-bit not set on command file.
 
-- Option to include/disinclude stderr in child logs.
-
 - Unit test the http_client package.
 
 - Unit tests for meld classes and ui server.

+ 1 - 0
sample.conf

@@ -40,6 +40,7 @@ serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
 ;logfile_maxbytes=1MB        ; max # logfile bytes before rotation (default 5MB)
 ;stopsignal=QUIT             ; signal used to kill process (default TERM)
 ;exitcodes=0,2               ; 'expected' exit codes for process (default 0,2)
+;log_stderr=true             ; if true, log stderr mingled in stdout (def false)
 
 [program:cat]
 command=/bin/cat

+ 6 - 2
src/supervisor/options.py

@@ -730,6 +730,8 @@ class ServerOptions(Options):
                 exitcodes = datatypes.list_of_ints(exitcodes)
             except:
                 raise ValueError("exitcodes must be a list of ints e.g. 1,2")
+            log_stderr = config.saneget(section, 'log_stderr', 'false')
+            log_stderr = datatypes.boolean(log_stderr)
             pconfig = ProcessConfig(name=name, command=command,
                                     priority=priority, autostart=autostart,
                                     autorestart=autorestart, uid=uid,
@@ -737,7 +739,8 @@ class ServerOptions(Options):
                                     logfile_backups=logfile_backups,
                                     logfile_maxbytes=logfile_maxbytes,
                                     stopsignal=stopsignal,
-                                    exitcodes=exitcodes)
+                                    exitcodes=exitcodes,
+                                    log_stderr=log_stderr)
             programs.append(pconfig)
 
         programs.sort() # asc by priority
@@ -881,7 +884,7 @@ class UnhosedConfigParser(ConfigParser.RawConfigParser):
 class ProcessConfig:
     def __init__(self, name, command, priority, autostart, autorestart,
                  uid, logfile, logfile_backups, logfile_maxbytes, stopsignal,
-                 exitcodes):
+                 exitcodes, log_stderr):
         self.name = name
         self.command = command
         self.priority = priority
@@ -893,6 +896,7 @@ class ProcessConfig:
         self.logfile_maxbytes = logfile_maxbytes
         self.stopsignal = stopsignal
         self.exitcodes = exitcodes
+        self.log_stderr = log_stderr
 
     def __cmp__(self, other):
         return cmp(self.priority, other.priority)

+ 2 - 2
src/supervisor/supervisord.py

@@ -829,9 +829,9 @@ class Supervisor:
                     data = _readfd(fd)
                     stdoutproc.log_stdout(data)
                 if stderrproc:
-                    # we intermingle stdout and stderr in the child log
                     data = _readfd(fd)
-                    stderrproc.log_stderr(data)
+                    if stderrproc.config.log_stderr:
+                        stderrproc.log_stderr(data)
 
                 if socket_map.has_key(fd):
                     try: