2017-11-21 11 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

あなたは❤️ 'config.assets.quiet = true'を、あなたの環境では/ development.rb詳細な応答のための – fangxing

答えて

0

いくつかのフィードバック、loggerはクラスSprocketsTaskattributeです。

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のような他のロガーも代用可能です。

次の例のように、設定/ application.rbまたは任意の他の環境ファイルで代替ロガーを指定することができます。

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

をRails.root /ログ/

の下で、デフォルトでは、ログファイルを作成し、そのコマンド

あなたが何かをログに記録されている場合番目の場合についてlog levels

、それは、対応するログに印刷されていますされている必要な情報eメッセージのログレベルが、設定されたログレベル以上である。現在のログレベルを知りたい場合は、Rails.logger.levelメソッドを呼び出すことができます。

利用可能なログレベルは、次のとおり:debug:info:warn:error:fatal、及び:unknown、それぞれ、5まで0からログレベル番号に対応します。デフォルトのログレベルを変更するには、

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

を使用これはLog4r::Logger.rbクラスです。 で設定されている:levelの場合はattr_readerです。だから私はt.logger.level = 2:warn

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

:debug:info:warn:error、にlevelを設定しなければならないと考えている

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

を:あなたが実行してレベルを設定することができます

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 

0、および:unknownであり、ログレベル番号0〜5にそれぞれ対応します。

Log4r::Loggerが再設定level属性に方法def 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

感謝を設定することができますが、(私が言ったように)私はすでに'レーキ:: SprocketsTaskを試してみました。既存のタスクに置き換えられることはありません。 IOWは、そのコンストラクタを呼び出すだけで 'rake assets:precompile'に影響しないようです。 –

関連する問題