Module: Sidekiq::Logging

Defined in:
lib/sidekiq/logging.rb

Defined Under Namespace

Classes: Pretty

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.initialize_logger(log_target = STDOUT) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/sidekiq/logging.rb', line 28

def self.initialize_logger(log_target = STDOUT)
  oldlogger = @logger
  @logger = Logger.new(log_target)
  @logger.level = Logger::INFO
  @logger.formatter = Pretty.new
  oldlogger.close if oldlogger && !$TESTING # don't want to close testing's STDOUT logging
  @logger
end

.loggerObject



37
38
39
# File 'lib/sidekiq/logging.rb', line 37

def self.logger
  @logger || initialize_logger
end

.logger=(log) ⇒ Object



41
42
43
# File 'lib/sidekiq/logging.rb', line 41

def self.logger=(log)
  @logger = (log ? log : Logger.new('/dev/null'))
end

.reopen_logsObject

This reopens ALL logfiles in the process that have been rotated using logrotate(8) (without copytruncate) or similar tools. A File object is considered for reopening if it is:

1) opened with the O_APPEND and O_WRONLY flags
2) the current open file handle does not match its original open path
3) unbuffered (as far as userspace buffering goes, not O_SYNC)

Returns the number of files reopened



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/sidekiq/logging.rb', line 52

def self.reopen_logs
  to_reopen = []
  append_flags = File::WRONLY | File::APPEND

  ObjectSpace.each_object(File) do |fp|
    begin
      if !fp.closed? && fp.stat.file? && fp.sync && (fp.fcntl(Fcntl::F_GETFL) & append_flags) == append_flags
        to_reopen << fp
      end
    rescue IOError, Errno::EBADF
    end
  end

  nr = 0
  to_reopen.each do |fp|
    orig_st = begin
      fp.stat
    rescue IOError, Errno::EBADF
      next
    end

    begin
      b = File.stat(fp.path)
      next if orig_st.ino == b.ino && orig_st.dev == b.dev
    rescue Errno::ENOENT
    end

    begin
      File.open(fp.path, 'a') { |tmpfp| fp.reopen(tmpfp) }
      fp.sync = true
      nr += 1
    rescue IOError, Errno::EBADF
      # not much we can do...
    end
  end
  nr
end

.with_context(msg) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/sidekiq/logging.rb', line 19

def self.with_context(msg)
  begin
    Thread.current[:sidekiq_context] = msg
    yield
  ensure
    Thread.current[:sidekiq_context] = nil
  end
end

Instance Method Details

#loggerObject



90
91
92
# File 'lib/sidekiq/logging.rb', line 90

def logger
  Sidekiq::Logging.logger
end