소스 검색

Merge pull request #129 from basho/adt-unicode-fix

Support writing unicode to files, thanks @jacktang
pull/122/merge
Andrew Thompson 12 년 전
부모
커밋
a0adf8c554
2개의 변경된 파일22개의 추가작업 그리고 2개의 파일을 삭제
  1. +1
    -1
      src/lager_crash_log.erl
  2. +21
    -1
      src/lager_file_backend.erl

+ 1
- 1
src/lager_crash_log.erl 파일 보기

@ -207,7 +207,7 @@ do_log({log, Event}, #state{name=Name, fd=FD, inode=Inode, flap=Flap,
Time = [Date, " ", TS," =", ReportStr, "====\n"],
NodeSuffix = other_node_suffix(Pid),
Msg = io_lib:format("~s~s~s", [Time, MsgStr, NodeSuffix]),
case file:write(NewFD, Msg) of
case file:write(NewFD, unicode:characters_to_binary(Msg)) of
{error, Reason} when Flap == false ->
?INT_LOG(error, "Failed to write log message to file ~s: ~s",
[Name, file:format_error(Reason)]),

+ 21
- 1
src/lager_file_backend.erl 파일 보기

@ -210,7 +210,7 @@ write(#state{name=Name, fd=FD, inode=Inode, flap=Flap, size=RotSize,
do_write(#state{fd=FD, name=Name, flap=Flap} = State, Level, Msg) ->
%% delayed_write doesn't report errors
_ = file:write(FD, Msg),
_ = file:write(FD, unicode:characters_to_binary(Msg)),
{mask, SyncLevel} = State#state.sync_on,
case (Level band SyncLevel) /= 0 of
true ->
@ -476,6 +476,26 @@ filesystem_test_() ->
?assertMatch([_, _, "[error]", Pid, "Test message\n"], re:split(Bin, " ", [{return, list}, {parts, 5}]))
end
},
{"don't choke on unicode",
fun() ->
gen_event:add_handler(lager_event, lager_file_backend, [{"test.log", info}, {lager_default_formatter}]),
lager:log(error, self(),"~ts", [[20013,25991,27979,35797]]),
{ok, Bin} = file:read_file("test.log"),
Pid = pid_to_list(self()),
?assertMatch([_, _, "[error]", Pid, [228,184,173,230,150,135,230,181,139,232,175,149, $\n]], re:split(Bin, " ", [{return, list}, {parts, 5}]))
end
},
{"don't choke on latin-1",
fun() ->
%% XXX if this test fails, check that this file is encoded latin-1, not utf-8!
gen_event:add_handler(lager_event, lager_file_backend, [{"test.log", info}, {lager_default_formatter}]),
lager:log(error, self(),"~ts", ["LÆÝÎN-ï"]),
{ok, Bin} = file:read_file("test.log"),
Pid = pid_to_list(self()),
Res = re:split(Bin, " ", [{return, list}, {parts, 5}]),
?assertMatch([_, _, "[error]", Pid, [76,195,134,195,157,195,142,78,45,195,175,$\n]], Res)
end
},
{"file can't be opened on startup triggers an error message",
fun() ->
{ok, FInfo} = file:read_file_info("test.log"),

불러오는 중...
취소
저장