[
    %% 客户端压测服配置
    {client_server, [
        {host, "${game_host}"},
        {tcp_port, ${tcp_port}},
        {server_id, ${server_id}},
        {login_server_host, "${login_host}"},
        {login_server_http_port, ${login_http_port}},
        {login_node, '${login_node}'},
        {game_tcp_port, ${game_tcp_port}},
        {test_mods, [test_item]},

        %% 日志文件配置
        {logger, [
            {handler, info, ms_logger_std, #{
                level => info,
                config => #{
                    file => "${log_dir}/info.log",
                    burst_limit_enable => true,
                    burst_limit_max_count => 500,
                    burst_limit_window_time => 1000,
                    sync_mode_qlen => 200,
                    drop_mode_qlen => 200,
                    flush_qlen => 1000,
                    max_no_bytes => 209715200,
                    max_no_files => 10
                },
                filter_default => stop,
                filters => [
                    {domain, {fun logger_filters:domain/2, {log, equal, [ms_base]}}}
                ],
                formatter => {logger_formatter, #{
                    max_size => 2000,
                    single_line => false,
                    legacy_header => false,
                    template => ["====| ", time, " | ", level, " | ", {id, [id], ["undefined"]}, " | ", mfa, ":", line, " | ", pid, " |====\n", msg, "\n"]
                }}
            }},

            {handler, error, ms_logger_std, #{
                level => error,
                config => #{
                    file => "${log_dir}/error.log",
                    burst_limit_enable => true,
                    burst_limit_max_count => 500,
                    burst_limit_window_time => 1000,
                    sync_mode_qlen => 200,
                    drop_mode_qlen => 200,
                    flush_qlen => 1000,
                    max_no_bytes => 209715200,
                    max_no_files => 10
                },
                filter_default => stop,
                filters => [
                    {domain, {fun logger_filters:domain/2, {log, equal, [ms_base]}}}
                ],
                formatter => {logger_formatter, #{
                    max_size => 10000,
                    single_line => false,
                    legacy_header => false,
                    template => ["====| ", time, " | ", level, " | ", {id, [id], ["undefined"]}, " | ", mfa, ":", line, " | ", pid, " |====\n", msg, "\n"]
                }}
            }}
        ]}
    ]},

    %% kernel 配置
    {kernel, [
        {inet_dist_listen_min, 16000},
        {inet_dist_listen_max, 17000},
        {logger_level, ${logger_level}},
        {logger, [
            {filters, stop, [
                {domain, {fun logger_filters:domain/2, {log, equal, [ms_base]}}}
            ]},
            {handler, default, logger_std_h, #{
                level => ${logger_level},
                filter_default => stop,
                filters => [{need_level, {fun logger_filters:level/2, {log, gteq, info}}}],
                formatter => {logger_formatter, #{
                    max_size => 10000,
                    single_line => false,
                    legacy_header => false,
                    template => ["====| ", time, " | ", level, " | ", {id, [id], ["undefined"]}, " | ", mfa, ":", line, " | ", pid, " |====\n", msg, "\n"]
                }}
            }}
        ]}
    ]},

    %% sasl 配置
    {sasl, [
        {sasl_error_logger, false}
    ]}
].
