{"id":13597551,"url":"https://github.com/fooinha/nginx-json-log","last_synced_at":"2026-01-18T09:35:47.577Z","repository":{"id":48051744,"uuid":"76188937","full_name":"fooinha/nginx-json-log","owner":"fooinha","description":"Highly configurable JSON format logging per Location - nginx logging module - aka. kasha 🍲","archived":false,"fork":false,"pushed_at":"2021-08-09T20:52:27.000Z","size":324,"stargazers_count":42,"open_issues_count":4,"forks_count":21,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-10T01:41:13.312Z","etag":null,"topics":["elk","http","jansson","json","json-format","kafka","kasha","logging","nginx","nginx-http","rdkafka"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fooinha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-11T17:27:27.000Z","updated_at":"2024-06-28T06:44:57.000Z","dependencies_parsed_at":"2022-08-12T17:31:10.355Z","dependency_job_id":null,"html_url":"https://github.com/fooinha/nginx-json-log","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/fooinha/nginx-json-log","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooinha%2Fnginx-json-log","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooinha%2Fnginx-json-log/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooinha%2Fnginx-json-log/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooinha%2Fnginx-json-log/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fooinha","download_url":"https://codeload.github.com/fooinha/nginx-json-log/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fooinha%2Fnginx-json-log/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534168,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elk","http","jansson","json","json-format","kafka","kasha","logging","nginx","nginx-http","rdkafka"],"created_at":"2024-08-01T17:00:35.922Z","updated_at":"2026-01-18T09:35:47.560Z","avatar_url":"https://github.com/fooinha.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# ngx-json-log  [![Build Status](https://travis-ci.com/fooinha/nginx-json-log.svg?branch=master)](https://travis-ci.com/fooinha/nginx-json-log)\n\nnginx modules for logging in custom json format - aka kasha (🍲)\n\n## Description\n\nThis module adds to nginx the ability of advanced JSON logging of HTTP requests per location.\n\nThis module adds to nginx the ability of advanced JSON logging of Stream connections per server.\n\nIt's possible to log to a destination ouput any request/session made to a specific nginx location.\n\nThe output format is configurable.\n\nIt also allows to log complex and multi-level JSON documents.\n\nIt supports logging to text file, to syslog or to a kafka topic.\n\nIt supports multiple output destinations with multiple formats for a location.\n\n### Current version and limitations\n\nCurrent version released is 0.0.8.\n\nStream logging is only available when using nginx (\u003e= 1.11.2).\n\n\n## Use cases\n\nThat are many use cases.\n\nMany things can be done by using the access log data.\n\nHaving it in JSON format makes easier for integration with other platforms and applications.\n\nA quick example:\n\n![](docs/use-case-kafka-logs.png?raw=true)\n\n\n### Configuration\n\nEach logging configuration is based on a json_log_format. (🍲)\n\nA json_log_format is a ';' separated list of items to include in the logging preparation.\n\nThe left hand side part of item will be the JSON Path for the variable name\n\nThe left hand side part can be prefixed with 's:', 'i:', 'r:', 'b:' or 'n:', so, the JSON encoding type can be controlled.\n\n* 's:' - JSON string ( default )\n* 'i:' - JSON integer\n* 'r:' - JSON real\n* 'b:' - JSON boolean\n* 'n:' - JSON null\n\nAdditional prefix:\n\n* 'a:' - JSON Array - MUST be used before other prefixes. All keys with same name and defined as array will be its values grouped together in an array. ( see example below )\n\n\nThe right hand side will be the variable's name or literal value.\nFor this, known or previously setted variables, can be used by using the '$' before name.\n\nCommon HTTP nginx builtin variables like $uri, or any other variable set by other handler modules can be used.\n\nCommon STREAM nginx builtin variables like $remote_addr, or any other variable set by other handler modules can be used.\n\nAdditional variables are provided by this module. See the available variables below at [Variables section](#variables).\n\nThe output is sent to the location specified by the first json_log_format argument.\nThe possible output locations are:\n\n* \"file:\" - The logging location will be a local filesystem file.\n* \"kafka:\" - The logging location will be a Kafka topic.\n\n#### Kafka Message Id\n\nFor HTTP logging, if kafka output is used the value from $request_id nginx variable will be used to set kafka's message id.\n\nThe $request_id is only available for nginx (\u003e=1.11.0).\n\n#### Example Configuration\n\n\n##### A simple configuration example\n\n```yaml\n     json_log_format my_log '\n        src.ip                      $remote_addr;\n        src.port                    $remote_port;\n        dst.ip                      $server_addr;\n        dst.port                    $server_port;\n        _date                       $time_iso8601;\n        r:_real                     1.1;\n        i:_int                      2016;\n        i:_status                   $status;\n        b:_notrack                  false;\n        _literal                    root;\n        comm.proto                  http;\n        comm.http.method            $request_method;\n        comm.http.path              $uri;\n        comm.http.host              $host;\n        comm.http.server_name       $server_name;\n        a:i:list                    1;\n        a:list                      string;\n     ';\n\n     json_log file:/tmp/log my_log;'\n     json_log syslog:server=unix:/dev/log my_log;'\n```\n\nThis will produce the following JSON line to '/tmp/log' file .\nTo ease reading, it's shown here formatted with newlines.\n\n```json\n{\n  \"_date\": \"2016-12-11T18:06:54+00:00\",\n  \"_int\": 2016,\n  \"_literal\": \"root\",\n  \"_real\": 1.1,\n  \"_status\": 200,\n  \"_notrack\": false,\n  \"comm\": {\n    \"http\": {\n      \"host\": \"localhost\",\n      \"method\": \"HEAD\",\n      \"path\": \"/index.html\",\n      \"server_name\": \"localhost\"\n    },\n    \"proto\": \"http\"\n  },\n  \"dst\": {\n    \"ip\": \"127.0.0.1\",\n    \"port\": \"80\"\n  },\n  \"src\": {\n    \"ip\": \"127.0.0.1\",\n    \"port\": \"52136\"\n  },\n  \"list\": [\n    1,\n    \"string\"\n  ]\n}\n```\n\n##### A example using perl handler variables.\n\n```yaml\n       perl_set $bar '\n           sub {\n            my $r = shift;\n            my $uri = $r-\u003euri;\n\n            return \"yes\" if $uri =~ /^\\/bar/;\n                        return \"\";\n        }';\n\n       json_log_format with_perl '\n            comm.http.server_name       $server_name;\n            perl.bar                    $bar;\n       ';\n       json_log file:/tmp/log with_perl'\n ```\n\n A request sent to **/bar** .\n\n ```json\n{\n\n  \"comm\": {\n    \"http\": {\n      \"server_name\": \"localhost\"\n    }\n  },\n  \"perl\": {\n    \"bar\": \"yes\"\n  }\n}\n```\n\n##### A example for stream servers\n```yaml\n       json_log_format stream '\n        _date                       $time_iso8601;\n        src.addr                    $remote_addr;\n        src.port                    $remote_port\n        session.bytes.received      $bytes_received;\n        session.bytes.sent          $bytes_received;\n        session.connection          $connection;\n        session.protocol            $protocol;\n        session.time                $session_time;\n        session.status              $status;\n       ';\n       json_log file:/tmp/stream.log stream'\n ```\n\n ```json\n\n{\n  \"_date\": \"2017-04-09T20:52:41+00:00\",\n  \"session\": {\n    \"bytes\": {\n      \"received\": \"23\",\n      \"sent\": \"23\"\n    },\n    \"connection\": \"1\",\n    \"protocol\": \"TCP\",\n    \"status\": \"200\",\n    \"time\": \"6.875\"\n  },\n  \"src\": {\n    \"addr\": \"127.0.0.1\"\n  }\n}\n\n\n ```\n\n#### Encoding operations\n\nThe value of  key of type `string` can be encoded in 3 ways.\nTo change the encoding output this should be configured per output key by specifying the encoding after a \"|\" character.\nFor instance for `base64` output the key should be like this `key|base64`\n\nThe default encoding is *plain* when no encoding is supplied.\n\n * plain\n * base64\n * hex\n * hexdump\n\nFormat example:\n```yaml\n\n    json_log_format body_log '\n       http.req.body_plain            $http_json_log_req_body;\n       http.req.body_hex|hex          $http_json_log_req_body;\n       http.req.body_hexdump|hexdump  $http_json_log_req_body;\n       http.req.body_base64|base64    $http_json_log_req_body;\n    ';\n```\n\nNote: use a different key name if the output with different encoding is wanted for the same $var .\n\nResponse:\n```json\n{\n  \"http\": {\n    \"req\": {\n      \"body_base64\": \"Zm9vPWJhcg==\",\n      \"body_hex\": \"666f6f3d626172\",\n      \"body_hexdump\": [\n        \"66 6f 6f 3d 62 61 72 .. ..  .. .. .. .. .. .. .. |foo=bar         |\"\n      ],\n      \"body_plain\": \"foo=bar\"\n    }\n  }\n}\n\n```\n\n\n### Directives\n\n\n* Syntax: **json_log_format** _format_name_ { _format_ } _if_=...;\n* Default: —\n* Context: http main\n* Context: stream main\n\n###### _format_name_ ######\n\nSpecifies a format name that can be used by a **json_log** directive\n\n###### _format_ ######\n\nSee details above.\n\n###### _if_=... ######\n\nWorks the same way as _if_ argument from http [access_log](http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log) directive.\n\n---\n\n* Syntax: **json_log** _location_ _format_name_\n* Default: —\n* Context: http location\n* Context: stream server\n\n\n###### _location_ ######\n\nSpecifies the location for the output...\n\nThe output location type should be prefixed with supported location types. ( **file:** or **kafka:** )\n\nFor a **file:** type the value part will be a local file name. e.g. **file:**/tmp/log\n\nFor a **kafka:** type the value part will be the topic name. e.g. **kafka:** topic\n\nThe kafka output only happens if a list of brokers is defined by **json_log_kafka_brokers** directive.\n\n###### _format_name_ ######\n\nThe format to use when writing to output destination.\n\n---\n\n* Syntax: **json_log_kafka_brokers** list of brokers separated by spaces;\n* Default: —\n* Context: http main\n* Context: stream main\n\n---\n\n* Syntax: **json_log_kafka_client_id** _id_;\n* Default: nginx\n* Context: http main\n* Context: stream main\n\n---\n\n* Syntax: **json_log_kafka_compression** _compression_codec_;\n* Default: snappy\n* Context: http main\n* Context: stream main\n\n---\n\n* Syntax: **json_log_kafka_log_level** _numeric_log_level_;\n* Default: 6\n* Context: http main\n* Context: stream main\n\n---\n\n* Syntax: **json_log_kafka_max_retries** _numeric_;\n* Default: 0\n* Context: http main\n* Context: stream main\n\n---\n\n* Syntax: **json_log_kafka_buffer_max_messages** _numeric_;\n* Default: 100000\n* Context: http main\n* Context: stream main\n\n---\n\n* Syntax: **json_log_kafka_backoff_ms** _numeric_;\n* Default: 10\n* Context: http main\n* Context: stream main\n\n---\n\n* Syntax: **json_log_kafka_partition** _partition_;\n* Default: RD_KAFKA_PARTITION_UA\n* Context: http main\n* Context: stream main\n\n---\n\n\n### Variables\n\n#### $http_json_log_req_headers;\n\nCreates a json object with all request headers.\n\nExample:\n\n```\n    \"req\": {\n        \"headers\": {\n            \"Host\": \"localhost\",\n            \"User-Agent\": \"curl/7.52.1\",\n            \"Accept\": \"*/*\"\n        }\n    }\n```\n\n#### $http_json_log_req_body;\n\nLog request body.\n\nExample:\n\n```\n    \"req\": {\n        \"body\": \"foo=bar\"\n    }\n```\n\nLog request body encoded as hexdump array.\n\nExample:\n\n```\n    \"hex\": [\n        \"31 32 33 34 35 36 37 38 39  41 42 43 44 45 46 30 |123456789ABCDEF0|\",\n        \"31 32 33 34 35 36 .. .. ..  .. .. .. .. .. .. .. |123456          |\"\n    ]\n```\n\n#### $http_json_log_resp_headers;\n\nCreates a json string with all response headers.\n\nExample:\n\n```\n    resp\": {\n        \"headers\": \"HTTP/1.1 204 No Content\\r\\nServer: nginx/1.21.2\\r\\nDate: Mon, 09 Aug 2021 15:24:39 GMT\\r\\nConnection: keep-alive\\r\\nX-Foo: bar\\r\\n\\r\\n\",\n    }\n```\n\n### Logging mail proxies authentication\n\nIf nginx is used for mail proxy and **auth_http** is set, then, it's possible to log the HTTP requests for authentication service.\n\nAn example with full configuration.\n\n#### The mail proxy\n\n```\nmail {\n    server_name mail.local;\n    auth_http   localhost:9876/;\n\n    server {\n        listen    25;\n        protocol  smtp;\n        smtp_auth none;\n    }\n}\n```\n\n#### The HTTP auth service\n\n```\nhttp {\n    server {\n        listen 9876;\n\n        location / {\n            add_header Auth-Status OK;\n            add_header Auth-Server 127.0.0.1;\n            add_header Auth-Port 2525;\n\n            root   html;\n            index  index.html index.htm;\n\n            json_log_format mail_log '\n               _date                  $time_iso8601;\n               headers                $http_json_log_req_headers;\n            ';\n\n            json_log file:/tmp/mail.log mail_log;\n        }\n\n        error_page 405 =200 $uri ;\n        error_page 404 =200 /index.html ;\n    }\n}\n```\n\n#### The output log JSON line. ( pretty printed ...)\n\n```\n{\n  \"_date\": \"2017-04-12T23:58:07+00:00\",\n  \"headers\": {\n    \"Host\": \"localhost\",\n    \"Auth-Method\": \"none\",\n    \"Auth-User\": \"\",\n    \"Auth-Pass\": \"\",\n    \"Auth-Protocol\": \"smtp\",\n    \"Auth-Login-Attempt\": \"1\",\n    \"Client-IP\": \"127.0.0.1\",\n    \"Client-Host\": \"[UNAVAILABLE]\",\n    \"Auth-SMTP-Helo\": \"atacker.cloud\",\n    \"Auth-SMTP-From\": \"mail from: \u003cbob\u003e\",\n    \"Auth-SMTP-To\": \"rcpt to: \u003calice\u003e\"\n  }\n}\n```\n\n**Attention**: The Auth-Pass is not masked in any way, nor removed, so the client's value will be logged.\n\n\n### Build\n\n#### Dependencies\n\n* [libjansson](http://www.digip.org/jansson/)\n* [librdkafka](https://github.com/edenhill/librdkafka)\n\nFor Ubuntu or Debian install development packages.\n\n```bash\n$ sudo apt-get install libjansson-dev librdkafka-dev\n\n```\n\nBuild as a common nginx module.\nAfter configure we need to modify the default order of the modules.\n\n```bash\n$ ./configure --add-module=/build/ngx_json_log\n$ cat objs/ngx_modules.c | awk '{ sub(\"\\\"ngx_http_json_log_module\\\",\", \"\");  sub(\"\\\"ngx_http_header_filter_module\\\"\", \"\\\"ngx_http_json_log_module\\\", \\\"ngx_http_header_filter_module\\\"\"); print}' \u003e objs/ngx_modules.c.dat \u0026\u0026 mv objs/ngx_modules.c.dat objs/ngx_modules.c\n$ make \u0026\u0026 make install\n\n```\n\n### Tests and Fair Warning\n\n**THIS IS NOT PRODUCTION** ready.\n\nSo there's no guarantee of success. It most probably blow up when running in real life scenarios.\n\n#### Unit tests\n\nThe unit tests use https://github.com/openresty/test-nginx framework.\n\n\n```\n$ git clone https://github.com/openresty/test-nginx.git\n$ cd test-nginx/\n$ cpanm .\n$ export PATH=$PATH:/usr/local/nginx/sbin/\n```\n\nAt project root just run the prove command:\n\n```\n$ prove\n\nt/0001_simple_file_log.t .. ok\nAll tests successful.\nFiles=1, Tests=12,  0 wallclock secs ( 0.02 usr  0.01 sys +  0.15 cusr  0.00 csys =  0.18 CPU)\nResult: PASS\n\n```\n\n#### Load tests\n\nMaking 1M requests to local destination.\n\n##### Logging to file\n\n\n```\n$ time ab -n 1000000 -c 4 http://127.0.0.1/mega\nThis is ApacheBench, Version 2.3 \u003c$Revision: 1757674 $\u003e\nCopyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\nLicensed to The Apache Software Foundation, http://www.apache.org/\n\nBenchmarking 127.0.0.1 (be patient)\nCompleted 100000 requests\nCompleted 200000 requests\nCompleted 300000 requests\nCompleted 400000 requests\nCompleted 500000 requests\nCompleted 600000 requests\nCompleted 700000 requests\nCompleted 800000 requests\nCompleted 900000 requests\nCompleted 1000000 requests\nFinished 1000000 requests\n\n\nServer Software:        nginx/1.10.3\nServer Hostname:        127.0.0.1\nServer Port:            80\n\nDocument Path:          /mega\nDocument Length:        169 bytes\n\nConcurrency Level:      4\nTime taken for tests:   95.224 seconds\nComplete requests:      1000000\nFailed requests:        0\nNon-2xx responses:      1000000\nTotal transferred:      319000000 bytes\nHTML transferred:       169000000 bytes\nRequests per second:    10501.55 [#/sec] (mean)\nTime per request:       0.381 [ms] (mean)\nTime per request:       0.095 [ms] (mean, across all concurrent requests)\nTransfer rate:          3271.48 [Kbytes/sec] received\n\nConnection Times (ms)\n              min  mean[+/-sd] median   max\nConnect:        0    0   0.2      0      64\nProcessing:     0    0   0.4      0      98\nWaiting:        0    0   0.4      0      97\nTotal:          0    0   0.5      0     115\n\nPercentage of the requests served within a certain time (ms)\n  50%      0\n  66%      0\n  75%      0\n  80%      0\n  90%      1\n  95%      1\n  98%      1\n  99%      1\n 100%    115 (longest request)\n\nreal   1m36.057s\nuser   0m5.390s\nsys    1m22.040s\n\n$ wc -l /tmp/1M.log\n1000000 /tmp/1M.log\n```\n\n##### Logging to kafka topic\n\n```\n$ time ab -n 1000000 -c 4 http://127.0.0.1/mega\nThis is ApacheBench, Version 2.3 \u003c$Revision: 1757674 $\u003e\nCopyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\nLicensed to The Apache Software Foundation, http://www.apache.org/\n\nBenchmarking 127.0.0.1 (be patient)\nCompleted 100000 requests\nCompleted 200000 requests\nCompleted 300000 requests\nCompleted 400000 requests\nCompleted 500000 requests\nCompleted 600000 requests\nCompleted 700000 requests\nCompleted 800000 requests\nCompleted 900000 requests\nCompleted 1000000 requests\nFinished 1000000 requests\n\n\nServer Software:        nginx/1.10.3\nServer Hostname:        127.0.0.1\nServer Port:            80\n\nDocument Path:          /mega\nDocument Length:        169 bytes\n\nConcurrency Level:      4\nTime taken for tests:   102.439 seconds\nComplete requests:      1000000\nFailed requests:        0\nNon-2xx responses:      1000000\nTotal transferred:      319000000 bytes\nHTML transferred:       169000000 bytes\nRequests per second:    9761.95 [#/sec] (mean)\nTime per request:       0.410 [ms] (mean)\nTime per request:       0.102 [ms] (mean, across all concurrent requests)\nTransfer rate:          3041.08 [Kbytes/sec] received\n\nConnection Times (ms)\n              min  mean[+/-sd] median   max\nConnect:        0    0   0.3      0      93\nProcessing:     0    0   2.1      0    1021\nWaiting:        0    0   2.1      0    1021\nTotal:          0    0   2.1      0    1022\n\nPercentage of the requests served within a certain time (ms)\n  50%      0\n  66%      0\n  75%      0\n  80%      0\n  90%      1\n  95%      1\n  98%      1\n  99%      2\n 100%   1022 (longest request)\n\nreal   1m43.328s\nuser   0m5.770s\nsys    1m21.380s\n```\n\n#### Docker\n\nDocker images and a docker compose file is available at the ./docker directory.\n\n\n```\n$ docker-compose up --build -d\n\nCreating nginx-json-zookeeper\nCreating nginx-json-kafka\nCreating nginx-json\n\n```\n\n...\n\n\n```\n$ docker-compose ps\n        Name                      Command               State                         Ports\n------------------------------------------------------------------------------------------------------------------\nnginx-json             /bin/sh -c /usr/local/ngin ...   Up      0.0.0.0:80-\u003e80/tcp\nnginx-json-kafka       start-kafka.sh                   Up      0.0.0.0:9092-\u003e9092/tcp\nnginx-json-zookeeper   /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:2181-\u003e2181/tcp, 22/tcp, 2888/tcp, 3888/tcp\n\n```\n\nAn additional docker service for development it's available.\n\nJust uncomment the nginx-json-dev service block.\n\nAlso docker services for the ELK stack are available.\n\n\n```\n         Name                        Command               State                                   Ports\n------------------------------------------------------------------------------------------------------------------------------------------\nnginx-json                 /bin/sh -c /usr/local/ngin ...   Up      0.0.0.0:80-\u003e80/tcp\nnginx-json-dev             /bin/bash                        Up      0.0.0.0:81-\u003e81/tcp\nnginx-json-elasticsearch   /bin/bash bin/es-docker          Up      0.0.0.0:9200-\u003e9200/tcp, 0.0.0.0:9300-\u003e9300/tcp\nnginx-json-kafka           start-kafka.sh                   Up      0.0.0.0:9092-\u003e9092/tcp\nnginx-json-kibana          /bin/sh -c /usr/local/bin/ ...   Up      0.0.0.0:5601-\u003e5601/tcp\nnginx-json-logstash        /usr/local/bin/docker-entr ...   Up      0.0.0.0:5044-\u003e5044/tcp, 0.0.0.0:5050-\u003e5050/tcp, 0.0.0.0:9600-\u003e9600/tcp\nnginx-json-zookeeper       /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:2181-\u003e2181/tcp, 22/tcp, 2888/tcp, 3888/tcp\n\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffooinha%2Fnginx-json-log","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffooinha%2Fnginx-json-log","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffooinha%2Fnginx-json-log/lists"}