mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-04 19:35:26 +00:00
Merge "PJPROJECT logging: Fix detection of max supported log level."
This commit is contained in:
@@ -143,6 +143,33 @@ enum ast_option_flags {
|
|||||||
*/
|
*/
|
||||||
#define DEFAULT_PJ_LOG_MAX_LEVEL 2
|
#define DEFAULT_PJ_LOG_MAX_LEVEL 2
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Get maximum log level pjproject was compiled with.
|
||||||
|
*
|
||||||
|
* \details
|
||||||
|
* Determine the maximum log level the pjproject we are running
|
||||||
|
* with supports.
|
||||||
|
*
|
||||||
|
* When pjproject is initially loaded the default log level in
|
||||||
|
* effect is the maximum log level the library was compiled to
|
||||||
|
* generate. We must save this value off somewhere before we
|
||||||
|
* change it to what we want to use as the default level.
|
||||||
|
*
|
||||||
|
* \note This must be done before calling pj_init() so the level
|
||||||
|
* we want to use as the default level is in effect while the
|
||||||
|
* library initializes.
|
||||||
|
*/
|
||||||
|
#define AST_PJPROJECT_INIT_LOG_LEVEL() \
|
||||||
|
do { \
|
||||||
|
if (ast_pjproject_max_log_level < 0) { \
|
||||||
|
ast_pjproject_max_log_level = pj_log_get_level(); \
|
||||||
|
} \
|
||||||
|
pj_log_set_level(ast_option_pjproject_log_level); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/*! Current linked pjproject maximum logging level */
|
||||||
|
extern int ast_pjproject_max_log_level;
|
||||||
|
|
||||||
/*! Current pjproject logging level */
|
/*! Current pjproject logging level */
|
||||||
extern int ast_option_pjproject_log_level;
|
extern int ast_option_pjproject_log_level;
|
||||||
|
|
||||||
|
|||||||
@@ -330,6 +330,7 @@ int ast_verb_sys_level;
|
|||||||
|
|
||||||
int option_verbose; /*!< Verbosity level */
|
int option_verbose; /*!< Verbosity level */
|
||||||
int option_debug; /*!< Debug level */
|
int option_debug; /*!< Debug level */
|
||||||
|
int ast_pjproject_max_log_level = -1;/* Default to -1 to know if we have read the level from pjproject yet. */
|
||||||
int ast_option_pjproject_log_level;
|
int ast_option_pjproject_log_level;
|
||||||
double ast_option_maxload; /*!< Max load avg on system */
|
double ast_option_maxload; /*!< Max load avg on system */
|
||||||
int ast_option_maxcalls; /*!< Max number of active calls */
|
int ast_option_maxcalls; /*!< Max number of active calls */
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
int ast_pj_init(void)
|
int ast_pj_init(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_PJPROJECT_BUNDLED
|
#ifdef HAVE_PJPROJECT_BUNDLED
|
||||||
pj_log_set_level(ast_option_pjproject_log_level);
|
AST_PJPROJECT_INIT_LOG_LEVEL();
|
||||||
pj_init();
|
pj_init();
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -410,18 +410,22 @@ static char *handle_pjproject_set_log_level(struct ast_cli_entry *e, int cmd, st
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Update pjproject logging level */
|
/* Update pjproject logging level */
|
||||||
|
if (ast_pjproject_max_log_level < level_new) {
|
||||||
|
level_new = ast_pjproject_max_log_level;
|
||||||
|
ast_cli(a->fd,
|
||||||
|
"Asterisk built or linked with pjproject PJ_LOG_MAX_LEVEL=%d.\n"
|
||||||
|
"Lowering request to the max supported level.\n",
|
||||||
|
ast_pjproject_max_log_level);
|
||||||
|
}
|
||||||
level_old = ast_option_pjproject_log_level;
|
level_old = ast_option_pjproject_log_level;
|
||||||
if (level_old == level_new) {
|
if (level_old == level_new) {
|
||||||
ast_cli(a->fd, "pjproject log level is still %d.\n", level_old);
|
ast_cli(a->fd, "pjproject log level is still %d.\n", level_old);
|
||||||
} else {
|
} else {
|
||||||
ast_cli(a->fd, "pjproject log level was %d and is now %d.\n",
|
ast_cli(a->fd, "pjproject log level was %d and is now %d.\n",
|
||||||
level_old, level_new);
|
level_old, level_new);
|
||||||
|
ast_option_pjproject_log_level = level_new;
|
||||||
pj_log_set_level(level_new);
|
pj_log_set_level(level_new);
|
||||||
}
|
}
|
||||||
ast_option_pjproject_log_level = pj_log_get_level();
|
|
||||||
if (ast_option_pjproject_log_level != level_new) {
|
|
||||||
ast_log(LOG_WARNING, "Asterisk built with pjproject PJ_LOG_MAX_LEVEL set too low.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return CLI_SUCCESS;
|
return CLI_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -495,7 +499,7 @@ static int load_module(void)
|
|||||||
|
|
||||||
ast_sorcery_load(pjproject_sorcery);
|
ast_sorcery_load(pjproject_sorcery);
|
||||||
|
|
||||||
pj_log_set_level(ast_option_pjproject_log_level);
|
AST_PJPROJECT_INIT_LOG_LEVEL();
|
||||||
pj_init();
|
pj_init();
|
||||||
|
|
||||||
decor_orig = pj_log_get_decor();
|
decor_orig = pj_log_get_decor();
|
||||||
@@ -512,12 +516,19 @@ static int load_module(void)
|
|||||||
pj_log_set_decor(0);
|
pj_log_set_decor(0);
|
||||||
pj_log_set_level(MAX_PJ_LOG_MAX_LEVEL);/* Set level to guarantee the dump output. */
|
pj_log_set_level(MAX_PJ_LOG_MAX_LEVEL);/* Set level to guarantee the dump output. */
|
||||||
pj_dump_config();
|
pj_dump_config();
|
||||||
pj_log_set_level(ast_option_pjproject_log_level);
|
|
||||||
pj_log_set_decor(PJ_LOG_HAS_SENDER | PJ_LOG_HAS_INDENT);
|
pj_log_set_decor(PJ_LOG_HAS_SENDER | PJ_LOG_HAS_INDENT);
|
||||||
pj_log_set_log_func(log_forwarder);
|
pj_log_set_log_func(log_forwarder);
|
||||||
if (!AST_VECTOR_SIZE(&buildopts)
|
if (ast_pjproject_max_log_level < ast_option_pjproject_log_level) {
|
||||||
|| ast_option_pjproject_log_level != pj_log_get_level()) {
|
ast_log(LOG_WARNING,
|
||||||
ast_log(LOG_WARNING, "Asterisk built or linked with pjproject PJ_LOG_MAX_LEVEL set too low.\n");
|
"Asterisk built or linked with pjproject PJ_LOG_MAX_LEVEL=%d which is too low for startup level: %d.\n",
|
||||||
|
ast_pjproject_max_log_level, ast_option_pjproject_log_level);
|
||||||
|
ast_option_pjproject_log_level = ast_pjproject_max_log_level;
|
||||||
|
}
|
||||||
|
pj_log_set_level(ast_option_pjproject_log_level);
|
||||||
|
if (!AST_VECTOR_SIZE(&buildopts)) {
|
||||||
|
ast_log(LOG_NOTICE,
|
||||||
|
"Asterisk built or linked with pjproject PJ_LOG_MAX_LEVEL=%d which is too low to get buildopts.\n",
|
||||||
|
ast_pjproject_max_log_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_cli_register_multiple(pjproject_cli, ARRAY_LEN(pjproject_cli));
|
ast_cli_register_multiple(pjproject_cli, ARRAY_LEN(pjproject_cli));
|
||||||
|
|||||||
@@ -5666,7 +5666,7 @@ static int load_module(void)
|
|||||||
#ifdef HAVE_PJPROJECT
|
#ifdef HAVE_PJPROJECT
|
||||||
pj_lock_t *lock;
|
pj_lock_t *lock;
|
||||||
|
|
||||||
pj_log_set_level(ast_option_pjproject_log_level);
|
AST_PJPROJECT_INIT_LOG_LEVEL();
|
||||||
if (pj_init() != PJ_SUCCESS) {
|
if (pj_init() != PJ_SUCCESS) {
|
||||||
return AST_MODULE_LOAD_DECLINE;
|
return AST_MODULE_LOAD_DECLINE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user