diff --git a/lib/ougai/formatters/base.rb b/lib/ougai/formatters/base.rb index 36d6758..633f483 100644 --- a/lib/ougai/formatters/base.rb +++ b/lib/ougai/formatters/base.rb @@ -6,10 +6,11 @@ module Ougai module Formatters class Base < Logger::Formatter attr_accessor :trace_indent, :trace_max_lines + attr_reader :app_name, :hostname def initialize(app_name = nil, hostname = nil) @app_name = app_name || File.basename($0, ".rb") - @hostname = hostname || Socket.gethostname + @hostname = hostname || Socket.gethostname.force_encoding('UTF-8') @trace_indent = 2 @trace_max_lines = 100 end diff --git a/lib/ougai/version.rb b/lib/ougai/version.rb index fd29a83..b270d54 100644 --- a/lib/ougai/version.rb +++ b/lib/ougai/version.rb @@ -1,3 +1,3 @@ module Ougai - VERSION = "0.7.3" + VERSION = "0.7.4" end diff --git a/spec/formatters/base_spec.rb b/spec/formatters/base_spec.rb new file mode 100644 index 0000000..3241f77 --- /dev/null +++ b/spec/formatters/base_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe Ougai::Formatters::Base do + subject { described_class.new(app_name, hostname) } + + context 'without arguments and hostname contains a UTF-8 char' do + let (:app_name) { nil } + let (:hostname) { nil } + + it 'has default app_name and default hostname' do + myhostname = "Taro\xE2\x80\x99s-MacBook".force_encoding('ASCII-8BIT') + allow(Socket).to receive(:gethostname).and_return(myhostname) + expect(subject.app_name).to eq('rspec') + expect(subject.hostname).to eq("Taro’s-MacBook") + end + end + + context 'with app_name' do + let (:app_name) { 'myapp' } + let (:hostname) { nil } + + it 'has specified app_name and default hostname' do + myhostname = "Hanako's PC".encode('ASCII-8BIT') + allow(Socket).to receive(:gethostname).and_return(myhostname) + expect(subject.app_name).to eq('myapp') + expect(subject.hostname).to eq("Hanako's PC") + end + end + + context 'with hostname' do + let (:app_name) { nil } + let (:hostname) { 'myhost' } + + it 'has default app_name and specified hostname' do + expect(subject.app_name).to eq('rspec') + expect(subject.hostname).to eq('myhost') + end + end + + context 'with app_name and hostname' do + let (:app_name) { 'myapp' } + let (:hostname) { 'myhost' } + + it 'has specified app_name and specified hostname' do + expect(subject.app_name).to eq('myapp') + expect(subject.hostname).to eq('myhost') + end + end +end