diff options
author | Douwe Maan <douwe@gitlab.com> | 2018-03-23 12:24:34 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2018-03-23 12:24:34 +0000 |
commit | 69941f9075b64e8ed518a33e87b00c52169f4dbf (patch) | |
tree | 0023ae5c66b9da5250ed914ae93d665f7250df88 | |
parent | e19b08ba3f985eacfdf0ecf1c06799959d02cfe7 (diff) | |
parent | 9087e96083fcfe22c2cb111add55d3d0009eda9a (diff) | |
download | gitlab-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-- | CHANGELOG | 3 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rwxr-xr-x | bin/test-logger | 10 | ||||
-rw-r--r-- | lib/gitlab_logger.rb | 6 | ||||
-rw-r--r-- | spec/gitlab_logger_spec.rb | 12 |
5 files changed, 32 insertions, 1 deletions
@@ -1,3 +1,6 @@ +v7.1.1 + - Flush log file after every write (!199) + v7.1.0 - Migrate `git-upload-archive` to gitaly @@ -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 |