@Override
        public void run() {
            try {
                prepare();
            } catch (FileNotFoundException e) {
                logger.fatal(e.getMessage());
                return;
            } catch (InterruptedException e) {
                return;
            }

            String line;
            int slipCounter = 0;
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    line = logReader.readLine();
                    if (null == line) {
                        if (slipCounter >= maxSlipNumber) {
                            reopen();
                            slipCounter = 0;
                            continue;
                        }
                        slipCounter++;
                        Thread.sleep(updatePeriod);
                    } else {
                        slipCounter = 0;
                        if (recordsQueue.size() >= maxQueueSize)
                            recordsQueue.poll();
                        recordsQueue.put(line);
                    }
                } catch (IOException e) {
                    logger.warn("Log reading some I/O error. Miss one line from log");
                } catch (InterruptedException e) {
                    break;
                }
            }

            try {
                logReader.close();
            } catch (IOException e1) {
                logger.warn("Can't close log stream (file {}). It will no affect, but unpleasantly",
                        currentLogFile.getAbsolutePath());
            }
        }