2017-11-21 21 views
0

Rake::SprocketsTask#log_level= (sprockets-3.7.1/lib/rake/sprocketstask.rb으로 정의 됨) 방법이 있지만이를 호출하는 방법은 무엇입니까?에셋에 log_level을 설정하는 방법 : 프리 컴파일 작업?

Rafael França says :

당신이 당신의 자신의 사전 컴파일 작업과 설정 로거를 정의 할 수 있습니다 로거를 변경하려면 =

Rake::SprocketsTask.new do |t| 
    t.logger = Logger.new("log/assets.log") 
end 

나는 시도 그 (log_level와)과는 SprocketsTask 인스턴스를 반환 하지만 assets:precompile 작업을 어떻게 바꿀 수 있습니까?

assets:precompile 작업의 log_level:warn과 같이 더 조용하게 설정하고 싶습니다.

+0

당신은 이미'레이크 :: SprocketsTask을 시도하여 환경/development.rb에, 자세한 응답 ❤️ 만에 – fangxing

답변

0

일부 피드백 loggerSprocketsTaskattribute입니다.

require 'logger' 

module Rake 
    # Simple Sprockets compilation Rake task macro. 
    # 
    # Rake::SprocketsTask.new do |t| 
    #  t.environment = Sprockets::Environment.new 
    #  t.output  = "./public/assets" 
    #  t.assets  = %w(application.js application.css) 
    # end 
    # 
    class SprocketsTask < Rake::TaskLib 
     # Logger to use during rake tasks. Defaults to using stderr. 
     # 
     # t.logger = Logger.new($stdout) 
     # 
     attr_accessor :logger 

나는 api에서 정보를 찾지 못했습니다은 레일에 의해 사용되는 Log4r 로거에 대한 Rails Guide에 좋은 설명이있다.

코드의 설명은 당신이

레일 로그 정보를 기록 할 수 ActiveSupport :: Logger 클래스를 사용합니다

포함되어 있습니다. Log4r과 같은 다른 로거도 대체 될 수 있습니다./명령

config.logger = Logger.new(STDOUT) 
config.logger = Log4r::Logger.new("Application Log") 

이 Rails.root에서 기본적으로 로그 파일을 생성/

로그 :

당신은 예를 들어, 설정/application.rb 또는 다른 환경 파일에서 다른 로거를 지정할 수 있습니다

당신이 필요로하는 정보가 무엇인가가 기록되는 경우에 대한 log levels

, 그것은 일 경우 해당 로그에 인쇄되어 있습니다 e 메시지의 로그 레벨이 구성된 로그 레벨과 같거나 높은 경우. 현재 로그 수준을 알고 싶으면 Rails.logger.level 메서드를 호출 할 수 있습니다.

가능한 로그 수준은 : :debug, :info, :warn, :error, :fatal:unknown 각각 5 0에서 로그 레벨 번호에 대응. 기본 로그 레벨을 변경하려면, 이것은 Log4r::Logger.rb 클래스입니다

config.log_level = :warn # In any environment initializer, or 
Rails.logger.level = 0 # at any time 

사용합니다. 으로 설정된 :level에 대해서는 attr_reader입니다.

module Log4r 

    # See log4r/logger.rb 
    class Logger 
    attr_reader :name, :fullname, :path, :level, :parent 
    attr_reader :additive, :trace, :outputters 

    # Logger requires a name. The last 3 parameters are: 
    # 
    # level::  Do I have a level? (Otherwise, I'll inherit my parent's) 
    # additive:: Am I additive? 
    # trace::  Do I record the execution trace? (slows things a wee bit) 

    def initialize(_fullname, _level=nil, _additive=true, _trace=false) 
     # validation 
     raise ArgumentError, "Logger must have a name", caller if _fullname.nil? 
     Log4rTools.validate_level(_level) unless _level.nil? 
     validate_name(_fullname) 

     # create the logger 
     @fullname = _fullname 
     @outputters = [] 
     @additive = _additive 
     deal_with_inheritance(_level) 
     LoggerFactory.define_methods(self) 
     self.trace = _trace 
     Repository[@fullname] = self 
    end 

당신은 수행하여 레벨을 설정할 수 있습니다 :

Log4r::Logger.new('Assets Log', :warn) 

그래서 내가 t.logger.level = 2level- :warn

Rake::SprocketsTask.new do |t| 
    t.logger = Logger.new("log/assets.log") 
    t.logger.level = 2 
end 

:debug, :info, :warn, :error,,321을 설정해야합니다 생각 0 및 :unknown으로, 0에서 5까지의 로그 수준 번호에 각각 해당합니다.

또한이 Log4r::Logger가 방법 def level=(_level) 가지고 있으므로 level 특성을 재 - 설정 작업. (내가 말한대로)

# Set the logger level dynamically. Does not affect children. 
def level=(_level) 
    Log4rTools.validate_level(_level) 
    @level = _level 
    LoggerFactory.define_methods(self) 
    Logger.log_internal {"Logger '#{@fullname}' set to #{LNAMES[@level]}"} 
    @level 
end 
+0

감사합니다'config.assets.quiet = TRUE '를 설정할 수 있습니다. new '이며 기존 작업을 대체하지 않습니다. IOW, 단지 그 생성자를 'rake assets : precompile'에 영향을 미치지 않는 것처럼 보입니다. –