Отключить Rack::CommonLogger без исправления обезьяны

Итак, я хочу иметь полностью настраиваемое ведение журнала для своего приложения sinatra, но я не могу отключить функцию Rack::CommonLogger.

Согласно sinatra docs, все, что мне нужно сделать, это добавить следующую строку (попробовал установить ее на false тоже):

set :logging, nil

к моей конфигурации. Однако это не работает, и я все еще получаю сообщения журнала, подобные Apache, в своем терминале. Так что единственное решение, которое я нашел до сих пор, - это залатать эту чертову штуку обезьяной.

module Rack
  class CommonLogger
    def call(env)
      # do nothing
      @app.call(env)
    end
  end
end

У кого-нибудь есть идеи, можно ли отключить это, не возвращаясь к таким вопросам?


person nicohvi    schedule 06.03.2014    source источник
comment
Вы используете Sinatra::Application или Sinatra::Base для приложения?   -  person Зелёный    schedule 06.03.2014
comment
Я использую Sinatra::Base.   -  person nicohvi    schedule 06.03.2014
comment
из документа "To avoid any logging middleware to be set up, set the logging setting to nil."   -  person Зелёный    schedule 06.03.2014
comment
Я попробовал это, а также установил значение «false». Не работает.   -  person nicohvi    schedule 06.03.2014
comment
а вы пробовали это disable :logging?   -  person Зелёный    schedule 06.03.2014
comment
Попробовал сейчас, боюсь, тоже не сработало. :-(   -  person nicohvi    schedule 06.03.2014
comment
Просто чтобы убедиться, вы устанавливаете их в блоке конфигурации, который выполняется?   -  person Sir l33tname    schedule 06.03.2014
comment
Да, все остальные команды в блоке configure do выполняются.   -  person nicohvi    schedule 06.03.2014
comment
Какой сервер вы используете (тонкий, вебрик и т. д.) и как вы запускаете приложение (ruby my_file.rb, rackup и т. д.)?   -  person matt    schedule 06.03.2014
comment
Я использую puma и запускаю сервер командой puma -p 3001.   -  person nicohvi    schedule 06.03.2014


Ответы (4)


Puma добавляет промежуточное ПО для ведения журналов в ваше приложение, если вы находитесь в режиме разработки и не установили параметр --quiet.

Чтобы прекратить регистрацию Puma в процессе разработки, передайте параметр -q или --quiet в командной строке:

puma -p 3001 -q

или, если вы используете конфигурационный файл Puma, добавьте к нему quiet.

person matt    schedule 06.03.2014
comment
Я использую Webrick и все еще получаю журналы STDERR. Странный. - person lzap; 04.10.2018

Я обезьяна исправил функцию журнала (env, status, header, begin_at), которая вызывается стойкой для создания журналов в стиле apache. Мы используем jruby с logback, поэтому нам не нужны все настраиваемые журналы, которые, кажется, пронизывают экосистему ruby. Я подозреваю, что fishwife инициализирует CommonLogger, что может объяснить, почему все мои попытки отключить его или настроить его с помощью пользовательского регистратора терпят неудачу. Вероятно, Puma делает что-то подобное. На самом деле у меня было два экземпляра в один момент. Один журнал с моим пользовательским регистратором (yay), а другой все еще делает свои глупые операторы помещает на stderr. Должен сказать, я в ужасе от хакерских манипуляций с логированием в экосистеме стоек. Кажется, кому-то нужна большая подсказка в голове.

Во всяком случае, размещение этого в нашем config.ru работает для нас:

module Rack
  class CommonLogger
    def log(env, status, header, began_at)
      # make rack STFU; our logging middleware takes care of this      
    end
  end
end

В дополнение к этому я написал собственное промежуточное ПО для ведения журналов, которое использует slf4j с надлежащим MDC, поэтому мы получаем более осмысленное ведение журналов запросов.

person Jilles van Gurp    schedule 05.09.2014
comment
Ура! В нерабочее время это единственный метод, который сработал! - person ColinM; 25.03.2016
comment
Вам это не нужно. Просто запустите с rackup --quiet. Смотри мой ответ - person Qortex; 10.04.2020

Rack включает в себя несколько промежуточных программ по умолчанию, когда вы rackup создаете свое приложение. Он определен в этом файле.

По умолчанию, как вы упомянули, промежуточное ПО ведения журнала включено.

Чтобы отключить его, просто передайте опцию --quiet в rackup:

rackup --quiet

И промежуточное программное обеспечение входа по умолчанию не будет включено.

Затем вы можете включить собственное промежуточное ПО для ведения журналов, не загрязняя его регистратором по умолчанию (с именем CommonLogger).

Вы также можете добавить #\ --quiet в начало файла config.ru, чтобы всегда не вводить --quiet, но такое поведение теперь устарело.

person Qortex    schedule 10.04.2020

Вероятно, это не Sinatra пишет в STDOUT или STDERR, а ваш веб-сервер. Puma можно запустить с помощью параметра -q (тихо), как отметил @matt. При использовании webrick убедитесь, что переменная конфигурации AccessLog является пустым массивом, иначе она также будет регистрироваться в стандартном выводе.

Отключение эха из webrick

person lzap    schedule 04.10.2018