如何为资产设置log_level:预编译任务?

时间:2017-11-21 00:41:15

标签: ruby-on-rails ruby rake rake-task

有一种方法Rake::SprocketsTask#log_level=(由sprockets-3.7.1/lib/rake/sprocketstask.rb定义),但如何调用它?

Rafael França says

  

要更改记录器,您可以定义自己的预编译任务和   设置logger =

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

我尝试过(使用log_level)并返回SprocketsTask个实例,但如何替换assets:precompile任务?

我想将log_level任务的assets:precompile设置得更安静,比如:warn

1 个答案:

答案 0 :(得分:0)

一些反馈,logger是班级attribute的{​​{1}}。

SprocketsTask

我在api中找不到相关信息,Rails Guide中有关于rails使用的Log4r记录器的一些很好的解释。

这是您所包含的代码的解释

  

Rails使用ActiveSupport :: Logger类来编写日志信息。其他记录器,如Log4r,也可以替代。

     

您可以在config / application.rb或任何其他环境文件中指定备用记录器,例如:

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  

该命令默认在Rails.root / log /

下创建一个日志文件

您需要的信息是log levels

  

当记录某些内容时,如果消息的日志级别等于或高于配置的日志级别,则会将其打印到相应的日志中。如果您想知道当前的日志级别,可以调用config.logger = Logger.new(STDOUT) config.logger = Log4r::Logger.new("Application Log") 方法。

     

可用的日志级别为:Rails.logger.level:debug:info:warn:error:fatal,对应于日志级别编号分别为0到5。要更改默认日志级别,请使用

:unknown

这是config.log_level = :warn # In any environment initializer, or Rails.logger.level = 0 # at any time 类。 它Log4r::Logger.rb attr_reader:level设置def initizialize

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 = 2应该将level设置为:warn

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

:debug:info:warn:error:fatal: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