Middleware dirancang untuk mendaftarkan semua permintaan dan permintaan HTTP pada kuda.
Dukungan: [email protected]
$ boss install github.com/dliocode/horse-dataloggerTambahkan folder berikut ke proyek Anda, di Project> Options> Delphi Compiler> Pencarian Path
../src
Datalogger - Ini adalah alat yang digunakan untuk mendaftarkan semua permintaan kuda HTTP.
Untuk informasi lebih lanjut tentang cara menggunakan alat ini dalam situasi lain, klik di sini.
ClientIP - Digunakan untuk menangkap IP.
Untuk menggunakan middleware ini, Anda perlu memahami beberapa hal.
Penyedia : Ini pada dasarnya untuk menyimpan log Anda.
Penyedia Diponable: Klik Di Sini
Pada posisi mana disarankan untuk menggunakan penyedia ini di dalam kuda: kami sarankan ditambahkan di posisi pertama untuk merekam semua informasi yang dilewati olehnya.
Untuk menggunakannya perlu untuk ditambahkan untuk menggunakan Horse.DataLogger dan kemudian menambahkan desain yang dipilih untuk mendaftarkan log;
Sekarang setelah Anda memahami sedikit tentang cara kerjanya, mari kita pergi ke contoh;
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
Setiap format memiliki struktur yang berbeda dan sudah ditetapkan sebelumnya.
Output log gabungan Apache standar.
${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}"
Output logging umum.
${request_remote_clientip} [${time}] "${request_method} ${request_raw_path_info}${request_query} '${request_protocol_version}" ${response_status_code} ${response_content_length}
Output log sederhana
${request_method} ${request_raw_path_info}${request_query} ${response_status_code} ${execution_time} ms - ${response_content_length}
Lebih pendek dari standar, juga termasuk waktu respons.
${request_remote_clientip} ${request_method} ${request_raw_path_info}${request_query} ${request_protocol_version} ${response_status_code} ${response_content_length} ${execution_time} ms
Output log minimum
${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 .Anda dapat menentukan format penggunaan Anda sendiri
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}
Anda dapat menambahkan beberapa menyediakan untuk mendaftarkan setiap permintaan di berbagai lokasi.
Untuk contoh ini, kami akan menunjukkan permintaan konsol dan menyimpan dalam format teks, semua menggunakan dua unit untuk mendaftar
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 .