class Fluent::Supervisor::LoggerInitializer

Public Class Methods

new(path, level, chuser, chgroup, opts, log_rotate_age: nil, log_rotate_size: nil) click to toggle source
# File lib/fluent/supervisor.rb, line 518
def initialize(path, level, chuser, chgroup, opts, log_rotate_age: nil, log_rotate_size: nil)
  @path = path
  @level = level
  @chuser = chuser
  @chgroup = chgroup
  @opts = opts
  @log_rotate_age = log_rotate_age
  @log_rotate_size = log_rotate_size
end
per_process_path(path, process_type, worker_id) click to toggle source

Create a unique path for each process.

>>> per_process_path(:worker, 1, “C:/tmp/test.log”) C:/tmp/test-1.log >>> per_process_path(:supervisor, 0, “C:/tmp/test.log”) C:/tmp/test-supervisor-0.log

# File lib/fluent/supervisor.rb, line 534
def self.per_process_path(path, process_type, worker_id)
  path = Pathname(path)
  ext = path.extname

  if process_type == :supervisor
    suffix = "-#{process_type}-0#{ext}"  # "-0" for backword compatibility.
  else
    suffix = "-#{worker_id}#{ext}"
  end
  return path.sub_ext(suffix).to_s
end

Public Instance Methods

apply_options(format: nil, time_format: nil, log_dir_perm: nil, ignore_repeated_log_interval: nil, ignore_same_log_interval: nil) click to toggle source
# File lib/fluent/supervisor.rb, line 600
def apply_options(format: nil, time_format: nil, log_dir_perm: nil, ignore_repeated_log_interval: nil, ignore_same_log_interval: nil)
  $log.format = format if format
  $log.time_format = time_format if time_format
  $log.ignore_repeated_log_interval = ignore_repeated_log_interval if ignore_repeated_log_interval
  $log.ignore_same_log_interval = ignore_same_log_interval if ignore_same_log_interval

  if @path && log_dir_perm
    File.chmod(log_dir_perm || Fluent::DEFAULT_DIR_PERMISSION, File.dirname(@path))
  end
end
init(process_type, worker_id) click to toggle source
# File lib/fluent/supervisor.rb, line 546
def init(process_type, worker_id)
  @opts[:process_type] = process_type
  @opts[:worker_id] = worker_id

  if @path && @path != "-"
    unless File.exist?(@path)
      FileUtils.mkdir_p(File.dirname(@path))
    end

    if @log_rotate_age || @log_rotate_size
      # We need to prepare a unique path for each worker since
      # Windows locks files.
      if Fluent.windows?
          path = LoggerInitializer.per_process_path(@path, process_type, worker_id)
      else
          path = @path
      end
      @logdev = Fluent::LogDeviceIO.new(path, shift_age: @log_rotate_age, shift_size: @log_rotate_size)
    else
      @logdev = File.open(@path, "a")
    end

    if @chuser || @chgroup
      chuid = @chuser ? ServerEngine::Privilege.get_etc_passwd(@chuser).uid : nil
      chgid = @chgroup ? ServerEngine::Privilege.get_etc_group(@chgroup).gid : nil
      File.chown(chuid, chgid, @path)
    end
  else
    @logdev = STDOUT
  end

  dl_opts = {}
  # subtract 1 to match serverengine daemon logger side logging severity.
  dl_opts[:log_level] = @level - 1
  dl_opts[:log_rotate_age] = @log_rotate_age if @log_rotate_age
  dl_opts[:log_rotate_size] = @log_rotate_size if @log_rotate_size
  logger = ServerEngine::DaemonLogger.new(@logdev, dl_opts)
  $log = Fluent::Log.new(logger, @opts)
  $log.enable_color(false) if @path
  $log.enable_debug if @level <= Fluent::Log::LEVEL_DEBUG
  $log.info "init #{process_type} logger", path: path, rotate_age: @log_rotate_age, rotate_size: @log_rotate_size
end
level=(level) click to toggle source
# File lib/fluent/supervisor.rb, line 611
def level=(level)
  @level = level
  $log.level = level
end
reopen!() click to toggle source
# File lib/fluent/supervisor.rb, line 593
def reopen!
  if @path && @path != "-"
    @logdev.reopen(@path, "a")
  end
  self
end
stdout?() click to toggle source
# File lib/fluent/supervisor.rb, line 589
def stdout?
  @logdev == STDOUT
end