Ksql: /bin/ksql command return log4j error "log4j:ERROR Could not read configuration file"

Created on 18 Nov 2019  路  3Comments  路  Source: confluentinc/ksql

Describe the bug
When I run /bin/ksql, following error occurs.

$ /bin/ksql http://localhost:8088

  log4j:ERROR Could not read configuration file from URL [file://etc/ksql/log4j-file.properties].
  java.net.UnknownHostException: etc
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
    at java.net.Socket.connect(Socket.java:589)
    at sun.net.ftp.impl.FtpClient.doConnect(FtpClient.java:962)
    at sun.net.ftp.impl.FtpClient.tryConnect(FtpClient.java:924)
    at sun.net.ftp.impl.FtpClient.connect(FtpClient.java:1019)
    at sun.net.ftp.impl.FtpClient.connect(FtpClient.java:1005)
    at sun.net.www.protocol.ftp.FtpURLConnection.connect(FtpURLConnection.java:311)
    at sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.java:417)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:557)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
    at org.slf4j.impl.Log4jLoggerFactory.<init>(Log4jLoggerFactory.java:66)
    at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
    at io.confluent.ksql.Ksql.<clinit>(Ksql.java:36)
  log4j:ERROR Ignoring configuration file [file://etc/ksql/log4j-file.properties].
  log4j:WARN No appenders could be found for logger (org.apache.kafka.connect.json.JsonConverterConfig).
  log4j:WARN Please initialize the log4j system properly.
  log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.


                  ===========================================
                  =        _  __ _____  ____  _             =
                  =       | |/ // ____|/ __ \| |            =
                  =       | ' /| (___ | |  | | |            =
                  =       |  <  \___ \| |  | | |            =
                  =       | . \ ____) | |__| | |____        =
                  =       |_|\_\_____/ \___\_\______|       =
                  =                                         =
                  =  Streaming SQL Engine for Apache Kafka庐 =
                  ===========================================

Copyright 2017-2018 Confluent Inc.

CLI v5.1.3, Server v5.1.3 located at http://localhost:8088

Having trouble? Type 'help' (case-insensitive) for a rundown of how things work!

ksql> 

To Reproduce
Steps to reproduce the behavior, include:

  1. The version of KSQL.
    v5.1.3 with CentOS Linux release 7.5.1804 (Core)
  2. Sample source data.
  1. Any SQL statements you ran
    None

Expected behavior
/etc/ksql/log4j-file.properties will be read by KSQL.

Actual behaviour
/usr/bin/ksql works. In CentOS7, there is a symlink as below

# ls -lh /bin
lrwxrwxrwx. 1 root root 7 Dec 18  2018 /bin -> usr/bin

But /bin/ksql does not work. I think ksql command does not support when base_dir will become "/". Following error part's //etc/ksql/log4j-file.properties is strange. ("/" is duplicated)

log4j:ERROR Could not read configuration file from URL [file://etc/ksql/log4j-file.properties]

Can you check it? Thanks.

bug

Most helpful comment

I have the same problem

All 3 comments

I have the same problem

I have the same problem

@yodo-t I solved this problem like this. On Centos 7, edited vim / usr / bin / ksql, removed "/" in the line "base_dir = $ (cd" $ (dirname "$ {BASH_SOURCE [0]}") / .. "&& pwd)"

#!/bin/bash
# (Copyright) [2017 - 2017] Confluent, Inc.

#
# Use shellcheck to lint this file
#

base_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" ).." && pwd )

: "${KSQL_CONFIG_DIR:="$base_dir/config"}"

# logj4 settings
if [ -z "$KSQL_LOG4J_OPTS" ]; then
  # Test for files from dev -> packages so this will work as expected in dev if you have packages
  # installed
  if [ -e "$base_dir/config/log4j.properties" ]; then # Dev environment
    KSQL_CONFIG_DIR="$base_dir/config"
  elif [ -e "$base_dir/etc/ksql/log4j.properties" ]; then # Simple zip file layout
    KSQL_CONFIG_DIR="$base_dir/etc/ksql"
  elif [ -e "/etc/ksql/log4j.properties" ]; then # Normal install layout
    KSQL_CONFIG_DIR="/etc/ksql"
  fi
fi



: "${KSQL_LOG4J_OPTS:=""}"

# Use file logging by default
if [ -z "$KSQL_LOG4J_OPTS" ]; then
  export KSQL_LOG4J_OPTS="-Dlog4j.configuration=file:$KSQL_CONFIG_DIR/log4j-file.properties"
fi

exec "$base_dir"/bin/ksql-run-class io.confluent.ksql.Ksql "$@"

Was this page helpful?
0 / 5 - 0 ratings