#log #logging #json #http #http-api #log-level

app rust-http-logger

将HTTP API调用记录到文件中

2个不稳定版本

使用旧的Rust 2015

0.2.0 2016年8月6日
0.1.0 2016年8月6日

#101 in #log-level

WTFPL 许可证

10KB
163

rust-http-logger

[Crates.io (https://img.shields.io/crates/v/rust-http-logger.svg)](https://crates.io/crates/rust-http-logger)

从客户端JS记录到服务器的HTTP服务器(到文件中)。

服务器接受JSON或HTML表单POST数据

POST:

error=my data&info=another data&debug=debug data

JSON(别忘了添加Content-type: application/json)

{
  "error":"Some error happened: TRACEBACK ... ", 
  "info":"This user is suspicious", 
  "warning":"Oh, this happened, beware!", 
  "debug":"NOOO BUGs, BUGs everywhere!"
}

用法

rust-http-logger localhost:3000 api.log

现在服务器正在您的机器上的端口3000上接受传入连接,并将数据记录到api.log。要测试此功能,您可以使用curl

curl -X POST -d "error=my data" https://127.0.0.1:3000/log/

您将获得如下JSON响应

{"success":{"error":"51"},"errors":{}}

这意味着我们成功地将51B写入到错误日志级别的日志文件中。如果有错误,将在JSON结构的"错误"键中显示。

api.log文件应包含

[2016-08-06 13:34:04.091372 +02:00] [ERROR] my data

安装

最好的方法是安装rust并自己编译二进制文件。在Releases部分有一些预构建的二进制文件。

性能

在我的Macbook Air机器上使用wrk,大约7k个请求/秒,有1000个并发连接。

wrk -d60s -c1000 -t100 -s wrk-script.lua http://localhost:3000/log/
Running 1m test @ http://localhost:3000/log/
  100 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.34ms    1.52ms  67.08ms   93.87%
    Req/Sec   273.68    101.64   660.00     79.48%
  428271 requests in 1.00m, 73.52MB read
  Socket errors: connect 0, read 1702, write 0, timeout 0
Requests/sec:   7125.67
Transfer/sec:      1.22MB

wrk-script.lua

wrk.scheme = "http"
wrk.host = "localhost"
wrk.port = 3000
wrk.method = "POST"
wrk.path = "/log/"
wrk.headers["Content-Type"] = "application/json"

wrk.body = [[{
    "error":"OHH performance",
    "info":"much information, very wow",
    "warning":"so warn, much very wow",
    "debug":"oh the debugs, so many debugs"
}]]

依赖项

~13MB
~266K SLoC