summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2018-03-23 12:24:34 +0000
committerDouwe Maan <douwe@gitlab.com>2018-03-23 12:24:34 +0000
commit69941f9075b64e8ed518a33e87b00c52169f4dbf (patch)
tree0023ae5c66b9da5250ed914ae93d665f7250df88
parente19b08ba3f985eacfdf0ecf1c06799959d02cfe7 (diff)
parent9087e96083fcfe22c2cb111add55d3d0009eda9a (diff)
downloadgitlab-shell-69941f9075b64e8ed518a33e87b00c52169f4dbf.tar.gz
Merge branch 'log-flush' into 'master'v7.1.1
Flush log file after every write See merge request gitlab-org/gitlab-shell!199
-rw-r--r--CHANGELOG3
-rw-r--r--VERSION2
-rwxr-xr-xbin/test-logger10
-rw-r--r--lib/gitlab_logger.rb6
-rw-r--r--spec/gitlab_logger_spec.rb12
5 files changed, 32 insertions, 1 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 782d7b7..d9937f7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+v7.1.1
+ - Flush log file after every write (!199)
+
v7.1.0
- Migrate `git-upload-archive` to gitaly
diff --git a/VERSION b/VERSION
index a3fcc71..21c8c7b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-7.1.0
+7.1.1
diff --git a/bin/test-logger b/bin/test-logger
new file mode 100755
index 0000000..11b2a55
--- /dev/null
+++ b/bin/test-logger
@@ -0,0 +1,10 @@
+#!/usr/bin/env ruby
+
+# The purpose of this executable is to test that gitlab-shell logging
+# works correctly in combination with Kernel.exec.
+
+require_relative '../lib/gitlab_init'
+require_relative '../lib/gitlab_logger'
+
+$logger.info(ARGV.first)
+Kernel.exec('true')
diff --git a/lib/gitlab_logger.rb b/lib/gitlab_logger.rb
index cdca25b..f81c2f6 100644
--- a/lib/gitlab_logger.rb
+++ b/lib/gitlab_logger.rb
@@ -25,7 +25,13 @@ class GitlabLogger
def initialize(level, path, log_format)
@level = level
+
@log_file = File.open(path, 'ab')
+ # By default Ruby will buffer writes. This is a problem when we exec
+ # into a new command before Ruby flushed its buffers. Setting 'sync' to
+ # true disables Ruby's buffering.
+ @log_file.sync = true
+
@log_format = log_format
end
diff --git a/spec/gitlab_logger_spec.rb b/spec/gitlab_logger_spec.rb
index 741ee13..eec6648 100644
--- a/spec/gitlab_logger_spec.rb
+++ b/spec/gitlab_logger_spec.rb
@@ -1,5 +1,6 @@
require_relative 'spec_helper'
require_relative '../lib/gitlab_logger'
+require 'securerandom'
describe :convert_log_level do
subject { convert_log_level :extreme }
@@ -112,4 +113,15 @@ describe GitlabLogger do
expect(JSON.parse(first_line)).to include('msg' => '"hello\x80world"')
end
end
+
+ describe 'log flushing' do
+ it 'logs get written even when calling Kernel.exec' do
+ msg = SecureRandom.hex(12)
+ test_logger_status = system('bin/test-logger', msg)
+ expect(test_logger_status).to eq(true)
+
+ grep_status = system('grep', '-q', '-e', msg, GitlabConfig.new.log_file)
+ expect(grep_status).to eq(true)
+ end
+ end
end