Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
96ab01e8
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
96ab01e8
编写于
8月 18, 2008
作者:
J
Joshua Peek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Maintain a seperate buffer for each thread
上级
c1a8690d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
37 addition
and
11 deletion
+37
-11
activesupport/lib/active_support/buffered_logger.rb
activesupport/lib/active_support/buffered_logger.rb
+12
-7
activesupport/test/buffered_logger_test.rb
activesupport/test/buffered_logger_test.rb
+25
-4
未找到文件。
activesupport/lib/active_support/buffered_logger.rb
浏览文件 @
96ab01e8
...
...
@@ -33,11 +33,10 @@ def silence(temporary_level = ERROR)
attr_accessor
:level
attr_reader
:auto_flushing
attr_reader
:buffer
def
initialize
(
log
,
level
=
DEBUG
)
@level
=
level
@buffer
=
[]
@buffer
=
{}
@auto_flushing
=
1
@guard
=
Mutex
.
new
...
...
@@ -60,9 +59,7 @@ def add(severity, message = nil, progname = nil, &block)
# If a newline is necessary then create a new message ending with a newline.
# Ensures that the original message is not mutated.
message
=
"
#{
message
}
\n
"
unless
message
[
-
1
]
==
?\n
@guard
.
synchronize
do
buffer
<<
message
end
buffer
<<
message
auto_flush
message
end
...
...
@@ -96,8 +93,8 @@ def auto_flushing=(period)
def
flush
@guard
.
synchronize
do
unless
buffer
.
empty?
old_buffer
=
@
buffer
@buffer
=
[]
old_buffer
=
buffer
clear_buffer
@log
.
write
(
old_buffer
.
join
)
end
end
...
...
@@ -113,5 +110,13 @@ def close
def
auto_flush
flush
if
buffer
.
size
>=
@auto_flushing
end
def
buffer
@buffer
[
Thread
.
current
]
||=
[]
end
def
clear_buffer
@buffer
[
Thread
.
current
]
=
[]
end
end
end
activesupport/test/buffered_logger_test.rb
浏览文件 @
96ab01e8
...
...
@@ -70,7 +70,7 @@ def test_should_not_mutate_message
end
@logger
.
flush
assert
!
@output
.
string
.
empty?
,
@logger
.
buffer
.
size
assert
!
@output
.
string
.
empty?
,
@logger
.
send
(
:buffer
)
.
size
end
define_method
"test_disabling_auto_flush_with_
#{
disable
.
inspect
}
_should_flush_at_max_buffer_size_as_failsafe"
do
...
...
@@ -83,10 +83,10 @@ def test_should_not_mutate_message
end
@logger
.
info
'there it is.'
assert
!
@output
.
string
.
empty?
,
@logger
.
buffer
.
size
assert
!
@output
.
string
.
empty?
,
@logger
.
send
(
:buffer
)
.
size
end
end
def
test_should_know_if_its_loglevel_is_below_a_given_level
ActiveSupport
::
BufferedLogger
::
Severity
.
constants
.
each
do
|
level
|
@logger
.
level
=
ActiveSupport
::
BufferedLogger
::
Severity
.
const_get
(
level
)
-
1
...
...
@@ -105,7 +105,7 @@ def test_should_auto_flush_every_n_messages
@logger
.
info
'there it is.'
assert
!
@output
.
string
.
empty?
,
@output
.
string
end
def
test_should_create_the_log_directory_if_it_doesnt_exist
tmp_directory
=
File
.
join
(
File
.
dirname
(
__FILE__
),
"tmp"
)
log_file
=
File
.
join
(
tmp_directory
,
"development.log"
)
...
...
@@ -115,4 +115,25 @@ def test_should_create_the_log_directory_if_it_doesnt_exist
ensure
FileUtils
.
rm_rf
(
tmp_directory
)
end
def
test_logger_should_maintain_separate_buffers_for_each_thread
@logger
.
auto_flushing
=
false
a
=
Thread
.
new
do
@logger
.
info
(
"a"
);
Thread
.
pass
;
@logger
.
info
(
"b"
);
Thread
.
pass
;
@logger
.
info
(
"c"
);
@logger
.
flush
end
b
=
Thread
.
new
do
@logger
.
info
(
"x"
);
Thread
.
pass
;
@logger
.
info
(
"y"
);
Thread
.
pass
;
@logger
.
info
(
"z"
);
@logger
.
flush
end
a
.
join
b
.
join
assert_equal
"a
\n
b
\n
c
\n
x
\n
y
\n
z
\n
"
,
@output
.
string
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录