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)
 | |
| 
 |