Logging from within jobs

All your code in the ./jobs and ./app folders have access to a standard Ruby logger.

# jobs/hello.rb
class Hello < Jobly::Job
  def execute(name: 'bob')
    logger.info "said hello to #{name}"

Configuring the logger

By default, output is sent to STDOUT but you can provide your own logger and log to a file or to syslog by using the config.log or the config.logger option in ./config/jobly.rb

# config/jobly.rb
Jobly.configure do |config|
  config.log = '/var/log/jobly.log'
  # same as:
  # config.log = Logger.new '/var/log/jobly.log'

  config.logger.level = Logger::WARN

The config.log option controls how logging is handled.

  1. If left empty (nil), the web server and workers will NOT log anywhere, and your jobs will log to STDOUT whenever you use logger.
  2. Setting it to config.log = 'stdout' will also instruct the web server and worker to send their logging to STDOUT.
  3. Setting it to a filename, will log to a file.
  4. Setting it to a syslog connection string will log to a remote syslog server.

Logging to syslog

Set config.log to a syslog connection string in the following format:

syslog://system:[email protected]:port

Omitting any of the options will fall back to a sensible default.

See Also: Syslog Example

Separate log files for each job class

If Jobly.log contains %s in the file path, it will be replaced with the slug of the job, and will create separate log files for each job class.

# config/jobly.rb
Jobly.configure do |config|
  config.log = 'logs/%s.log'

Automatic syslog tagging

The same %s replacement principle applies when using a syslog connection string. This is intended to allow tagging of syslog messages with the job name.

# config/jobly.rb
Jobly.configure do |config|
  config.log = 'syslog://jobserver:%[email protected]:514'

Bring your own logger

The config.log option can also accept any Logger instance, in case you wish to provide a custom logger.