Ошибка регистрации ошибок в незашифрованном виде - PullRequest
0 голосов
/ 24 февраля 2012

В настоящее время у меня есть приложение OTP, для которого я использую протоколирование ошибок SASL.Журналы идут в двоичные файлы, которые я должен использовать библиотеку rb для чтения.Это большая проблема, так как мне бы очень хотелось иметь возможность экспортировать все журналы в открытый текст и прокладывать себе путь через них.Я нашел один комментарий к старому списку рассылки, который дал несколько ссылок на альтернативные error_loggers:

http://erlang.2086793.n4.nabble.com/Lots-of-questions-about-error-logger-td2109935.html

Но код устарел и выдает множество ошибок, когда я пытаюсь скомпилировать,Существуют ли какие-либо более новые библиотеки, которые я могу использовать для отправки сообщений SASL в текстовые файлы?

Ответы [ 3 ]

3 голосов
/ 25 февраля 2012

Вы можете попробовать лагер от басё, это хорошая библиотека для входа на эрланге.

С уважением.

1 голос
/ 25 февраля 2012

Вы можете попробовать Аллоггер за Великое Благо!

1 голос
/ 25 февраля 2012

Вы можете использовать фреймворк sasl для создания собственного обработчика событий. Подробное объяснение приведено в книге «Manning.Erlang и Otp в действии, часть 2, глава 7, стр. 170 (возможно, отличается для разных версий)», ведение журнала и обработка событий способом erlang / otp

Для реального кода, пожалуйста, прочитайте http://couchdb.apache.org/downloads.html файл исходного кода couchdb "couch_log.erl" и "couch_event_sup.erl", первый файл - обработчик событий, второй файл - модуль обертывания gen_server для "couch_log"

Следующие коды цитируются из файла "couch_log.erl" для объяснения

-behaviour(gen_event). %<======event handler OTP module behaviour
init([]) ->
    % read config and register for configuration changes

    % just stop if one of the config settings change. couch_server_sup
    % will restart us and then we will pick up the new settings.
    ok = couch_config:register(
        fun("log", "file") ->
            ?MODULE:stop();
        ("log", "level") ->
            ?MODULE:stop();
        ("log", "include_sasl") ->
            ?MODULE:stop()
        end),

    Filename = couch_config:get("log", "file", "couchdb.log"),
    Level = level_integer(list_to_atom(couch_config:get("log", "level", "info"))),
    Sasl = list_to_atom(couch_config:get("log", "include_sasl", "true")),

    case ets:info(?MODULE) of
    undefined -> ets:new(?MODULE, [named_table]);
    _ -> ok
    end,
    ets:insert(?MODULE, {level, Level}),

    case file:open(Filename, [append]) of %<<========open customzied file for logging
    {ok, Fd} ->
        {ok, {Fd, Level, Sasl}}; <<=========save the log file deviceIO into module state
    {error, eacces} ->
        {stop, {file_permission_error, Filename}};
    Error ->
        {stop, Error}
    end.

debug(Format, Args) ->
    {ConsoleMsg, FileMsg} = get_log_messages(self(), debug, Format, Args),
    gen_event:sync_notify(error_logger, {couch_debug, ConsoleMsg, FileMsg}). <=====generate customized logging message

handle_event({couch_debug, ConMsg, FileMsg}, {Fd, LogLevel, _Sasl}=State) <====handle the message
when LogLevel =< ?LEVEL_DEBUG ->
    log(Fd, ConMsg, FileMsg),
    {ok, State};

log(Fd, Pid, Level, Format, Args) ->
    Msg = io_lib:format(Format, Args),
    ok = io:format("[~s] [~p] ~s~n", [Level, Pid, Msg]), % dump to console too
    Msg2 = re:replace(lists:flatten(Msg),"\\r\\n|\\r|\\n", "\r\n",
        [global, {return, list}]),
    ok = io:format(Fd, "[~s] [~s] [~p] ~s\r~n", [httpd_util:rfc1123_date(), Level, Pid, Msg2]).

log(Fd, ConsoleMsg, FileMsg) ->
    ok = io:put_chars(ConsoleMsg),
    ok = io:put_chars(Fd, FileMsg).  <=====write the log into file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...