mirror of
				https://github.com/jlu5/PyLink.git
				synced 2025-10-31 15:07:25 +01:00 
			
		
		
		
	core: rehashable file loggers with log rotation support
Closes #176. Closes #315.
This commit is contained in:
		
							parent
							
								
									06ecc89603
								
							
						
					
					
						commit
						126a07bdf6
					
				| @ -5,7 +5,7 @@ import signal | ||||
| import os | ||||
| 
 | ||||
| from pylinkirc import world, utils, conf, classes | ||||
| from pylinkirc.log import log | ||||
| from pylinkirc.log import log, makeFileLogger, stopFileLoggers | ||||
| 
 | ||||
| def remove_network(ircobj): | ||||
|     """Removes a network object from the pool.""" | ||||
| @ -47,6 +47,14 @@ def _rehash(): | ||||
|     new_conf = conf.loadConf(fname, errors_fatal=False) | ||||
|     new_conf = conf.validateConf(new_conf) | ||||
|     conf.conf = new_conf | ||||
| 
 | ||||
|     # Reset any file logger options. | ||||
|     stopFileLoggers() | ||||
|     files = new_conf['logging'].get('files') | ||||
|     if files: | ||||
|         for filename, config in files.items(): | ||||
|             makeFileLogger(filename, config.get('loglevel')) | ||||
| 
 | ||||
|     for network, ircobj in world.networkobjects.copy().items(): | ||||
|         # Server was removed from the config file, disconnect them. | ||||
|         log.debug('rehash: checking if %r is in new conf still.', network) | ||||
|  | ||||
							
								
								
									
										19
									
								
								log.py
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								log.py
									
									
									
									
									
								
							| @ -7,12 +7,16 @@ access the global logger object by importing "log" from this module | ||||
| """ | ||||
| 
 | ||||
| import logging | ||||
| import logging.handlers | ||||
| import sys | ||||
| import os | ||||
| 
 | ||||
| from . import world | ||||
| from .conf import conf, confname | ||||
| 
 | ||||
| # Stores a list of active file loggers. | ||||
| fileloggers = [] | ||||
| 
 | ||||
| stdout_level = conf['logging'].get('stdout') or 'INFO' | ||||
| 
 | ||||
| logdir = os.path.join(os.getcwd(), 'log') | ||||
| @ -43,7 +47,8 @@ def makeFileLogger(filename, level=None): | ||||
|     # PyLink instances from overwriting each others' log files. | ||||
|     target = os.path.join(logdir, '%s-%s.log' % (confname, filename)) | ||||
| 
 | ||||
|     filelogger = logging.FileHandler(target, mode='w') | ||||
|     # TODO: configurable values here | ||||
|     filelogger = logging.handlers.RotatingFileHandler(target, maxBytes=52428800, backupCount=5) | ||||
|     filelogger.setFormatter(logformatter) | ||||
| 
 | ||||
|     # If no log level is specified, use the same one as STDOUT. | ||||
| @ -51,9 +56,21 @@ def makeFileLogger(filename, level=None): | ||||
|     filelogger.setLevel(level) | ||||
| 
 | ||||
|     log.addHandler(filelogger) | ||||
|     global fileloggers | ||||
|     fileloggers.append(filelogger) | ||||
| 
 | ||||
|     return filelogger | ||||
| 
 | ||||
| def stopFileLoggers(): | ||||
|     """ | ||||
|     De-initializes all file loggers. | ||||
|     """ | ||||
|     global fileloggers | ||||
|     for handler in fileloggers.copy(): | ||||
|         handler.close() | ||||
|         log.removeHandler(handler) | ||||
|         fileloggers.remove(handler) | ||||
| 
 | ||||
| # Set up file logging now, creating a file logger for each block. | ||||
| files = conf['logging'].get('files') | ||||
| if files: | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 James Lu
						James Lu