@@ -54,9 +54,12 @@ defmodule Plug.RequestId do
5454
5555 plug Plug.RequestId, logger_metadata_key: :my_request_id
5656
57- * `:generate_request_id` - The function used to generate the request ID, defaults to `generate_request_id/0`.
57+ * `:generator` - The function used to generate the request ID, defaults to
58+ `Plug.RequestId.generate/0`. When setting up a custom function, it is recommended
59+ to be in the `&MyApp.custom_request_id/0` format, so it can be stored at compile-time.
60+ The generated value must also have size between 20 and 200 bytes.
5861
59- plug Plug.RequestId, generate_request_id: fn -> "myapp-" <> Plug.RequestId.generate_request_id() end
62+ plug Plug.RequestId, generator: &MyApp.custom_request_id/0
6063 """
6164
6265 alias Plug.Conn
@@ -68,30 +71,32 @@ defmodule Plug.RequestId do
6871 Keyword . get ( opts , :http_header , "x-request-id" ) ,
6972 Keyword . get ( opts , :assign_as ) ,
7073 Keyword . get ( opts , :logger_metadata_key , :request_id ) ,
71- Keyword . get ( opts , :generate_request_id , & __MODULE__ . generate_request_id / 0 )
74+ Keyword . get ( opts , :generator , & __MODULE__ . generate / 0 )
7275 }
7376 end
7477
7578 @ impl true
76- def call ( conn , { header , assign_as , logger_metadata_key , generate_request_id } ) do
77- request_id = get_request_id ( conn , header , generate_request_id )
79+ def call ( conn , { header , assign_as , logger_metadata_key , generator } ) do
80+ request_id = get_request_id ( conn , header , generator )
7881
7982 Logger . metadata ( [ { logger_metadata_key , request_id } ] )
8083 conn = if assign_as , do: Conn . assign ( conn , assign_as , request_id ) , else: conn
8184
8285 Conn . put_resp_header ( conn , header , request_id )
8386 end
8487
85- defp get_request_id ( conn , header , generate_request_id ) do
88+ defp get_request_id ( conn , header , generator ) do
8689 case Conn . get_req_header ( conn , header ) do
8790 [ val | _ ] when byte_size ( val ) in 20 .. 200 -> val
88- _ -> generate_request_id . ( )
91+ _ -> generator . ( )
8992 end
9093 end
9194
92- @ doc "Generates Base64 encoded request ID."
93- @ spec generate_request_id :: binary ( )
94- def generate_request_id do
95+ @ doc """
96+ Generates a random Base64 encoded request ID.
97+ """
98+ @ spec generate :: binary ( )
99+ def generate do
95100 binary = <<
96101 System . system_time ( :nanosecond ) :: 64 ,
97102 :erlang . phash2 ( { node ( ) , self ( ) } , 16_777_216 ) :: 24 ,
0 commit comments