You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							1.3 KiB
						
					
					
				import os
 | 
						|
import time
 | 
						|
 | 
						|
 | 
						|
class Logger(object):
 | 
						|
  def __init__(self, root, init_data):
 | 
						|
    self.root = root
 | 
						|
    self.init_data = init_data
 | 
						|
 | 
						|
    self.part = None
 | 
						|
    self.data_dir = None
 | 
						|
    self.cur_dir = None
 | 
						|
    self.log_file = None
 | 
						|
    self.started = False
 | 
						|
    self.log_path = None
 | 
						|
    self.lock_path = None
 | 
						|
    self.log_file = None
 | 
						|
 | 
						|
  def open(self):
 | 
						|
    self.data_dir = self.cur_dir + "--" + str(self.part)
 | 
						|
 | 
						|
    try:
 | 
						|
      os.makedirs(self.data_dir)
 | 
						|
    except OSError:
 | 
						|
      pass
 | 
						|
 | 
						|
    self.log_path = os.path.join(self.data_dir, "rlog")
 | 
						|
    self.lock_path = self.log_path + ".lock"
 | 
						|
 | 
						|
    open(self.lock_path, "wb").close()
 | 
						|
    self.log_file = open(self.log_path, "wb")
 | 
						|
    self.log_file.write(self.init_data)
 | 
						|
 | 
						|
  def start(self):
 | 
						|
    self.part = 0
 | 
						|
    self.cur_dir = self.root + time.strftime("%Y-%m-%d--%H-%M-%S")
 | 
						|
 | 
						|
    self.open()
 | 
						|
 | 
						|
    self.started = True
 | 
						|
 | 
						|
    return self.data_dir, self.part
 | 
						|
 | 
						|
  def stop(self):
 | 
						|
    if not self.started:
 | 
						|
      return
 | 
						|
    self.log_file.close()
 | 
						|
    os.unlink(self.lock_path)
 | 
						|
    self.started = False
 | 
						|
 | 
						|
  def rotate(self):
 | 
						|
    old_lock_path = self.lock_path
 | 
						|
    old_log_file = self.log_file
 | 
						|
    self.part += 1
 | 
						|
    self.open()
 | 
						|
 | 
						|
    old_log_file.close()
 | 
						|
    os.unlink(old_lock_path)
 | 
						|
 | 
						|
    return self.data_dir, self.part
 | 
						|
 | 
						|
  def log_data(self, d):
 | 
						|
    if not self.started:
 | 
						|
      return
 | 
						|
    self.log_file.write(d)
 | 
						|
 |