diff --git a/lib/jekyll.rb b/lib/jekyll.rb index d466397c..287f0ab4 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -87,4 +87,8 @@ module Jekyll def self.set_timezone(timezone) ENV['TZ'] = timezone end + + def self.logger + @@logger ||= Stevenson.new + end end diff --git a/lib/jekyll/command.rb b/lib/jekyll/command.rb index b9d1b841..911d85b0 100644 --- a/lib/jekyll/command.rb +++ b/lib/jekyll/command.rb @@ -18,9 +18,9 @@ module Jekyll site.process rescue Jekyll::FatalException => e puts - Jekyll::Stevenson.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:" - Jekyll::Stevenson.error "", "------------------------------------" - Jekyll::Stevenson.error "", e.message + Jekyll.logger.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:" + Jekyll.logger.error "", "------------------------------------" + Jekyll.logger.error "", e.message exit(1) end end diff --git a/lib/jekyll/commands/build.rb b/lib/jekyll/commands/build.rb index 3c1c5f62..fe49b54b 100644 --- a/lib/jekyll/commands/build.rb +++ b/lib/jekyll/commands/build.rb @@ -17,9 +17,9 @@ module Jekyll def self.build(site, options) source = options['source'] destination = options['destination'] - Jekyll::Stevenson.info "Source:", source - Jekyll::Stevenson.info "Destination:", destination - print Jekyll::Stevenson.formatted_topic "Generating..." + Jekyll.logger.info "Source:", source + Jekyll.logger.info "Destination:", destination + print Jekyll.logger.formatted_topic "Generating..." self.process_site(site) puts "done." end @@ -36,14 +36,14 @@ module Jekyll source = options['source'] destination = options['destination'] - Jekyll::Stevenson.info "Auto-regeneration:", "enabled" + Jekyll.logger.info "Auto-regeneration:", "enabled" dw = DirectoryWatcher.new(source, :glob => self.globs(source, destination), :pre_load => true) dw.interval = 1 dw.add_observer do |*args| t = Time.now.strftime("%Y-%m-%d %H:%M:%S") - print Jekyll::Stevenson.formatted_topic("Regenerating:") + "#{args.size} files at #{t} " + print Jekyll.logger.formatted_topic("Regenerating:") + "#{args.size} files at #{t} " self.process_site(site) puts "...done." end diff --git a/lib/jekyll/commands/doctor.rb b/lib/jekyll/commands/doctor.rb index d6648a2b..f11662d2 100644 --- a/lib/jekyll/commands/doctor.rb +++ b/lib/jekyll/commands/doctor.rb @@ -7,7 +7,7 @@ module Jekyll site.read unless deprecated_relative_permalinks(site) - Jekyll::Stevenson.info "Your test results", "are in. Everything looks fine." + Jekyll.logger.info "Your test results", "are in. Everything looks fine." end end @@ -15,7 +15,7 @@ module Jekyll contains_deprecated_pages = false site.pages.each do |page| if page.uses_relative_permalinks - Jekyll::Stevenson.warn "Deprecation:", "'#{page.path}' uses relative" + + Jekyll.logger.warn "Deprecation:", "'#{page.path}' uses relative" + " permalinks which will be deprecated in" + " Jekyll v1.1 and beyond." contains_deprecated_pages = true diff --git a/lib/jekyll/commands/new.rb b/lib/jekyll/commands/new.rb index ea35ef40..c1aa3eef 100644 --- a/lib/jekyll/commands/new.rb +++ b/lib/jekyll/commands/new.rb @@ -9,7 +9,7 @@ module Jekyll new_blog_path = File.expand_path(args.join(" "), Dir.pwd) FileUtils.mkdir_p new_blog_path if preserve_source_location?(new_blog_path, options) - Jekyll::Stevenson.error "Conflict:", "#{new_blog_path} exists and is not empty." + Jekyll.logger.error "Conflict:", "#{new_blog_path} exists and is not empty." exit(1) end diff --git a/lib/jekyll/configuration.rb b/lib/jekyll/configuration.rb index 0bb52096..1a915731 100644 --- a/lib/jekyll/configuration.rb +++ b/lib/jekyll/configuration.rb @@ -115,7 +115,7 @@ module Jekyll def read_config_file(file) next_config = YAML.safe_load_file(file) raise "Configuration file: (INVALID) #{file}".yellow if !next_config.is_a?(Hash) - Jekyll::Stevenson.info "Configuration file:", file + Jekyll.logger.info "Configuration file:", file next_config end @@ -135,9 +135,9 @@ module Jekyll end rescue SystemCallError # Errno:ENOENT = file not found - Jekyll::Stevenson.warn "Configuration file:", "none" + Jekyll.logger.warn "Configuration file:", "none" rescue => err - Jekyll::Stevenson.warn "WARNING:", "Error reading configuration. " + + Jekyll.logger.warn "WARNING:", "Error reading configuration. " + "Using defaults (and options)." $stderr.puts "#{err}" end @@ -162,7 +162,7 @@ module Jekyll config = clone # Provide backwards-compatibility if config.has_key?('auto') || config.has_key?('watch') - Jekyll::Stevenson.warn "Deprecation:", "Auto-regeneration can no longer" + + Jekyll.logger.warn "Deprecation:", "Auto-regeneration can no longer" + " be set from your configuration file(s). Use the"+ " --watch/-w command-line option instead." config.delete('auto') @@ -170,14 +170,14 @@ module Jekyll end if config.has_key? 'server' - Jekyll::Stevenson.warn "Deprecation:", "The 'server' configuration option" + + Jekyll.logger.warn "Deprecation:", "The 'server' configuration option" + " is no longer accepted. Use the 'jekyll serve'" + " subcommand to serve your site with WEBrick." config.delete('server') end if config.has_key? 'server_port' - Jekyll::Stevenson.warn "Deprecation:", "The 'server_port' configuration option" + + Jekyll.logger.warn "Deprecation:", "The 'server_port' configuration option" + " has been renamed to 'port'. Please update your config" + " file accordingly." # copy but don't overwrite: @@ -186,7 +186,7 @@ module Jekyll end if config.has_key?('exclude') && config['exclude'].is_a?(String) - Jekyll::Stevenson.warn "Deprecation:", "The 'exclude' configuration option" + + Jekyll.logger.warn "Deprecation:", "The 'exclude' configuration option" + " must now be specified as an array, but you specified" + " a string. For now, we've treated the string you provided" + " as a list of comma-separated values." @@ -194,7 +194,7 @@ module Jekyll end if config.has_key?('include') && config['include'].is_a?(String) - Jekyll::Stevenson.warn "Deprecation:", "The 'include' configuration option" + + Jekyll.logger.warn "Deprecation:", "The 'include' configuration option" + " must now be specified as an array, but you specified" + " a string. For now, we've treated the string you provided" + " as a list of comma-separated values." diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index fcfac9e9..7979aec2 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -76,7 +76,7 @@ module Jekyll def render_liquid(content, payload, info) Liquid::Template.parse(content).render!(payload, info) rescue Exception => e - Jekyll::Stevenson.error "Liquid Exception:", "#{e.message} in #{payload[:file]}" + Jekyll.logger.error "Liquid Exception:", "#{e.message} in #{payload[:file]}" raise e end diff --git a/lib/jekyll/deprecator.rb b/lib/jekyll/deprecator.rb index bd189e0f..8cbb93a5 100644 --- a/lib/jekyll/deprecator.rb +++ b/lib/jekyll/deprecator.rb @@ -18,14 +18,14 @@ module Jekyll def self.no_subcommand(args) if args.size > 0 && args.first =~ /^--/ && !%w[--help --version].include?(args.first) - Jekyll::Stevenson.error "Deprecation:", "Jekyll now uses subcommands instead of just \ + Jekyll.logger.error "Deprecation:", "Jekyll now uses subcommands instead of just \ switches. Run `jekyll help' to find out more." end end def self.deprecation_message(args, deprecated_argument, message) if args.include?(deprecated_argument) - Jekyll::Stevenson.error "Deprecation:", message + Jekyll.logger.error "Deprecation:", message end end end diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 45c123b4..b0ab8947 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -156,7 +156,7 @@ module Jekyll when String Time.parse(input) else - Jekyll::Stevenson.error "Invalid Date:", "'#{input}' is not a valid datetime." + Jekyll.logger.error "Invalid Date:", "'#{input}' is not a valid datetime." exit(1) end end diff --git a/lib/jekyll/related_posts.rb b/lib/jekyll/related_posts.rb index 8de5dc78..bdeb2240 100644 --- a/lib/jekyll/related_posts.rb +++ b/lib/jekyll/related_posts.rb @@ -51,7 +51,7 @@ module Jekyll def display(output) $stdout.print("\n") - $stdout.print(Jekyll::Stevenson.formatted_topic(output)) + $stdout.print(Jekyll.logger.formatted_topic(output)) $stdout.flush end end diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index e8b65135..e1eb95e2 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -421,12 +421,12 @@ module Jekyll def relative_permalinks_deprecation_method if config['relative_permalinks'] && !@deprecated_relative_permalinks $stderr.puts # Places newline after "Generating..." - Jekyll::Stevenson.warn "Deprecation:", "Starting in 1.1, permalinks for pages" + + Jekyll.logger.warn "Deprecation:", "Starting in 1.1, permalinks for pages" + " in subfolders must be relative to the" + " site source directory, not the parent" + " directory. Check http://jekyllrb.com/docs/upgrading/"+ " for more info." - $stderr.print Jekyll::Stevenson.formatted_topic("") + "..." # for "done." + $stderr.print Jekyll.logger.formatted_topic("") + "..." # for "done." @deprecated_relative_permalinks = true end end diff --git a/lib/jekyll/stevenson.rb b/lib/jekyll/stevenson.rb index 75a6471b..fdcec27a 100644 --- a/lib/jekyll/stevenson.rb +++ b/lib/jekyll/stevenson.rb @@ -1,15 +1,29 @@ -require 'logger' - module Jekyll class Stevenson + attr_accessor :log_level + + DEBUG = 0 + INFO = 1 + WARN = 2 + ERRROR = 3 + + # Public: Create a new instance of Stevenson, Jekyll's logger + # + # level - (optional, integer) the log level + # + # Returns nothing + def initialize(level = INFO) + @log_level = level + end + # Public: Print a jekyll message to stdout # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail # # Returns nothing - def self.info(topic, message) - $stdout.puts message(topic, message) + def info(topic, message) + $stdout.puts(message(topic, message)) if log_level <= INFO end # Public: Print a jekyll message to stderr @@ -18,8 +32,8 @@ module Jekyll # message - the message detail # # Returns nothing - def self.warn(topic, message) - $stderr.puts message(topic, message).yellow + def warn(topic, message) + $stderr.puts(message(topic, message).yellow) if log_level <= WARN end # Public: Print a jekyll error message to stderr @@ -28,8 +42,8 @@ module Jekyll # message - the message detail # # Returns nothing - def self.error(topic, message) - $stderr.puts message(topic, message).red + def error(topic, message) + $stderr.puts(message(topic, message).red) if log_level <= ERROR end # Public: Build a Jekyll topic method @@ -38,8 +52,8 @@ module Jekyll # message - the message detail # # Returns the formatted message - def self.message(topic, message) - formatted_topic(topic) + message.gsub(/\s+/, ' ') + def message(topic, message) + formatted_topic(topic) + message.gsub(/\s+/, ' ') end # Public: Format the topic @@ -47,7 +61,7 @@ module Jekyll # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # # Returns the formatted topic statement - def self.formatted_topic(topic) + def formatted_topic(topic) "#{topic} ".rjust(20) end end