flowchart TD
A[get env args]
B["app new()"]
C["init_logger()"]
D(config file path env arg overwriting?)
E[replace config or default values with env arg]
F[load config]
G[validate]
H[dump config]
I(port env arg overwriting?)
J[replace config or default values with env arg]
K[start to listen]
A --> B --> C --> D
D --yes--> E --> F
D --no--> F
F --> G --> H --> I
I --yes--> J --> K
I --no--> K