Skip to content

Commit 50e973d

Browse files
authored
Merge pull request #29 from jonmagic/logging
Add Grim.logger
2 parents 6b8a8e1 + e8fda58 commit 50e973d

File tree

7 files changed

+79
-4
lines changed

7 files changed

+79
-4
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,19 @@ pdf[0].save('/path/to/image.png', {
8686
})
8787
```
8888

89+
Grim has limited logging abilities. The default logger is `Grim::NullLogger` but you can also set your own logger.
90+
91+
```ruby
92+
require "logger"
93+
Grim.logger = Logger.new($stdout).tap { |logger| logger.progname = 'Grim' }
94+
Grim.processor = Grim::ImageMagickProcessor.new({:ghostscript_path => "/path/to/bin/gs"})
95+
pdf = Grim.reap("/path/to/pdf")
96+
pdf[3].save('/path/to/image.png')
97+
# D, [2016-06-09T22:43:07.046532 #69344] DEBUG -- grim: Running imagemagick command
98+
# D, [2016-06-09T22:43:07.046626 #69344] DEBUG -- grim: PATH=/path/to/bin:/usr/local/bin:/usr/bin
99+
# D, [2016-06-09T22:43:07.046787 #69344] DEBUG -- grim: convert -resize 1024 -antialias -render -quality 90 -colorspace RGB -interlace none -density 300 /path/to/pdf /path/to/image.png
100+
```
101+
89102
## Reference
90103

91104
* [jonmagic.com: Grim](http://jonmagic.com/blog/archives/2011/09/06/grim/)

lib/grim.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,26 @@ class UnprocessablePage < Grim::Exception
5050
def self.reap(path)
5151
Grim::Pdf.new(path)
5252
end
53+
54+
# Set a Logger compatible logger for Grim.
55+
#
56+
# logger - Object with same interface as Logger.new
57+
def self.logger=(logger)
58+
@logger = logger
59+
end
60+
61+
# Logger to use internally. Defaults to Grim::NullLogger.
62+
#
63+
# Returns a Logger compatible logger.
64+
def self.logger
65+
@logger ||= Grim::NullLogger.new
66+
end
5367
end
5468

5569
require 'grim/pdf'
5670
require 'grim/page'
5771
require 'grim/image_magick_processor'
5872
require 'grim/multi_processor'
73+
require 'grim/null_logger'
5974

60-
Grim.processor = Grim::ImageMagickProcessor.new
75+
Grim.processor = Grim::ImageMagickProcessor.new

lib/grim/image_magick_processor.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,13 @@ def save(pdf, index, path, options)
4848
command_env['PATH'] = "#{File.dirname(@ghostscript_path)}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
4949
end
5050

51-
result, status = Open3.capture2e(command_env, command.join(' '))
51+
Grim.logger.debug { "Running imagemagick command" }
52+
if command_env.any?
53+
Grim.logger.debug { command_env.map {|k,v| "#{k}=#{v}" }.join(" ") }
54+
end
55+
Grim.logger.debug { command.join(" ") }
56+
57+
result, status = Open3.capture2e(command_env, command.join(" "))
5258

5359
status.success? || raise(UnprocessablePage, result)
5460
end

lib/grim/null_logger.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require "logger"
2+
3+
module Grim
4+
class NullLogger
5+
def initialize(*args); end
6+
def debug(*args); end
7+
def info(*args); end
8+
end
9+
end

lib/grim/page.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ def save(path, options={})
5050
# Returns a String.
5151
#
5252
def text
53-
`#{[@pdftotext_path, "-enc", "UTF-8", "-f", @number, "-l", @number, Shellwords.escape(@pdf.path), "-"].join(' ')}`
53+
command = [@pdftotext_path, "-enc", "UTF-8", "-f", @number, "-l", @number, Shellwords.escape(@pdf.path), "-"].join(' ')
54+
Grim.logger.debug { "Running pdftotext command" }
55+
Grim.logger.debug { command }
56+
`#{command}`
5457
end
5558
end
5659
end

spec/lib/grim/null_logger_spec.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require 'spec_helper'
2+
require "stringio"
3+
4+
describe Grim::NullLogger do
5+
it "acts like Logger but doesn't log anything" do
6+
io = StringIO.new
7+
logger = Grim::NullLogger.new(io)
8+
logger.debug "hello world"
9+
expect(io.string).to eq("")
10+
end
11+
end

spec/lib/grim_spec.rb

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,27 @@
2626
expect(Grim::COLORSPACE).to eq('RGB')
2727
end
2828

29-
describe "#reap" do
29+
describe ".reap" do
3030
it "should return an instance of Grim::Pdf" do
3131
expect(Grim.reap(fixture_path("smoker.pdf")).class).to eq(Grim::Pdf)
3232
end
3333
end
34+
35+
describe ".logger=" do
36+
it "sets Grim.logger" do
37+
original_logger = Grim.logger
38+
begin
39+
Grim.logger = "foo"
40+
expect(Grim.logger).to eq("foo")
41+
ensure
42+
Grim.logger = original_logger
43+
end
44+
end
45+
end
46+
47+
describe ".logger" do
48+
it "returns a Grim::NullLogger by default" do
49+
expect(Grim.logger).to be_instance_of(Grim::NullLogger)
50+
end
51+
end
3452
end

0 commit comments

Comments
 (0)