def _configure_syslog( logger_name: str, use_json_formatter: bool = True, formatter: 'Optional[Formatter]' = None) -> 'List[Handler]': try: syslog_handler = SysLogHandler( address=(options.syslog_host, options.syslog_port), facility=SysLogHandler.facility_names[options.syslog_facility], socktype=socket.SOCK_DGRAM) log_extension = '.slog' if use_json_formatter else '.log' syslog_handler.ident = f'{logger_name}{log_extension}: ' if formatter is not None: syslog_handler.setFormatter(formatter) elif use_json_formatter: syslog_handler.setFormatter(_JSON_FORMATTER) else: syslog_handler.setFormatter(get_text_formatter()) syslog_handler.addFilter(_CONTEXT_FILTER) return [syslog_handler] except socket.error: logging.getLogger('frontik.logging').exception( 'cannot initialize syslog') return []
def bootstrap_logger(logger_info, logger_level, use_json_formatter=True, formatter=None): if isinstance(logger_info, tuple): logger, logger_name = logger_info else: logger, logger_name = logging.getLogger(logger_info), logger_info handlers = [] if options.log_dir: file_handler = logging.handlers.WatchedFileHandler(os.path.join(options.log_dir, f'{logger_name}.log')) if use_json_formatter: file_handler.setFormatter(_JSON_FORMATTER) elif formatter is not None: file_handler.setFormatter(formatter) else: file_handler.setFormatter(get_text_formatter()) file_handler.addFilter(_CONTEXT_FILTER) handlers.append(file_handler) if options.stderr_log: stderr_handler = logging.StreamHandler() if formatter is not None: stderr_handler.setFormatter(formatter) else: stderr_handler.setFormatter(get_stderr_formatter()) stderr_handler.addFilter(_CONTEXT_FILTER) handlers.append(stderr_handler) if options.syslog: try: syslog_handler = SysLogHandler( address=(options.syslog_host, options.syslog_port), facility=SysLogHandler.facility_names[options.syslog_facility], socktype=socket.SOCK_DGRAM ) syslog_handler.ident = f'{logger_name}: ' if use_json_formatter: syslog_handler.setFormatter(_JSON_FORMATTER) elif formatter is not None: syslog_handler.setFormatter(formatter) else: syslog_handler.setFormatter(get_text_formatter()) syslog_handler.addFilter(_CONTEXT_FILTER) handlers.append(syslog_handler) except socket.error: logging.getLogger('frontik.logging').exception('cannot initialize syslog') for handler in handlers: handler.setLevel(logger_level) logger.addHandler(handler) logger.addHandler(GlobalLogHandler()) logger.propagate = False return logger
def setup(): """Configure logging, process command-line arguments.""" syslog = SysLogHandler(address="/var/run/log", facility=SysLogHandler.LOG_LOCAL3) pid = os.getpid() syslog.ident = f"statusline-i3[{pid}]: " logging.basicConfig( level="INFO", format="%(levelname)s: %(message)s", handlers=(syslog,) ) setproctitle(b"statusline-i3") opts = argparse.ArgumentParser(prog="open", description=__doc__) opts.add_argument("-v", "--version", action="version", version=__version__) opts.add_argument( "-m", "--mailbox", type=str, default=os.environ["MAIL"], help="Location of the mailboxes. One or more mailbox names separated by ‘:’", ) return opts.parse_args(sys.argv[1:])
def setup(): """Configure logging, process command-line arguments.""" syslog = SysLogHandler(address='/var/run/log', facility=SysLogHandler.LOG_LOCAL3) pid = os.getpid() syslog.ident = f'statusline-i3[{pid}]: ' logging.basicConfig(level='INFO', format='%(levelname)s: %(message)s', handlers=(syslog, )) setproctitle(b'statusline-i3') opts = argparse.ArgumentParser(prog='open', description=__doc__) opts.add_argument('-v', '--version', action='version', version=__version__) opts.add_argument( '-m', '--mailbox', type=str, default=os.environ['MAIL'], help= "Location of the mailboxes. One or more mailbox names separated by ‘:’" ) return opts.parse_args(sys.argv[1:])
def start_torrents(): """Uploads torrent files to the server.""" signal.signal(signal.SIGINT, ctrl_c_handler) cache_dir = realpath(expanduser('~/.cache/xirvik')) if not isdir(cache_dir): makedirs(cache_dir) log = logging.getLogger('xirvik-start-torrents') parser = argparse.ArgumentParser() parser.add_argument('-d', '--debug', action='store_true') parser.add_argument('-v', '--verbose', action='store_true') parser.add_argument('-c', '--netrc-path', default=expanduser('~/.netrc')) # parser.add_argument('-C', '--client', default='rutorrent3') parser.add_argument('-H', '--host', nargs=1, required=True) parser.add_argument('-p', '--port', nargs=1, default=[443]) parser.add_argument('--start-stopped', action='store_true') parser.add_argument('-s', '--syslog', action='store_true') parser.add_argument('directory', metavar='DIRECTORY', action=ReadableDirectoryListAction, nargs='*') args = parser.parse_args() verbose = args.debug or args.verbose log.setLevel(logging.INFO) if verbose: channel = logging.StreamHandler(sys.stdout if args.verbose else sys.stderr) channel.setFormatter(logging.Formatter('%(asctime)s - %(message)s')) channel.setLevel(logging.INFO if args.verbose else logging.DEBUG) log.addHandler(channel) if args.debug: log.setLevel(logging.DEBUG) if args.syslog: try: syslogh = SysLogHandler(address='/dev/log') except (OSError, socket.error): syslogh = SysLogHandler(address='/var/run/syslog', facility='local1') syslogh.ident = 'xirvik-start-torrents' logging.INFO = logging.WARNING syslogh.setFormatter( logging.Formatter('%(name)s[%(process)d]: %(message)s')) syslogh.setLevel(logging.DEBUG if args.debug else logging.INFO) log.addHandler(syslogh) try: user, _, password = netrc(args.netrc_path).authenticators(args.host[0]) except TypeError: print('Cannot find host {} in netrc. Specify user name and ' 'password'.format(args.host[0]), file=sys.stderr) sys.exit(1) post_url = ('https://{host:s}:{port:d}/rtorrent/php/' 'addtorrent.php?'.format(host=args.host[0], port=args.port[0])) form_data = {} exceptions_caught = [] # rtorrent2/3 params # dir_edit - ? # tadd_label - Label for the torrents, more param: label= # torrent_file - Torrent file blob data if args.start_stopped: form_data['torrents_start_stopped'] = 'on' for d in args.directory: for item in listdir(d): if not item.lower().endswith('.torrent'): continue item = path_join(d, item) # Workaround for surrogates not allowed error, rename the file prefix = '{n:s}-'.format(n=splitext(basename(item))[0]) fd, name = mkstemp(dir=cache_dir, prefix=prefix, suffix='.torrent') close_fd(fd) with open(name, 'wb') as w: with open(item, 'rb') as r: w.write(r.read()) old = item item = name with open(item, 'rb') as f: # Because the server does not understand filename*=UTF8 syntax # https://github.com/kennethreitz/requests/issues/2117 # This is not a huge concern, as the API's "Get .torrent" does # not return the file with its original name either try: filename = unidecode(f.name.decode('utf8')) except AttributeError: # decode filename = unidecode(f.name) files = dict(torrent_file=(filename, f,)) try: log.info('Uploading torrent {} (actual name: "{}")'.format( basename(item), basename(filename))) except OSError: pass r = requests.post(post_url, data=form_data, files=files) try: r.raise_for_status() except Exception as e: log.error('Caught exception: {}'.format(e)) # Delete original only after successful upload log.debug('Deleting {}'.format(old)) rm(old) if exceptions_caught: log.error('Exceptions caught, exiting with failure status') cleanup_and_exit(1)
args = parser.parse_args() if not args.verbose: args.verbose = 0 # 日志初始化 log_format = u'%(asctime)s %(levelname)s %(message)s' if args.quiet: logging.basicConfig(level=logging.WARNING, format=log_format) elif args.verbose >= VERBOSE_HTTP: logging.basicConfig(level=logging.DEBUG, format=log_format) else: logging.basicConfig(level=logging.INFO, format=log_format) if hasattr(args, 'log_file') and args.log_file: if args.log_file == 'SYSLOG': syslog = SysLogHandler(address='/dev/log') syslog.ident = '{}: '.format(PROG_NAME) syslog.setLevel(logging.INFO) syslog.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) syslog.addFilter(SyslogFilter()) logger.addHandler(syslog) else: logfile = RotatingFileHandler(args.log_file, LOG_FILE_SIZE, LOG_FILE_BACKUP_COUNT, encoding='utf-8') logger.addHandler(logfile) main(**vars(args))
def get_logger(conf, name=None, verbose=False, fmt=None): if not conf: conf = {} if name is None: name = 'log' if fmt is None: fmt = conf.get( 'log_format', "%(process)d %(thread)X %(name)s %(levelname)s %(message)s") fmt = fmt.encode("utf-8").decode("unicode-escape") logger = logging.getLogger(name) logger.propagate = False formatter = logging.Formatter(fmt='%(asctime)s.%(msecs)03d ' + fmt, datefmt='%Y-%m-%d %H:%M:%S') syslog_formatter = logging.Formatter(fmt=fmt) if not hasattr(get_logger, 'handler4logger'): get_logger.handler4logger = {} if logger in get_logger.handler4logger: logger.removeHandler(get_logger.handler4logger[logger]) facility = getattr(SysLogHandler, conf.get('log_facility', 'LOG_LOCAL0'), SysLogHandler.LOG_LOCAL0) udp_host = conf.get('log_udp_host') if udp_host: udp_port = int( conf.get('log_udp_port', logging.handlers.SYSLOG_UDP_PORT)) handler = SysLogHandler(address=(udp_host, udp_port), facility=facility) else: log_address = conf.get('log_address', '/dev/log') if os.path.exists(log_address): try: handler = SysLogHandler(address=log_address, facility=facility) except socket.error as exc: if exc.errno not in [errno.ENOTSOCK, errno.ENOENT]: raise exc handler = SysLogHandler(facility=facility) else: handler = SysLogHandler(facility=facility) syslog_prefix = conf.get('syslog_prefix', '') if syslog_prefix: handler.ident = "%s: " % syslog_prefix handler.setFormatter(syslog_formatter) logger.addHandler(handler) get_logger.handler4logger[logger] = handler logging_level = getattr(logging, conf.get('log_level', 'INFO').upper(), logging.INFO) if (verbose or conf.get('is_cli') or hasattr(get_logger, 'console_handler4logger') or logging_level < logging.INFO): if not hasattr(get_logger, 'console_handler4logger'): get_logger.console_handler4logger = {} if logger in get_logger.console_handler4logger: logger.removeHandler(get_logger.console_handler4logger[logger]) console_handler = logging.StreamHandler(sys.__stderr__) console_handler.setFormatter(formatter) logger.addHandler(console_handler) get_logger.console_handler4logger[logger] = console_handler logger.setLevel(logging_level) return logger