Промежуточное программное обеспечение, предназначенное для регистрации всех HTTP -запросов и запросов на лошади.
Поддержка: [email protected]
$ boss install github.com/dliocode/horse-dataloggerДобавьте следующие папки в свой проект, в проекте> Параметры> Delphi Compiler> Поиск
../src
DataLogger - это инструмент, используемый для регистрации всех запросов HTTP Horse.
Для получения дополнительной информации о том, как использовать этот инструмент в других ситуациях, нажмите здесь.
Clientip - используется для захвата IP.
Чтобы использовать это промежуточное программное обеспечение, вам нужно понять некоторые вещи.
Провайдеры : это по сути для хранения ваших журналов.
Diponable Providers : нажмите здесь
На какой позиции рекомендуется использовать этого поставщика на лошади: мы рекомендуем добавить его в первую позицию для записи всей информации, переданной им.
Для его использования необходимо добавить в Horse.DataLogger , а затем добавить проекты , выбранные для регистрации журналов;
Теперь, когда вы немного поняли, как это работает, давайте перейдем к примерам;
uses
Horse, Horse.Constants,
Horse.DataLogger,
DataLogger.Provider.Console, // Provider para Console
System.SysUtils;
begin
THorse
.Use(THorseDataLogger.Logger([TProviderConsole.Create])) // Adiconando Middleware e o Provider
.Get( ' /ping ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send( ' pong ' );
end );
THorse.KeepConnectionAlive := True;
THorse.Listen( 8080 ,
procedure(AHorse: THorse)
begin
Writeln( ' ' + Format(START_RUNNING, [THorse.Host, THorse.Port]));
Writeln;
end );
end . Combined, Common, Dev, Short, Tiny
Каждый формат имеет различную и предварительную структуру.
Стандартный Apache комбинированный вывод журнала.
${request_remote_clientip} [${time}] "${request_method} ${request_raw_path_info}${request_query} '${request_protocol_version}" ${response_status_code} ${response_content_length} "${request_referer}" "${request_user_agent}"
Общий выход для ведения журнала.
${request_remote_clientip} [${time}] "${request_method} ${request_raw_path_info}${request_query} '${request_protocol_version}" ${response_status_code} ${response_content_length}
Простой выход для журнала
${request_method} ${request_raw_path_info}${request_query} ${response_status_code} ${execution_time} ms - ${response_content_length}
Короче стандарта, включая время отклика.
${request_remote_clientip} ${request_method} ${request_raw_path_info}${request_query} ${request_protocol_version} ${response_status_code} ${response_content_length} ${execution_time} ms
Минимальный выход для журнала
${request_method} ${request_raw_path_info}${request_query} ${response_status_code} ${response_content_length} - ${execution_time} ms
uses
Horse, Horse.Constants,
Horse.DataLogger,
DataLogger.Provider.Console, // Provider para Console
System.SysUtils;
begin
THorse
.Use(
THorseDataLogger.Logger(
THorseDataLoggerFormat.tfCombined, // Formato dos logs
[TProviderConsole.Create] // Adicionado o Middleware
)
)
.Get( ' /ping ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send( ' pong ' );
end );
// output: 0:0:0:0:0:0:0:1 [2022-12-22 17:18:31:791] "GET /ping HTTP/1.1" 200 4 "-" "PostmanRuntime/7.30.0"
THorse.KeepConnectionAlive := True;
THorse.Listen( 8080 ,
procedure(AHorse: THorse)
begin
Writeln( ' ' + Format(START_RUNNING, [THorse.Host, THorse.Port]));
Writeln;
end );
end .Вы можете определить свои собственные форматы использования
uses
Horse, Horse.Constants,
Horse.DataLogger,
DataLogger.Provider.Console, // Provider para Console
System.SysUtils;
begin
THorse
.Use(
THorseDataLogger.Logger(
// Formato dos logs
' ${request_method} ${request_raw_path_info}${request_query} ${response_status_code} ${response_content_length} - ${execution_time} ms ' ,
// Adicionado o Middleware
[TProviderConsole.Create]
)
)
.Get( ' /ping ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send( ' pong ' );
end );
// output: 0:0:0:0:0:0:0:1 [2022-12-22 17:18:31:791] "GET /ping HTTP/1.1" 200 4 "-" "PostmanRuntime/7.30.0"
THorse.KeepConnectionAlive := True;
THorse.Listen( 8080 ,
procedure(AHorse: THorse)
begin
Writeln( ' ' + Format(START_RUNNING, [THorse.Host, THorse.Port]));
Writeln;
end );
end . ${time}
${execution_time} // Time in ms
${request_accept}
${request_authorization}
${request_cache_control}
${request_connection}
${request_content}
${request_content_encoding}
${request_content_length}
${request_content_type}
${request_content_version}
${request_cookie}
${request_cookie_fields}
${request_derived_from}
${request_from}
${request_host}
${request_internal_path_info}
${request_internal_script_name}
${request_method}
${request_path_info}
${request_path_translated}
${request_protocol_version}
${request_query}
${request_query_fields}
${request_raw_path_info}
${request_referer}
${request_remote_addr}
${request_remote_clientip}
${request_remote_host}
${request_remote_ip}
${request_script_name}
${request_server_port}
${request_title}
${request_url}
${request_user_agent}
${response_allow}
${response_content}
${response_content_encoding}
${response_content_length}
${response_content_type}
${response_content_version}
${response_custom_headers}
${response_date}
${response_derived_from}
${response_expires}
${response_last_modified}
${response_location}
${response_log_message}
${response_realm}
${response_reason}
${response_server}
${response_status_code}
${response_title}
${response_version}
${response_wwwauthenticate}
Вы можете добавить несколько предоставляющих для регистрации каждого запроса в разных местах.
Для этого примера мы покажем запросы на консоли и сохранив в текстовом формате, все используя два единицы для регистрации
DataLogger.Provider.Console, DataLogger.Provider.TextFile
uses
Horse, Horse.Constants,
Horse.DataLogger,
DataLogger.Provider.Console, // Provider para Console
DataLogger.Provider.TextFile, // Provider para TextFile
System.IOUtils, System.SysUtils;
begin
THorse
.Use(
THorseDataLogger.Logger(
THorseDataLoggerFormat.tfCombined, // Formato dos logs
TProviderConsole.Create,
TProviderTextFile.Create
.LogDir(TPath.GetDirectoryName(ParamStr( 0 )) + ' logrequest ' )
.PrefixFileName( ' request_ ' )
.Extension( ' .txt ' )
]
)
)
.Get( ' /ping ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send( ' pong ' );
end );
// output: 0:0:0:0:0:0:0:1 [2022-12-22 17:18:31:791] "GET /ping HTTP/1.1" 200 4 "-" "PostmanRuntime/7.30.0"
THorse.KeepConnectionAlive := True;
THorse.Listen( 8080 ,
procedure(AHorse: THorse)
begin
Writeln( ' ' + Format(START_RUNNING, [THorse.Host, THorse.Port]));
Writeln;
end );
end .