]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/daklog.py
Add by-hash support
[dak.git] / daklib / daklog.py
index 7ececa560ebc74f5405dfc8f73a571b77691a9ca..a698cbc53fc5d754fb3ec2392aab73b299c3e1eb 100644 (file)
@@ -24,6 +24,7 @@ Logging functions
 
 ################################################################################
 
+import fcntl
 import os
 import pwd
 import time
@@ -55,7 +56,7 @@ class Logger(object):
         logdir = Config()["Dir::Log"]
         if not os.path.exists(logdir):
             umask = os.umask(00000)
-            os.makedirs(logdir, 02775)
+            os.makedirs(logdir, 0o2775)
             os.umask(umask)
 
         # Open the logfile
@@ -65,7 +66,7 @@ class Logger(object):
         if debug:
             logfile = sys.stderr
         else:
-            umask = os.umask(00002)
+            umask = os.umask(0o0002)
             logfile = utils.open_file(logfilename, 'a')
             os.umask(umask)
 
@@ -80,13 +81,14 @@ class Logger(object):
         details.insert(0, timestamp)
         # Force the contents of the list to be string.join-able
         details = [ str(i) for i in details ]
+        fcntl.lockf(self.logfile, fcntl.LOCK_EX)
         # Write out the log in TSV
         self.logfile.write("|".join(details)+'\n')
         # Flush the output to enable tail-ing
         self.logfile.flush()
+        fcntl.lockf(self.logfile, fcntl.LOCK_UN)
 
     def close (self):
         "Close a Logger object"
         self.log(["program end"])
-        self.logfile.flush()
         self.logfile.close()