':param conf: configuration object obtained from ConfigParser
:param logger: logging object'

def __init__(self, conf, logger=None):

    self.conf = conf
    self.logger = (logger or get_logger(conf, log_route='object-replicator'))
    self.devices_dir = conf.get('devices', '/srv/node')
    self.mount_check = config_true_value(conf.get('mount_check', 'true'))
    self.swift_dir = conf.get('swift_dir', '/etc/swift')
    self.bind_ip = conf.get('bind_ip', '0.0.0.0')
    self.servers_per_port = int((conf.get('servers_per_port', '0') or 0))
    self.port = (None if self.servers_per_port else int(conf.get('bind_port', 6200)))
    self.concurrency = int(conf.get('concurrency', 1))
    self.stats_interval = int(conf.get('stats_interval', '300'))
    self.ring_check_interval = int(conf.get('ring_check_interval', 15))
    self.next_check = (time.time() + self.ring_check_interval)
    self.replication_cycle = random.randint(0, 9)
    self.partition_times = []
    self.interval = int((conf.get('interval') or conf.get('run_pause') or 30))
    self.rsync_timeout = int(conf.get('rsync_timeout', DEFAULT_RSYNC_TIMEOUT))
    self.rsync_io_timeout = conf.get('rsync_io_timeout', '30')
    self.rsync_bwlimit = conf.get('rsync_bwlimit', '0')
    self.rsync_compress = config_true_value(conf.get('rsync_compress', 'no'))
    self.rsync_module = conf.get('rsync_module', '').rstrip('/')
    if (not self.rsync_module):
        self.rsync_module = '{replication_ip}::object'
    self.http_timeout = int(conf.get('http_timeout', 60))
    self.lockup_timeout = int(conf.get('lockup_timeout', 1800))
    self.recon_cache_path = conf.get('recon_cache_path', '/var/cache/swift')
    self.rcache = os.path.join(self.recon_cache_path, 'object.recon')
    self.conn_timeout = float(conf.get('conn_timeout', 0.5))
    self.node_timeout = float(conf.get('node_timeout', 10))
    self.sync_method = getattr(self, (conf.get('sync_method') or 'rsync'))
    self.network_chunk_size = int(conf.get('network_chunk_size', 65536))
    self.default_headers = {'Content-Length': '0', 'user-agent': ('object-replicator    %s' % os.getpid())}
    self.rsync_error_log_line_length = int(conf.get('rsync_error_log_line_length', 0))
    self.handoffs_first = config_true_value(conf.get('handoffs_first', False))
    self.handoff_delete = config_auto_int_value(conf.get('handoff_delete', 'auto'), 0)
    if any((self.handoff_delete, self.handoffs_first)):
        self.logger.warning('Handoff    only    mode    is    not    intended    for    normal    operation,    please    disable    handoffs_first    and    handoff_delete    before    the    next    normal    rebalance')
    self._df_router = DiskFileRouter(conf, self.logger)
