#include "asterisk.h"
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/stat.h>
#include <syslog.h>
#include "asterisk/logger.h"
#include "asterisk/lock.h"
#include "asterisk/options.h"
#include "asterisk/channel.h"
#include "asterisk/config.h"
#include "asterisk/term.h"
#include "asterisk/cli.h"
#include "asterisk/utils.h"
#include "asterisk/manager.h"
#include "asterisk/threadstorage.h"
Go to the source code of this file.
Data Structures | |
struct | logchannel |
struct | logchannels |
struct | verb |
struct | verbosers |
Defines | |
#define | FORMATL "%-35.35s %-8.8s %-9.9s " |
#define | GETTID() getpid() |
#define | LOG_BUF_INIT_SIZE 128 |
#define | SYSLOG_NAMES |
#define | SYSLOG_NLEVELS sizeof(syslog_level_map) / sizeof(int) |
#define | VERBOSE_BUF_INIT_SIZE 128 |
Enumerations | |
enum | logtypes { LOGTYPE_SYSLOG, LOGTYPE_FILE, LOGTYPE_CONSOLE } |
Functions | |
void | ast_backtrace (void) |
void | ast_log (int level, const char *file, int line, const char *function, const char *fmt,...) |
This is the standard logger function. Probably the only way you will invoke it would be something like this: ast_log(LOG_WHATEVER, "Problem with the %s Captain. We should get some more. Will %d be enough?\n", "flux capacitor", 10); where WHATEVER is one of ERROR, DEBUG, EVENT, NOTICE, or WARNING depending on which log you wish to output to. These are implemented as macros, that will provide the function with the needed arguments. | |
static void | ast_log_vsyslog (int level, const char *file, int line, const char *function, const char *fmt, va_list args) |
void | ast_queue_log (const char *queuename, const char *callid, const char *agent, const char *event, const char *fmt,...) |
int | ast_register_verbose (void(*v)(const char *string)) |
int | ast_unregister_verbose (void(*v)(const char *string)) |
void | ast_verbose (const char *fmt,...) |
This works like ast_log, but prints verbose messages to the console depending on verbosity level set. ast_verbose(VERBOSE_PREFIX_3 "Whatever %s is happening\n", "nothing"); This will print the message to the console if the verbose level is set to a level >= 3 Note the abscence of a comma after the VERBOSE_PREFIX_3. This is important. VERBOSE_PREFIX_1 through VERBOSE_PREFIX_3 are defined. | |
void | close_logger (void) |
static int | handle_logger_reload (int fd, int argc, char *argv[]) |
static int | handle_logger_rotate (int fd, int argc, char *argv[]) |
static int | handle_logger_show_channels (int fd, int argc, char *argv[]) |
CLI command to show logging system configuration. | |
static int | handle_SIGXFSZ (int sig) |
int | init_logger (void) |
static void | init_logger_chain (void) |
static void | log_buf_init (void) |
int | logger_reload (void) |
Reload logger without rotating log files. | |
static int | make_components (char *s, int lineno) |
static struct logchannel * | make_logchannel (char *channel, char *components, int lineno) |
int | reload_logger (int rotate) |
static void | verbose_buf_init (void) |
Variables | |
static struct ast_cli_entry | cli_logger [] |
static int | colors [] |
static char | dateformat [256] = "%b %e %T" |
static FILE * | eventlog |
static int | filesize_reload_needed |
static int | global_logmask = -1 |
static char | hostname [MAXHOSTNAMELEN] |
static char * | levels [] |
static struct ast_threadstorage | log_buf = { .once = { PTHREAD_ONCE_INIT } , .key_init = log_buf_init , } |
struct { | |
unsigned int event_log:1 | |
unsigned int queue_log:1 | |
} | logfiles |
static char | logger_reload_help [] |
static char | logger_rotate_help [] |
static char | logger_show_channels_help [] |
static FILE * | qlog |
static int | syslog_level_map [] |
static struct ast_threadstorage | verbose_buf = { .once = { PTHREAD_ONCE_INIT } , .key_init = verbose_buf_init , } |
Logging routines
Definition in file logger.c.
#define FORMATL "%-35.35s %-8.8s %-9.9s " |
Referenced by handle_logger_show_channels().
#define GETTID | ( | ) | getpid() |
#define SYSLOG_NLEVELS sizeof(syslog_level_map) / sizeof(int) |
#define VERBOSE_BUF_INIT_SIZE 128 |
enum logtypes |
Definition at line 95 of file logger.c.
00096 { 00097 LOGTYPE_SYSLOG, 00098 LOGTYPE_FILE, 00099 LOGTYPE_CONSOLE,
void ast_backtrace | ( | void | ) |
Definition at line 821 of file logger.c.
References ast_calloc, ast_log(), free, and LOG_WARNING.
00823 { 00824 #ifdef linux 00825 #ifdef AST_DEVMODE 00826 int count=0, i=0; 00827 void **addresses; 00828 char **strings; 00829 00830 if ((addresses = ast_calloc(MAX_BACKTRACE_FRAMES, sizeof(*addresses)))) { 00831 count = backtrace(addresses, MAX_BACKTRACE_FRAMES); 00832 if ((strings = backtrace_symbols(addresses, count))) { 00833 ast_log(LOG_DEBUG, "Got %d backtrace record%c\n", count, count != 1 ? 's' : ' '); 00834 for (i=0; i < count ; i++) { 00835 #if __WORDSIZE == 32 00836 ast_log(LOG_DEBUG, "#%d: [%08X] %s\n", i, (unsigned int)addresses[i], strings[i]); 00837 #elif __WORDSIZE == 64 00838 ast_log(LOG_DEBUG, "#%d: [%016lX] %s\n", i, (unsigned long)addresses[i], strings[i]); 00839 #endif 00840 } 00841 free(strings); 00842 } else { 00843 ast_log(LOG_DEBUG, "Could not allocate memory for backtrace\n"); 00844 } 00845 free(addresses); 00846 } 00847 #else 00848 ast_log(LOG_WARNING, "Must run configure with '--enable-dev-mode' for stack backtraces.\n"); 00849 #endif 00850 #else /* ndef linux */ 00851 ast_log(LOG_WARNING, "Inline stack backtraces are only available on the Linux platform.\n"); 00852 #endif
void ast_log | ( | int | level, | |
const char * | file, | |||
int | line, | |||
const char * | function, | |||
const char * | fmt, | |||
... | ||||
) |
This is the standard logger function. Probably the only way you will invoke it would be something like this: ast_log(LOG_WHATEVER, "Problem with the %s Captain. We should get some more. Will %d be enough?\n", "flux capacitor", 10); where WHATEVER is one of ERROR, DEBUG, EVENT, NOTICE, or WARNING depending on which log you wish to output to. These are implemented as macros, that will provide the function with the needed arguments.
level | Type of log event | |
file | Will be provided by the LOG_* macro | |
line | Will be provided by the LOG_* macro | |
function | Will be provided by the LOG_* macro | |
fmt | This is what is important. The format is the same as your favorite breed of printf. You know how that works, right? :-) |
Definition at line 680 of file logger.c.
References __LOG_DEBUG, __LOG_EVENT, __LOG_VERBOSE, ast_console_puts_mutable(), ast_dynamic_str_thread_get(), ast_dynamic_str_thread_set(), ast_dynamic_str_thread_set_va, AST_DYNSTR_BUILD_FAILED, AST_LIST_EMPTY, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_localtime(), ast_log(), ast_log_vsyslog(), ast_strlen_zero(), ast_verbose(), COLOR_BRWHITE, colors, debug_filename, logchannel::disabled, errno, EVENT_FLAG_SYSTEM, eventlog, logchannel::filename, logchannel::fileptr, GETTID, ast_dynamic_str::len, levels, logchannel::list, log_buf, LOG_BUF_INIT_SIZE, LOG_EVENT, logfiles, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_SYSLOG, manager_event(), option_debug, option_verbose, reload_logger(), ast_dynamic_str::str, t, term_color(), term_filter_escapes(), term_strip(), and logchannel::type.
Referenced by __adsi_transmit_messages(), __agent_start_monitoring(), __ast_check_signature(), __ast_check_signature_bin(), __ast_cli_register(), __ast_cli_unregister(), __ast_context_create(), __ast_context_destroy(), __ast_decrypt_bin(), __ast_dsp_call_progress(), __ast_encrypt_bin(), __ast_format_register(), __ast_http_load(), __ast_pbx_run(), __ast_play_and_record(), __ast_queue_frame(), __ast_read(), __ast_register_translator(), __ast_request_and_dial(), __ast_sign_bin(), __ast_smoother_feed(), __attempt_transmit(), __auto_congest(), __dahdi_exception(), __expire_registry(), __find_callno(), __iax2_poke_noanswer(), __login_exec(), __mgcp_xmit(), __oh323_destroy(), __oh323_new(), __oh323_rtp_create(), __oh323_update_info(), __say_init(), __schedule_action(), __send_lagrq(), __send_ping(), __set_address_from_contact(), __sip_ack(), __sip_autodestruct(), __sip_destroy(), __sip_pretend_ack(), __sip_reliable_xmit(), __sip_semi_ack(), __sip_xmit(), __transmit_response(), __unload_module(), _enum_array_map(), _extension_match_core(), _macro_exec(), _while_exec(), accept_thread(), acf_channel_read(), acf_curl_exec(), acf_cut_exec(), acf_if(), acf_odbc_read(), acf_odbc_write(), acf_rand_exec(), acf_sort_exec(), acf_strftime(), acf_strptime(), ack_trans(), action_command(), action_getvar(), action_userevent(), action_waitevent(), add_agent(), add_calltoken_ignore(), add_codec_to_answer(), add_extensions(), add_features_datastores(), add_header(), add_in_calls(), add_line(), add_out_calls(), add_pri(), add_realm_authentication(), add_sdp(), add_sip_domain(), add_to_interfaces(), admin_exec(), adsi_begin(), adsi_careful_send(), adsi_load_vmail(), adsi_process(), adsi_prog(), advanced_options(), ael2_semantic_check(), agent_answer(), agent_bridgedchannel(), agent_call(), agent_cont_sleep(), agent_fixup(), agent_get_base_channel(), agent_hangup(), agent_new(), agent_read(), agent_request(), agent_set_base_channel(), agent_write(), agentmonitoroutgoing_exec(), agi_debug_cli(), agi_exec(), agi_exec_full(), aji_act_hook(), aji_client_connect(), aji_client_info_handler(), aji_client_initialize(), aji_component_initialize(), aji_create_buddy(), aji_create_client(), aji_dinfo_handler(), aji_ditems_handler(), aji_find_version(), aji_handle_presence(), aji_handle_subscribe(), aji_load_config(), aji_recv_loop(), aji_register_approve_handler(), aji_register_query_handler(), aji_reload(), aji_send_exec(), aji_set_presence(), aji_status_exec(), alarmreceiver_exec(), alloc_sub(), alsa_call(), alsa_card_init(), alsa_hangup(), alsa_indicate(), alsa_new(), alsa_read(), alsa_request(), alsa_write(), announce_thread(), answer_call(), answer_sound(), anti_injection(), ao2_callback(), ao2_ref(), app_exec(), append_transaction(), appendcdruserfield_exec(), apply_option(), apply_outgoing(), aqm_exec(), array(), ast_add_extension2(), ast_add_hint(), ast_adsi_begin_download(), ast_adsi_get_cpeid(), ast_adsi_get_cpeinfo(), ast_adsi_load_session(), ast_adsi_transmit_message_full(), ast_agi_register(), ast_aji_create_chat(), ast_aji_invite_chat(), ast_aji_join_chat(), ast_aji_send(), ast_app_dtget(), ast_app_parse_options(), ast_append_ha(), ast_apply_ha(), ast_async_goto(), ast_audiohook_write_frame(), ast_autoservice_start(), ast_backtrace(), ast_best_codec(), ast_bridge_call(), ast_builtins_init(), ast_call_forward(), ast_carefulwrite(), ast_cdr_alloc(), ast_cdr_detach(), ast_cdr_end(), ast_cdr_engine_init(), ast_cdr_merge(), ast_cdr_noanswer(), ast_cdr_register(), ast_cdr_serialize_variables(), ast_cdr_setvar(), ast_cdr_submit_batch(), ast_channel_alloc(), ast_channel_bridge(), ast_channel_free(), ast_channel_inherit_variables(), ast_channel_make_compatible(), ast_channel_masquerade(), ast_channel_register(), ast_channel_setoption(), ast_channel_start_silence_generator(), ast_channel_stop_silence_generator(), ast_channel_unregister(), ast_check_timing(), ast_codec_choose(), ast_codec_get_len(), ast_codec_get_samples(), ast_config_engine_register(), ast_config_internal_load(), ast_context_verify_includes(), ast_control_streamfile(), ast_custom_function_register(), ast_db_del(), ast_db_get(), ast_db_gettree(), ast_db_put(), ast_device_state(), ast_device_state_changed_literal(), ast_device_state_engine_init(), ast_dial_run(), ast_do_masquerade(), ast_dsp_busydetect(), ast_dsp_call_progress(), ast_dsp_digitdetect(), ast_dsp_process(), ast_dsp_set_busy_pattern(), ast_dsp_silence(), ast_dtmf_stream(), ast_el_read_char(), ast_enable_packet_fragmentation(), ast_extension_close(), ast_feature_request_and_dial(), ast_filehelper(), ast_find_ourip(), ast_format_str_reduce(), ast_format_unregister(), ast_func_read(), ast_func_write(), ast_get_channel_tech(), ast_get_enum(), ast_get_group(), ast_get_ip_or_srv(), ast_get_txt(), ast_hangup(), ast_http_error(), ast_httpd_helper_thread(), ast_iax2_new(), ast_indicate_data(), ast_internal_timing_enabled(), ast_io_add(), ast_io_dump(), ast_io_remove(), ast_io_wait(), ast_ivr_menu_run_internal(), ast_jb_put(), ast_linear_stream(), ast_lock_path(), ast_log(), ast_lookup_iface(), ast_makesocket(), ast_manager_register_struct(), ast_manager_unregister(), ast_merge_contexts_and_delete(), ast_module_reload(), ast_moh_files_next(), ast_monitor_change_fname(), ast_monitor_start(), ast_monitor_stop(), ast_netsock_bindaddr(), ast_odbc_prepare_and_execute(), ast_odbc_request_obj(), ast_odbc_sanity_check(), ast_odbc_smart_execute(), ast_openstream_full(), ast_openvstream(), ast_ouraddrfor(), ast_parse_allow_disallow(), ast_parseable_goto(), ast_pbx_outgoing_app(), ast_pbx_outgoing_exten(), ast_pbx_run_app(), ast_pbx_start(), ast_pickup_call(), ast_playtones_start(), ast_process_pending_reloads(), ast_prod(), ast_pthread_create_stack(), ast_read_generator_actions(), ast_read_image(), ast_read_textfile(), ast_readaudio_callback(), ast_readconfig(), ast_readfile(), ast_readvideo_callback(), ast_record_review(), ast_register_application(), ast_register_feature(), ast_register_switch(), ast_remotecontrol(), ast_request(), ast_rtcp_new(), ast_rtcp_read(), ast_rtcp_write_rr(), ast_rtcp_write_sr(), ast_rtp_bridge(), ast_rtp_codec_setpref(), ast_rtp_early_bridge(), ast_rtp_make_compatible(), ast_rtp_new_with_bindaddr(), ast_rtp_proto_register(), ast_rtp_raw_write(), ast_rtp_read(), ast_rtp_reload(), ast_rtp_sendcng(), ast_rtp_senddigit_begin(), ast_rtp_senddigit_continuation(), ast_rtp_senddigit_end(), ast_rtp_settos(), ast_rtp_write(), ast_safe_system(), ast_say_date_with_format_da(), ast_say_date_with_format_de(), ast_say_date_with_format_en(), ast_say_date_with_format_es(), ast_say_date_with_format_fr(), ast_say_date_with_format_gr(), ast_say_date_with_format_he(), ast_say_date_with_format_it(), ast_say_date_with_format_nl(), ast_say_date_with_format_pl(), ast_say_date_with_format_pt(), ast_say_date_with_format_zh(), ast_say_enumeration_full_da(), ast_say_enumeration_full_de(), ast_say_enumeration_full_en(), ast_say_enumeration_full_he(), ast_say_number_full_da(), ast_say_number_full_de(), ast_say_number_full_en(), ast_say_number_full_en_GB(), ast_say_number_full_es(), ast_say_number_full_fr(), ast_say_number_full_gr(), ast_say_number_full_he(), ast_say_number_full_it(), ast_say_number_full_nl(), ast_say_number_full_no(), ast_say_number_full_pt(), ast_say_number_full_ru(), ast_say_number_full_se(), ast_say_number_full_zh(), ast_sched_add_variable(), ast_sched_del(), ast_sched_dump(), ast_sched_runq(), ast_sched_wait(), ast_sched_when(), ast_search_dns(), ast_senddigit_begin(), ast_set_priority(), ast_settimeout(), ast_sip_ouraddrfor(), ast_slinfactory_feed(), ast_smoother_read(), ast_softhangup_nolock(), ast_stopstream(), ast_str2tos(), ast_streamfile(), ast_translate_path_steps(), ast_translator_build_path(), ast_tryconnect(), ast_udptl_bridge(), ast_udptl_get_error_correction_scheme(), ast_udptl_get_far_max_datagram(), ast_udptl_get_local_max_datagram(), ast_udptl_new_with_bindaddr(), ast_udptl_offered_from_local(), ast_udptl_proto_register(), ast_udptl_read(), ast_udptl_reload(), ast_udptl_set_error_correction_scheme(), ast_udptl_set_far_max_datagram(), ast_udptl_set_local_max_datagram(), ast_udptl_settos(), ast_udptl_write(), ast_unload_resource(), ast_unlock_path(), ast_unregister_indication_country(), ast_verbose(), ast_waitfor_nandfds(), ast_waitfordigit_full(), ast_write(), ast_writefile(), ast_writestream(), ast_yyerror(), async_wait(), asyncgoto_exec(), attempt_reconnect(), attempt_thread(), attempt_transfer(), audiohook_inheritance_fixup(), audiohook_read_frame_both(), auth_exec(), authenticate(), authenticate_verify(), auto_congest(), autoservice_run(), available(), background_detect_exec(), base64_decode(), base64_encode(), base_encode(), bridge_native_loop(), bridge_p2p_loop(), bridge_p2p_rtp_write(), build_alias(), build_callno_limits(), build_channels(), build_conf(), build_device(), build_filename(), build_gateway(), build_mapping(), build_peer(), build_reply_digest(), build_route(), build_rpid(), build_transactions(), build_user(), builtin_automonitor(), builtin_blindtransfer(), bump_gains(), cache_get_callno_locked(), cache_lookup_internal(), cache_save_hint(), calc_cost(), calc_energy(), calc_metric(), calc_rxstamp(), calc_timestamp(), callback_deprecated(), callerid_feed(), callerid_feed_jp(), callerid_get_dtmf(), callerid_read(), callerid_write(), calltoken_required(), careful_write(), cb_events(), cb_extensionstate(), cdr_merge_vars(), chan_misdn_log(), chan_ringing(), chanavail_exec(), chandup(), channel_find_locked(), chanspy_exec(), check_access(), check_app_args(), check_auth(), check_availability(), check_beep(), check_break(), check_compat(), check_context_names(), check_continue(), check_day(), check_dow(), check_expr2_input(), check_for_conference(), check_goto(), check_header(), check_includes(), check_key(), check_label(), check_month(), check_pendings(), check_post(), check_provisioning(), check_pval_item(), check_srcaddr(), check_timerange(), check_tx_freq(), check_user_full(), check_via(), checkmd5(), cleanup_connection(), clear_caller(), clearcbone(), cleardisplay(), clearflag(), cleartimer(), cli_prompt(), compare_weight(), compile_script(), complete_context_add_extension(), complete_context_add_extension_deprecated(), complete_context_add_ignorepat(), complete_context_add_ignorepat_deprecated(), complete_context_add_include(), complete_context_add_include_deprecated(), complete_context_dont_include_deprecated(), complete_context_remove_extension(), complete_context_remove_extension_deprecated(), complete_context_remove_ignorepat(), complete_context_remove_ignorepat_deprecated(), complete_context_remove_include(), complete_dpreply(), complete_span_helper(), complete_transfer(), compress_subclass(), conf_add(), conf_del(), conf_exec(), conf_exec_warn(), conf_flush(), conf_queue_dtmf(), conf_run(), config_odbc(), config_pgsql(), config_text_file_load(), config_text_file_save(), connect_link(), connection_made(), console_autoanswer(), console_autoanswer_deprecated(), controlplayback_exec(), convertcap(), copy(), copy_header(), copy_message(), copy_via_headers(), count_exec(), create_addr(), create_addr_from_peer(), create_dirpath(), create_followme_number(), create_jb(), create_queue_member(), crypto_load(), csv_log(), csv_quote(), custom_log(), custom_prepare(), cut_internal(), dahdi_accept_r2_call_exec(), dahdi_answer(), dahdi_ast_cause_to_r2_cause(), dahdi_bridge(), dahdi_call(), dahdi_callwait(), dahdi_confmute(), dahdi_decoder_framein(), dahdi_decoder_frameout(), dahdi_digit_begin(), dahdi_digit_end(), dahdi_disable_ec(), dahdi_enable_ec(), dahdi_encoder_framein(), dahdi_encoder_frameout(), dahdi_fake_event(), dahdi_fixup(), dahdi_get_index(), dahdi_handle_dtmfup(), dahdi_handle_event(), dahdi_hangup(), dahdi_indicate(), dahdi_link(), dahdi_new(), dahdi_open(), dahdi_pri_error(), dahdi_pri_message(), dahdi_r2_disconnect_call(), dahdi_r2_get_channel_category(), dahdi_r2_on_billing_pulse_received(), dahdi_r2_on_call_accepted(), dahdi_r2_on_call_disconnect(), dahdi_r2_on_call_init(), dahdi_r2_on_call_offered(), dahdi_r2_on_hardware_alarm(), dahdi_r2_on_line_blocked(), dahdi_r2_on_line_idle(), dahdi_r2_on_os_error(), dahdi_r2_on_protocol_error(), dahdi_r2_write_log(), dahdi_read(), dahdi_request(), dahdi_restart(), dahdi_ring_phone(), dahdi_sendtext(), dahdi_set_hook(), dahdi_setoption(), dahdi_show_channel(), dahdi_show_status(), dahdi_train_ec(), dahdi_translate(), dahdi_unlink(), dahdi_write(), dahdi_write_frame(), dbinit(), deadagi_exec(), decode_frame(), del_exec(), deltree_exec(), destroy_pval_item(), destroy_session(), destroy_trans(), determine_firstline_parts(), dictate_exec(), digitcollect(), digitdirect(), directory_exec(), disa_exec(), diskavail(), dns_parse_answer(), dnsmgr_init(), dnsmgr_refresh(), do_atxfer(), do_autokill(), do_cdr(), do_directory(), do_dtmf_local(), do_idle_thread(), do_monitor(), do_parking_thread(), do_proxy_auth(), do_register(), do_register_expire(), do_reload(), do_say(), do_scheduler(), do_setnat(), do_state_change(), do_waiting(), donodelog(), dump_agents(), dump_queue(), dump_queue_members(), dundi_answer_entity(), dundi_answer_query(), dundi_decrypt(), dundi_discover(), dundi_encrypt(), dundi_error_output(), dundi_exec(), dundi_helper(), dundi_lookup_internal(), dundi_lookup_thread(), dundi_precache_full(), dundi_precache_internal(), dundi_precache_thread(), dundi_query(), dundi_query_thread(), dundi_rexmit(), dundi_send(), dundi_xmit(), dundifunc_read(), eagi_exec(), encode_open_type(), encrypt_frame(), enum_callback(), exec(), exec_exec(), exec_warn(), exec_zap(), execif_exec(), ext_cmp1(), extension_matches(), extenspy_exec(), external_rtp_create(), feature_exec_app(), feature_interpret(), feature_interpret_helper(), features_alloc(), features_call(), features_new(), festival_exec(), filter(), find_cache(), find_call(), find_call_locked(), find_conf(), find_conf_realtime(), find_desc(), find_line_by_instance(), find_line_by_name(), find_matching_endwhile(), find_or_create(), find_peer(), find_pval_goto_item(), find_queue_by_name_rt(), find_sdp(), find_speeddial_by_instance(), find_subchannel_and_lock(), find_subchannel_by_instance_reference(), find_subchannel_by_reference(), find_transaction(), find_transcoders(), find_user(), findmeexec(), flash_exec(), fn_wrapper(), forkcdr_exec(), forward_message(), framein(), func_args(), func_channel_read(), func_channel_write(), func_check_sipdomain(), func_header_read(), func_inheritance_write(), function_agent(), function_autopatchup(), function_db_delete(), function_db_exists(), function_db_read(), function_db_write(), function_enum(), function_eval(), function_ilink(), function_realtime_read(), function_realtime_write(), function_sipchaninfo_read(), function_txtcidname(), g723_len(), g723_read(), g723_write(), g726_open(), g726_read(), g726_write(), g729_read(), g729_write(), generator_force(), generic_prepare(), get_alarms(), get_also_info(), get_button_template(), get_destination(), get_in_brackets(), get_input(), get_ip_and_port_from_sdp(), get_mohbyname(), get_range(), get_rdnis(), get_refer_info(), get_sip_pvt_byid_locked(), get_timerange(), get_token(), get_unused_callno(), get_wait_interval(), getdisplaybyname(), getflagbyname(), getkeybyname(), getproviderstate(), getstatebyname(), getsubbyname(), gosub_exec(), gosubif_exec(), goto_line(), goto_line_rel(), group_count_function_read(), group_function_write(), gsm_read(), gsm_seek(), gsm_write(), gsmtolin_framein(), gtalk_alloc(), gtalk_answer(), gtalk_call(), gtalk_create_candidates(), gtalk_create_member(), gtalk_digit(), gtalk_free_pvt(), gtalk_handle_dtmf(), gtalk_hangup_farend(), gtalk_indicate(), gtalk_invite(), gtalk_invite_response(), gtalk_is_accepted(), gtalk_is_answered(), gtalk_load_config(), gtalk_new(), gtalk_newcall(), gtalk_parser(), gtalk_request(), gtalk_rtp_read(), gtalk_sendhtml(), gtalk_show_channels(), gtalk_update_stun(), gtalk_write(), h263_open(), h263_read(), h263_write(), h264_open(), h264_read(), h264_write(), h323_gk_cycle(), handle_add_indication(), handle_alarms(), handle_call_token(), handle_capabilities_res_message(), handle_command_response(), handle_common_options(), handle_enbloc_call_message(), handle_error(), handle_exec(), handle_frame(), handle_getoption(), handle_hd_hf(), handle_init_event(), handle_invite_replaces(), handle_keypad_button_message(), handle_link_data(), handle_message(), handle_offhook_message(), handle_onhook_message(), handle_open_receive_channel_ack_message(), handle_playtones(), handle_recordfile(), handle_register_message(), handle_remote_data(), handle_remove_indication(), handle_request(), handle_request_bye(), handle_request_cancel(), handle_request_info(), handle_request_invite(), handle_request_notify(), handle_request_refer(), handle_request_register(), handle_request_subscribe(), handle_response(), handle_response_invite(), handle_response_peerpoke(), handle_response_refer(), handle_response_register(), handle_soft_key_event_message(), handle_statechange(), handle_stimulus_message(), handle_streamfile(), hangup_cause2sip(), hangup_connection(), hasvoicemail_exec(), http_root(), http_server_start(), iax2_ack_registry(), iax2_answer(), iax2_call(), iax2_canmatch(), iax2_destroy(), iax2_devicestate(), iax2_do_register(), iax2_exec(), iax2_exists(), iax2_fixup(), iax2_hangup(), iax2_indicate(), iax2_matchmore(), iax2_poke_peer(), iax2_prov_app(), iax2_provision(), iax2_read(), iax2_register(), iax2_request(), iax2_send(), iax2_transfer(), iax2_trunk_queue(), iax2_write(), iax_error_output(), iax_frame_wrap(), iax_park(), iax_park_thread(), iax_process_template(), iax_provision_reload(), iax_provision_version(), iax_template_parse(), ices_exec(), icesencode(), iftime(), ilbc_read(), ilbc_write(), ilbctolin_framein(), import_ch(), increase_call_count(), ind_load_module(), indexof(), init_acf_query(), init_app_class(), init_logger(), init_logger_chain(), init_manager(), init_req(), init_resp(), initialize_initreq(), inspect_module(), INTERNAL_OBJ(), invent_message(), io_grow(), is_our_turn(), isAnsweringMachine(), ivr_dispatch(), jb_error_output(), jb_get_and_deliver(), jb_put(), jb_warning_output(), join_queue(), jpeg_read_image(), jpeg_write_image(), language_read(), language_write(), launch_monitor_thread(), launch_netscript(), launch_script(), launch_service(), leave_queue(), leave_voicemail(), linear_alloc(), linear_generator(), linear_release(), lintogsm_framein(), lintolpc10_framein(), lintoulaw(), listener(), load_config(), load_config_meetme(), load_dynamic_module(), load_module(), load_modules(), load_odbc_config(), load_pbx(), load_realtime_queue(), load_resource(), load_rpt_vars(), local_alloc(), local_answer(), local_attended_transfer(), local_call(), local_devicestate(), local_fixup(), local_new(), local_write(), log_events(), log_exec(), lookupblacklist_exec(), lookupcidname_exec(), lpc10tolin_framein(), macroif_exec(), main(), make_email_file(), make_integer(), make_str(), make_trunk(), masq_park_call(), math(), md5(), measurenoise(), meetme_cmd(), meetmemute(), memcpy_decrypt(), memcpy_encrypt(), metermaidstate(), mfcr2_get_context(), mfcr2_monitor(), mgcp_answer(), mgcp_call(), mgcp_fixup(), mgcp_hangup(), mgcp_indicate(), mgcp_new(), mgcp_postrequest(), mgcp_reload(), mgcp_request(), mgcp_rtp_read(), mgcp_senddigit_begin(), mgcp_senddigit_end(), mgcp_ss(), mgcp_write(), mgcpsock_read(), milliwatt_generate(), misdn_answer(), misdn_bridge(), misdn_call(), misdn_cfg_get(), misdn_cfg_get_config_string(), misdn_cfg_init(), misdn_cfg_is_msn_valid(), misdn_cfg_update_ptp(), misdn_check_l2l1(), misdn_digit_end(), misdn_facility_exec(), misdn_hangup(), misdn_indication(), misdn_request(), misdn_send_text(), misdn_set_opt_exec(), misdn_write(), mixmonitor_exec(), mixmonitor_thread(), mkif(), mkintf(), moh0_exec(), moh1_exec(), moh2_exec(), moh3_exec(), moh_alloc(), moh_class_destructor(), moh_files_generator(), moh_files_release(), moh_generate(), moh_read(), moh_register(), moh_release(), moh_scan_files(), moh_write(), mohalloc(), monjoin_dep_warning(), monmp3thread(), morsecode_exec(), mp3_exec(), mp3play(), mssql_connect(), my_dahdi_write(), my_load_module(), nbs_alloc(), nbs_call(), nbs_hangup(), nbs_new(), nbs_request(), nbs_xread(), nbs_xwrite(), NBScat_exec(), NBScatplay(), netconsole(), network_thread(), notify_metermaids(), notify_new_message(), odbc_load_module(), odbc_obj_connect(), odbc_obj_disconnect(), odbc_register_class(), ogg_vorbis_open(), ogg_vorbis_read(), ogg_vorbis_rewrite(), ogg_vorbis_seek(), ogg_vorbis_tell(), ogg_vorbis_trunc(), ogg_vorbis_write(), oh323_alloc(), oh323_answer(), oh323_call(), oh323_destroy(), oh323_destroy_alias(), oh323_destroy_peer(), oh323_destroy_user(), oh323_digit_begin(), oh323_digit_end(), oh323_fixup(), oh323_hangup(), oh323_indicate(), oh323_read(), oh323_request(), oh323_rtp_read(), oh323_set_rtp_peer(), oh323_write(), old_milliwatt_exec(), onevent(), op_colon(), op_div(), op_eq(), op_eqtilde(), op_minus(), op_negate(), op_plus(), op_rem(), op_times(), open_mailbox(), openserial(), osp_auth(), osp_check_destination(), osp_create_provider(), osp_create_transaction(), osp_finish(), osp_get_policy(), osp_load(), osp_lookup(), osp_next(), osp_validate_token(), ospauth_exec(), ospfinished_exec(), osplookup_exec(), ospnext_exec(), oss_indicate(), oss_new(), oss_request(), page_exec(), park_call_full(), park_exec(), park_space_reserve(), parkandannounce_exec(), parse(), parse_args(), parse_config(), parse_cookies(), parse_gain_value(), parse_ie(), parse_moved_contact(), parse_naptr(), parse_register_contact(), parse_request(), parse_sip_options(), parse_srv(), pbx_builtin_background(), pbx_builtin_execiftime(), pbx_builtin_gotoif(), pbx_builtin_gotoiftime(), pbx_builtin_hangup(), pbx_builtin_importvar(), pbx_builtin_pushvar_helper(), pbx_builtin_saydate(), pbx_builtin_saynumber(), pbx_builtin_saytime(), pbx_builtin_serialize_variables(), pbx_builtin_setglobalvar(), pbx_builtin_setvar(), pbx_builtin_waitexten(), pbx_extension_helper(), pbx_find_extension(), pbx_load_config(), pbx_load_module(), pbx_load_users(), pbx_substitute_variables_helper_full(), pcm_read(), pcm_seek(), pcm_write(), peer_set_srcaddr(), peercnt_add(), peercnt_modify(), peercnt_remove(), pgsql_log(), pgsql_reconnect(), phone_answer(), phone_call(), phone_check_exception(), phone_digit_end(), phone_exception(), phone_hangup(), phone_indicate(), phone_mini_packet(), phone_new(), phone_read(), phone_request(), phone_setup(), phone_write(), phone_write_buf(), pickup_do(), pickup_exec(), pl_odtworz_plik(), play_greeting(), play_mailbox_owner(), play_message(), play_message_callerid(), play_message_category(), play_message_datetime(), play_message_duration(), play_record_review(), playback_exec(), playtones_alloc(), playtones_generator(), powerof(), pqm_exec(), precache_trans(), precache_transactions(), prep_email_sub_vars(), pri_create_spanmap(), pri_create_trunkgroup(), pri_dchannel(), pri_find_empty_chan(), pri_fixup_principle(), pri_resolve_span(), printdigest(), privacy_exec(), process_ast_dsp(), process_cisco_dtmf(), process_clearcache(), process_dahdi(), process_message(), process_my_load_module(), process_opcode(), process_request_queue(), process_returncode(), process_rfc2833(), process_rfc3389(), process_sdp(), process_sdp_a_audio(), process_sdp_a_image(), process_sdp_c(), process_text_line(), profile_set_param(), progress(), purge_old_messages(), ql_exec(), queue_exec(), queue_function_queuemembercount(), queue_function_queuememberlist(), queue_function_queuewaitingcount(), queue_member_count(), queue_reload_request(), queue_set_param(), queue_transfer_fixup(), quit_handler(), quote(), radius_log(), random_exec(), raw_hangup(), rbi_out(), read_agent_config(), read_config(), read_config_maps(), read_exec(), read_samples(), readfile_exec(), realtime_directory(), realtime_exec(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_odbc(), realtime_pgsql(), realtime_update_exec(), rebuild_matrix(), receive_ademco_contact_id(), receive_digit(), receive_dtmf_digits(), receive_message(), record_exec(), refresh_list(), reg_source_db(), regex(), register_peer_exten(), register_request(), register_verify(), registry_rerequest(), reload(), reload_agents(), reload_config(), reload_firmware(), reload_followme(), reload_logger(), reload_queue_members(), reload_queues(), remove_by_peercallno(), remove_by_transfercallno(), remove_from_interfaces(), remove_from_queue(), replace_callno(), reply_digest(), reqprep(), reset_conf(), reset_global_eid(), restart_monitor(), restore_conference(), restore_gains(), retrans_pkt(), retrydial_exec(), return_exec(), ring(), ring_entry(), ring_one(), rpt(), rpt_call(), rpt_do_lstats(), rpt_exec(), rpt_master(), rpt_tele_thread(), rpt_telemetry(), rqm_exec(), rr_dep_warning(), run_agi(), run_externnotify(), run_ras(), s_streamwait3(), safe_append(), save_conference(), save_to_folder(), say_date(), say_date_with_format(), say_datetime(), say_datetime_from_now(), say_number_full(), say_time(), saycharstr(), sayfile(), saynum(), scan_service(), scan_thread(), sched_delay_remove(), sched_thread(), schedule_delivery(), scheduled_destroy(), send_callerid(), send_delay(), send_digit_to_chan(), send_dtmf(), send_keypad_facility_exec(), send_packet(), send_request(), send_sound(), send_tone_burst(), send_trunk(), send_waveform_to_channel(), send_waveform_to_fd(), senddtmf_exec(), sendimage_exec(), sendmail(), sendpage(), sendtext_exec(), sendurl_exec(), session_do(), set(), set_actual_rxgain(), set_actual_txgain(), set_bridge_features_on_config(), set_config(), set_destination(), set_dtmf_payload(), set_format(), set_insecure_flags(), set_local_capabilities(), set_member_paused(), set_peer_capabilities(), set_peercnt_limit(), set_peercnt_limit_all_cb(), set_state(), set_timing(), set_ulimit(), setcallerid_exec(), setcallerid_pres_exec(), setcdruserfield_exec(), setflag(), setformat(), setrem(), settransfercapability_exec(), setup_dahdi(), setup_incoming_call(), setup_inheritable_audiohook(), setup_rtp_connection(), setup_transfer_datastore(), sha1(), show_channeltype(), show_channeltype_deprecated(), show_channeltypes(), show_dialplan_helper(), show_file_formats(), show_file_formats_deprecated(), showdisplay(), showkeys(), sip_addheader(), sip_alloc(), sip_alreadygone(), sip_answer(), sip_call(), sip_destroy(), sip_destroy_peer(), sip_destroy_user(), sip_devicestate(), sip_do_reload(), sip_dtmfmode(), sip_dump_history(), sip_fixup(), sip_handle_t38_reinvite(), sip_hangup(), sip_indicate(), sip_new(), sip_notify(), sip_park(), sip_park_thread(), sip_poke_noanswer(), sip_poke_peer(), sip_read(), sip_reg_timeout(), sip_register(), sip_registry_destroy(), sip_request_call(), sip_reregister(), sip_rtp_read(), sip_set_rtp_peer(), sip_set_udptl_peer(), sip_sipredirect(), sip_write(), sipsock_read(), skel_exec(), skinny_call(), skinny_fixup(), skinny_hangup(), skinny_indicate(), skinny_new(), skinny_newcall(), skinny_register(), skinny_req_parse(), skinny_request(), skinny_rtp_read(), skinny_session(), skinny_ss(), skinny_write(), sla_add_trunk_to_station(), sla_build_station(), sla_build_trunk(), sla_handle_dial_state_event(), sla_load_config(), sla_queue_event_conf(), sla_state(), sla_station_exec(), sla_trunk_exec(), slinear_read(), slinear_write(), smdi_load(), smdi_msg_read(), smdi_msg_retrieve_read(), smdi_read(), smdi_toggle_mwi(), smoother_frame_feed(), sms_exec(), sms_generate(), sms_handleincoming(), sms_process(), sms_readfile(), socket_process(), socket_read(), softhangup_exec(), sound_thread(), soundcard_init(), soundcard_writeframe(), spawn_dp_lookup(), spawn_mp3(), spawn_ras(), speex_get_wb_sz_at(), speex_samples(), speextolin_framein(), spy_generate(), sqlite_log(), ss_thread(), ssl_lock(), start_network_thread(), start_pri(), start_spying(), starttimer(), store_boost(), store_by_peercallno(), store_by_transfercallno(), store_config(), store_mixer(), store_next(), stub_ast_check_signature(), stub_ast_check_signature_bin(), stub_ast_encdec_bin(), stub_ast_key_get(), stub_ast_sign(), stub_ast_sign_bin(), stun_handle_packet(), subscript(), swap_subs(), system_exec_helper(), t38_get_rate(), tdd_feed(), tdd_new(), tds_load_module(), tds_log(), telem_lookup(), testclient_exec(), testserver_exec(), timed_read(), timeout_read(), timeout_write(), timing_read(), to_integer(), to_string(), tonepair_alloc(), tonepair_generator(), transfer_exec(), transmit_invite(), transmit_notify_with_mwi(), transmit_refer(), transmit_register(), transmit_request_with_auth(), transmit_response(), transmit_response_using_temp(), transmit_response_with_auth(), transmit_response_with_sdp(), transmit_response_with_t38_sdp(), transmit_state_notify(), transmit_trunk(), try_calling(), try_firmware(), try_load_key(), try_suggested_sip_codec(), try_transfer(), tryexec_exec(), tvfix(), udptl_build_packet(), unalloc_sub(), unload_module(), unwrap_timestamp(), update_call_counter(), update_common_options(), update_config(), update_header(), update_key(), update_max_nontrunk(), update_max_trunk(), update_odbc(), update_pgsql(), update_realtime_members(), update_registry(), upqm_exec(), uridecode(), uriencode(), used_blocks(), userevent_exec(), verbose_exec(), vm_authenticate(), vm_box_exists(), vm_change_password(), vm_exec(), vm_execmain(), vm_intro(), vm_newuser(), vm_options(), vm_tempgreeting(), vox_read(), vox_write(), wait_file(), wait_file2(), wait_for_answer(), wait_for_winner(), wait_interval(), waitforring_exec(), waitforsilence_exec(), waitstream_core(), wav_close(), wav_read(), wav_seek(), wav_write(), write_header(), write_metadata(), write_stream(), writefile(), and zap_send_keypad_facility_exec().
00682 { 00683 struct logchannel *chan; 00684 struct ast_dynamic_str *buf; 00685 time_t t; 00686 struct tm tm; 00687 char date[256]; 00688 00689 va_list ap; 00690 00691 if (!(buf = ast_dynamic_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) 00692 return; 00693 00694 if (AST_LIST_EMPTY(&logchannels)) 00695 { 00696 /* 00697 * we don't have the logger chain configured yet, 00698 * so just log to stdout 00699 */ 00700 if (level != __LOG_VERBOSE) { 00701 int res; 00702 va_start(ap, fmt); 00703 res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); 00704 va_end(ap); 00705 if (res != AST_DYNSTR_BUILD_FAILED) { 00706 term_filter_escapes(buf->str); 00707 fputs(buf->str, stdout); 00708 } 00709 } 00710 return; 00711 } 00712 00713 /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug 00714 are non-zero; LOG_DEBUG messages can still be displayed if option_debug 00715 is zero, if option_verbose is non-zero (this allows for 'level zero' 00716 LOG_DEBUG messages to be displayed, if the logmask on any channel 00717 allows it) 00718 */ 00719 if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) 00720 return; 00721 00722 /* Ignore anything that never gets logged anywhere */ 00723 if (!(global_logmask & (1 << level))) 00724 return; 00725 00726 /* Ignore anything other than the currently debugged file if there is one */ 00727 if ((level == __LOG_DEBUG) && !ast_strlen_zero(debug_filename) && strcasecmp(debug_filename, file)) 00728 return; 00729 00730 time(&t); 00731 ast_localtime(&t, &tm, NULL); 00732 strftime(date, sizeof(date), dateformat, &tm); 00733 00734 AST_LIST_LOCK(&logchannels); 00735 00736 if (logfiles.event_log && level == __LOG_EVENT) { 00737 va_start(ap, fmt); 00738 00739 fprintf(eventlog, "%s asterisk[%ld]: ", date, (long)getpid()); 00740 vfprintf(eventlog, fmt, ap); 00741 fflush(eventlog); 00742 00743 va_end(ap); 00744 AST_LIST_UNLOCK(&logchannels); 00745 return; 00746 } 00747 00748 AST_LIST_TRAVERSE(&logchannels, chan, list) { 00749 if (chan->disabled) 00750 break; 00751 /* Check syslog channels */ 00752 if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << level))) { 00753 va_start(ap, fmt); 00754 ast_log_vsyslog(level, file, line, function, fmt, ap); 00755 va_end(ap); 00756 /* Console channels */ 00757 } else if ((chan->logmask & (1 << level)) && (chan->type == LOGTYPE_CONSOLE)) { 00758 char linestr[128]; 00759 char tmp1[80], tmp2[80], tmp3[80], tmp4[80]; 00760 00761 if (level != __LOG_VERBOSE) { 00762 int res; 00763 sprintf(linestr, "%d", line); 00764 ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, 00765 "[%s] %s[%ld]: %s:%s %s: ", 00766 date, 00767 term_color(tmp1, levels[level], colors[level], 0, sizeof(tmp1)), 00768 (long)GETTID(), 00769 term_color(tmp2, file, COLOR_BRWHITE, 0, sizeof(tmp2)), 00770 term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), 00771 term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4))); 00772 /*filter to the console!*/ 00773 term_filter_escapes(buf->str); 00774 ast_console_puts_mutable(buf->str); 00775 00776 va_start(ap, fmt); 00777 res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); 00778 va_end(ap); 00779 if (res != AST_DYNSTR_BUILD_FAILED) 00780 ast_console_puts_mutable(buf->str); 00781 } 00782 /* File channels */ 00783 } else if ((chan->logmask & (1 << level)) && (chan->fileptr)) { 00784 int res; 00785 ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, 00786 "[%s] %s[%ld] %s: ", 00787 date, levels[level], (long)GETTID(), file); 00788 res = fprintf(chan->fileptr, "%s", buf->str); 00789 if (res <= 0 && !ast_strlen_zero(buf->str)) { /* Error, no characters printed */ 00790 fprintf(stderr,"**** Asterisk Logging Error: ***********\n"); 00791 if (errno == ENOMEM || errno == ENOSPC) { 00792 fprintf(stderr, "Asterisk logging error: Out of disk space, can't log to log file %s\n", chan->filename); 00793 } else 00794 fprintf(stderr, "Logger Warning: Unable to write to log file '%s': %s (disabled)\n", chan->filename, strerror(errno)); 00795 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: No\r\nReason: %d - %s\r\n", chan->filename, errno, strerror(errno)); 00796 chan->disabled = 1; 00797 } else { 00798 int res; 00799 /* No error message, continue printing */ 00800 va_start(ap, fmt); 00801 res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); 00802 va_end(ap); 00803 if (res != AST_DYNSTR_BUILD_FAILED) { 00804 term_strip(buf->str, buf->str, buf->len); 00805 fputs(buf->str, chan->fileptr); 00806 fflush(chan->fileptr); 00807 } 00808 } 00809 } 00810 } 00811 00812 AST_LIST_UNLOCK(&logchannels); 00813 00814 if (filesize_reload_needed) { 00815 reload_logger(1); 00816 ast_log(LOG_EVENT,"Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); 00817 if (option_verbose) 00818 ast_verbose("Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); 00819 }
static void ast_log_vsyslog | ( | int | level, | |
const char * | file, | |||
int | line, | |||
const char * | function, | |||
const char * | fmt, | |||
va_list | args | |||
) | [static] |
Definition at line 651 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_VERBOSE, GETTID, levels, s, SYSLOG_NLEVELS, and term_strip().
Referenced by ast_log().
00653 { 00654 char buf[BUFSIZ]; 00655 char *s; 00656 00657 if (level >= SYSLOG_NLEVELS) { 00658 /* we are locked here, so cannot ast_log() */ 00659 fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", level); 00660 return; 00661 } 00662 if (level == __LOG_VERBOSE) { 00663 snprintf(buf, sizeof(buf), "VERBOSE[%ld]: ", (long)GETTID()); 00664 level = __LOG_DEBUG; 00665 } else if (level == __LOG_DTMF) { 00666 snprintf(buf, sizeof(buf), "DTMF[%ld]: ", (long)GETTID()); 00667 level = __LOG_DEBUG; 00668 } else { 00669 snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: ", 00670 levels[level], (long)GETTID(), file, line, function); 00671 } 00672 s = buf + strlen(buf); 00673 vsnprintf(s, sizeof(buf) - strlen(buf), fmt, args); 00674 term_strip(s, s, strlen(s) + 1); 00675 syslog(syslog_level_map[level], "%s", buf);
void ast_queue_log | ( | const char * | queuename, | |
const char * | callid, | |||
const char * | agent, | |||
const char * | event, | |||
const char * | fmt, | |||
... | ||||
) |
Definition at line 346 of file logger.c.
References AST_LIST_LOCK, AST_LIST_UNLOCK, and qlog.
Referenced by __login_exec(), action_agent_callback_login(), agent_logoff_maintenance(), aqm_exec(), handle_queue_add_member(), handle_queue_remove_member(), init_logger(), manager_add_queue_member(), manager_remove_queue_member(), ql_exec(), queue_exec(), queue_transfer_fixup(), reload_logger(), rna(), rqm_exec(), set_member_paused(), and wait_our_turn().
00348 { 00349 va_list ap; 00350 AST_LIST_LOCK(&logchannels); 00351 if (qlog) { 00352 va_start(ap, fmt); 00353 fprintf(qlog, "%ld|%s|%s|%s|%s|", (long)time(NULL), callid, queuename, agent, event); 00354 vfprintf(qlog, fmt, ap); 00355 fprintf(qlog, "\n"); 00356 va_end(ap); 00357 fflush(qlog); 00358 } 00359 AST_LIST_UNLOCK(&logchannels);
int ast_register_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 900 of file logger.c.
References AST_LIST_INSERT_HEAD, AST_LIST_LOCK, AST_LIST_UNLOCK, ast_malloc, logchannel::list, and verb.
Referenced by ast_makesocket(), main(), and show_console().
00902 { 00903 struct verb *verb; 00904 00905 if (!(verb = ast_malloc(sizeof(*verb)))) 00906 return -1; 00907 00908 verb->verboser = v; 00909 00910 AST_LIST_LOCK(&verbosers); 00911 AST_LIST_INSERT_HEAD(&verbosers, verb, list); 00912 AST_LIST_UNLOCK(&verbosers); 00913 00914 return 0;
int ast_unregister_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 916 of file logger.c.
References AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_LIST_UNLOCK, free, logchannel::list, and verb::verboser.
Referenced by exit_now().
00918 { 00919 struct verb *cur; 00920 00921 AST_LIST_LOCK(&verbosers); 00922 AST_LIST_TRAVERSE_SAFE_BEGIN(&verbosers, cur, list) { 00923 if (cur->verboser == v) { 00924 AST_LIST_REMOVE_CURRENT(&verbosers, list); 00925 free(cur); 00926 break; 00927 } 00928 } 00929 AST_LIST_TRAVERSE_SAFE_END 00930 AST_LIST_UNLOCK(&verbosers); 00931 00932 return cur ? 0 : -1;
void ast_verbose | ( | const char * | fmt, | |
... | ||||
) |
This works like ast_log, but prints verbose messages to the console depending on verbosity level set. ast_verbose(VERBOSE_PREFIX_3 "Whatever %s is happening\n", "nothing"); This will print the message to the console if the verbose level is set to a level >= 3 Note the abscence of a comma after the VERBOSE_PREFIX_3. This is important. VERBOSE_PREFIX_1 through VERBOSE_PREFIX_3 are defined.
Send a verbose message (based on verbose level)
Definition at line 854 of file logger.c.
References ast_dynamic_str_thread_get(), ast_dynamic_str_thread_set_va, AST_DYNSTR_BUILD_FAILED, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_localtime(), ast_log(), ast_opt_timestamp, logchannel::list, LOG_VERBOSE, ast_dynamic_str::str, t, term_filter_escapes(), verbose_buf, VERBOSE_BUF_INIT_SIZE, and verb::verboser.
Referenced by __agent_start_monitoring(), __ast_format_register(), __ast_pbx_run(), __ast_play_and_record(), __ast_register_translator(), __dahdi_exception(), __login_exec(), __sip_destroy(), _macro_exec(), _while_exec(), accept_thread(), acf_odbc_read(), action_agent_callback_login(), add_codec_to_sdp(), add_noncodec_to_sdp(), add_realm_authentication(), add_sdp(), adsi_exec(), adsi_prog(), advanced_options(), agent_call(), agent_read(), agentmonitoroutgoing_exec(), agi_debug_cli(), aji_handle_presence(), aji_handle_subscribe(), aji_log_hook(), aji_recv_loop(), aji_register_query_handler(), aji_test(), alarmreceiver_exec(), alsa_answer(), alsa_call(), alsa_digit(), alsa_hangup(), alsa_indicate(), alsa_text(), append_mapping(), ast_add_extension2(), ast_aji_disconnect(), ast_app_has_voicemail(), ast_app_inboxcount(), ast_app_messagecount(), ast_bridge_call(), ast_cdr_free(), ast_cdr_unregister(), ast_channel_bridge(), ast_channel_register(), ast_channel_unregister(), ast_context_add_include2(), ast_context_add_switch2(), ast_custom_function_register(), ast_custom_function_unregister(), ast_dnsmgr_lookup(), ast_dnsmgr_release(), ast_feature_request_and_dial(), ast_format_unregister(), ast_frame_dump(), ast_get_srv(), ast_image_register(), ast_image_unregister(), ast_jb_destroy(), ast_log(), ast_manager_register_struct(), ast_manager_unregister(), ast_module_reload(), ast_moh_destroy(), ast_moh_start(), ast_netsock_bindaddr(), ast_pbx_outgoing_app(), ast_pbx_outgoing_exten(), ast_pbx_run_app(), ast_record_review(), ast_register_application(), ast_register_feature(), ast_remotecontrol(), ast_rtcp_read(), ast_rtcp_write_rr(), ast_rtcp_write_sr(), ast_rtp_bridge(), ast_rtp_destroy(), ast_rtp_raw_write(), ast_rtp_read(), ast_rtp_reload(), ast_rtp_sendcng(), ast_rtp_senddigit_begin(), ast_rtp_senddigit_continuation(), ast_rtp_senddigit_end(), ast_say_enumeration_full_he(), ast_say_number_full_he(), ast_set_indication_country(), ast_set_priority(), ast_speech_register(), ast_speech_unregister(), ast_streamfile(), ast_udptl_read(), ast_udptl_reload(), ast_udptl_write(), ast_unregister_application(), ast_unregister_indication_country(), ast_unregister_translator(), async_wait(), attempt_reconnect(), attempt_thread(), attempt_transfer(), begin_dial(), bridge_p2p_rtp_write(), build_channels(), build_conf(), build_device(), build_gateway(), build_query(), builtin_automonitor(), builtin_blindtransfer(), builtin_disconnect(), cb_extensionstate(), channel_spy(), check_for_conference(), check_user_full(), check_via(), conf_exec(), conf_run(), config_odbc_prepare(), config_text_file_load(), config_text_file_save(), cpeid_exec(), create_jb(), dahdi_bridge(), dahdi_call(), dahdi_handle_dtmfup(), dahdi_handle_event(), dahdi_hangup(), dahdi_pri_message(), dahdi_r2_on_call_accepted(), dahdi_r2_on_call_answered(), dahdi_r2_on_call_disconnect(), dahdi_r2_on_call_end(), dahdi_r2_on_call_init(), dahdi_r2_on_call_offered(), dahdi_r2_write_log(), dahdi_request(), dahdi_restart(), dahdi_softhangup_all(), database_increment(), del_exec(), deltree_exec(), destroy_all_channels(), dialout(), dnsmgr_refresh(), do_idle_thread(), do_monitor(), do_parking_thread(), do_register_auth(), do_waiting(), dumpchan_exec(), dundi_debug_output(), exec(), exit_now(), find_command(), find_gtalk(), find_line_by_name(), find_subchannel_and_lock(), find_transcoders(), findmeexec(), flash_exec(), get_also_info(), get_destination(), get_input(), get_rdnis(), get_refer_info(), gtalk_do_reload(), gtalk_handle_dtmf(), h323_ep_hangup(), h323_reload(), handle_alarm_message(), handle_button_template_req_message(), handle_capabilities_res_message(), handle_command_response(), handle_enbloc_call_message(), handle_exec(), handle_frame(), handle_frame_ownerless(), handle_getoption(), handle_init_event(), handle_keypad_button_message(), handle_message(), handle_offhook_message(), handle_onhook_message(), handle_open_receive_channel_ack_message(), handle_register_message(), handle_request(), handle_request_info(), handle_request_invite(), handle_request_message(), handle_request_refer(), handle_request_register(), handle_request_subscribe(), handle_response(), handle_soft_key_event_message(), handle_stimulus_message(), handle_streamfile(), handle_verbose(), iax2_ack_registry(), iax2_bridge(), iax2_exec(), iax2_hangup(), iax2_prov_app(), iax_debug_output(), iax_provision_reload(), init_files_class(), init_logger(), initialize_initreq(), isAnsweringMachine(), ivr_demo_func(), jb_debug_output(), launch_script(), leave_voicemail(), list_route(), listener(), load_config(), load_module(), load_modules(), load_pbx(), load_resource(), load_rpt_vars(), log_events(), lookupcidname_exec(), main(), mdc1200_notify(), mgcp_answer(), mgcp_call(), mgcp_hangup(), mgcp_indicate(), mgcp_new(), mgcp_reload(), mgcp_request(), mgcp_ss(), mgcpsock_read(), misdn_bridge(), mixmonitor_ds_close_fs(), mixmonitor_thread(), moh_alloc(), moh_files_alloc(), moh_files_release(), moh_release(), netconsole(), odbc_do_query(), odbc_init(), odbc_load_module(), odbc_log(), odbc_unload_module(), oh323_call(), oss_answer(), oss_call(), oss_digit_end(), oss_hangup(), oss_indicate(), oss_text(), park_call_full(), park_exec(), parkandannounce_exec(), parse(), parse_config(), parse_register_contact(), pbx_builtin_goto(), pbx_builtin_pushvar_helper(), pbx_builtin_setvar_helper(), pbx_builtin_waitexten(), pbx_extension_helper(), phone_check_exception(), phone_exception(), phone_hangup(), play_message_callerid(), play_record_review(), post_cdr(), pri_fixup_principle(), privacy_exec(), process_ast_dsp(), process_dahdi(), process_message(), process_sdp(), process_sdp_a_audio(), process_sdp_a_video(), queue_exec(), quit_handler(), random_exec(), read_exec(), realtime_exec(), receive_ademco_contact_id(), receive_dtmf_digits(), receive_message(), refresh_list(), reg_source_db(), reload(), reload_config(), reload_firmware(), reload_logger(), resend_response(), retrans_pkt(), ring_entry(), rna(), rpt(), run_agi(), run_ras(), say_periodic_announcement(), say_position(), send_cwcidspill(), send_request(), send_response(), send_tone_burst(), session_do(), set_config(), set_destination(), setformat(), settransfercapability_exec(), setup_dahdi(), setup_incoming_call(), sip_new(), sip_reload(), sip_scheddestroy(), sip_sendtext(), sipsock_read(), skinny_answer(), skinny_call(), skinny_hangup(), skinny_hold(), skinny_indicate(), skinny_new(), skinny_request(), skinny_reset_device(), skinny_session(), skinny_ss(), skinny_unhold(), sms_debug(), socket_process(), ss_thread(), start_network_thread(), stun_handle_packet(), stun_process_attr(), timeout_write(), timing_read(), transmit_callinfo(), transmit_connection_del(), transmit_connection_del_w_params(), transmit_displaymessage(), transmit_displaynotify(), transmit_displaypromptstatus(), transmit_modify_request(), transmit_notify_request(), transmit_notify_request_with_callerid(), transmit_register(), transmit_ringer_mode(), try_load_key(), unload_module(), update_registry(), verbose_exec(), vm_authenticate(), vm_execmain(), wait_for_answer(), wait_for_winner(), waitforring_exec(), waitforsilence_exec(), and write_metadata().
00856 { 00857 struct verb *v; 00858 struct ast_dynamic_str *buf; 00859 int res; 00860 va_list ap; 00861 00862 if (ast_opt_timestamp) { 00863 time_t t; 00864 struct tm tm; 00865 char date[40]; 00866 char *datefmt; 00867 00868 time(&t); 00869 ast_localtime(&t, &tm, NULL); 00870 strftime(date, sizeof(date), dateformat, &tm); 00871 datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1); 00872 sprintf(datefmt, "%c[%s] %s", 127, date, fmt); 00873 fmt = datefmt; 00874 } else { 00875 char *tmp = alloca(strlen(fmt) + 2); 00876 sprintf(tmp, "%c%s", 127, fmt); 00877 fmt = tmp; 00878 } 00879 00880 if (!(buf = ast_dynamic_str_thread_get(&verbose_buf, VERBOSE_BUF_INIT_SIZE))) 00881 return; 00882 00883 va_start(ap, fmt); 00884 res = ast_dynamic_str_thread_set_va(&buf, 0, &verbose_buf, fmt, ap); 00885 va_end(ap); 00886 00887 if (res == AST_DYNSTR_BUILD_FAILED) 00888 return; 00889 00890 /* filter out possibly hazardous escape sequences */ 00891 term_filter_escapes(buf->str); 00892 00893 AST_LIST_LOCK(&verbosers); 00894 AST_LIST_TRAVERSE(&verbosers, v, list) 00895 v->verboser(buf->str); 00896 AST_LIST_UNLOCK(&verbosers); 00897 00898 ast_log(LOG_VERBOSE, "%s", buf->str + 1);
void close_logger | ( | void | ) |
Provided by logger.c
Definition at line 621 of file logger.c.
References AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, eventlog, f, logchannel::list, and qlog.
Referenced by quit_handler().
00623 { 00624 struct logchannel *f; 00625 00626 AST_LIST_LOCK(&logchannels); 00627 00628 if (eventlog) { 00629 fclose(eventlog); 00630 eventlog = NULL; 00631 } 00632 00633 if (qlog) { 00634 fclose(qlog); 00635 qlog = NULL; 00636 } 00637 00638 AST_LIST_TRAVERSE(&logchannels, f, list) { 00639 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00640 fclose(f->fileptr); 00641 f->fileptr = NULL; 00642 } 00643 } 00644 00645 closelog(); /* syslog */ 00646 00647 AST_LIST_UNLOCK(&logchannels); 00648 00649 return;
static int handle_logger_reload | ( | int | fd, | |
int | argc, | |||
char * | argv[] | |||
) | [static] |
Definition at line 488 of file logger.c.
References ast_cli(), logger_reload(), and RESULT_FAILURE.
00490 { 00491 int result = logger_reload(); 00492 if (result == RESULT_FAILURE) 00493 ast_cli(fd, "Failed to reload the logger\n"); 00494 return result;
static int handle_logger_rotate | ( | int | fd, | |
int | argc, | |||
char * | argv[] | |||
) | [static] |
Definition at line 496 of file logger.c.
References ast_cli(), reload_logger(), RESULT_FAILURE, and RESULT_SUCCESS.
00498 { 00499 if(reload_logger(1)) { 00500 ast_cli(fd, "Failed to reload the logger and rotate log files\n"); 00501 return RESULT_FAILURE; 00502 } 00503 return RESULT_SUCCESS;
static int handle_logger_show_channels | ( | int | fd, | |
int | argc, | |||
char * | argv[] | |||
) | [static] |
CLI command to show logging system configuration.
Definition at line 506 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_ERROR, __LOG_EVENT, __LOG_NOTICE, __LOG_VERBOSE, __LOG_WARNING, ast_cli(), AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, logchannel::disabled, logchannel::filename, FORMATL, logchannel::list, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_SYSLOG, RESULT_SUCCESS, and logchannel::type.
00508 { 00509 #define FORMATL "%-35.35s %-8.8s %-9.9s " 00510 struct logchannel *chan; 00511 00512 ast_cli(fd,FORMATL, "Channel", "Type", "Status"); 00513 ast_cli(fd, "Configuration\n"); 00514 ast_cli(fd,FORMATL, "-------", "----", "------"); 00515 ast_cli(fd, "-------------\n"); 00516 AST_LIST_LOCK(&logchannels); 00517 AST_LIST_TRAVERSE(&logchannels, chan, list) { 00518 ast_cli(fd, FORMATL, chan->filename, chan->type==LOGTYPE_CONSOLE ? "Console" : (chan->type==LOGTYPE_SYSLOG ? "Syslog" : "File"), 00519 chan->disabled ? "Disabled" : "Enabled"); 00520 ast_cli(fd, " - "); 00521 if (chan->logmask & (1 << __LOG_DEBUG)) 00522 ast_cli(fd, "Debug "); 00523 if (chan->logmask & (1 << __LOG_DTMF)) 00524 ast_cli(fd, "DTMF "); 00525 if (chan->logmask & (1 << __LOG_VERBOSE)) 00526 ast_cli(fd, "Verbose "); 00527 if (chan->logmask & (1 << __LOG_WARNING)) 00528 ast_cli(fd, "Warning "); 00529 if (chan->logmask & (1 << __LOG_NOTICE)) 00530 ast_cli(fd, "Notice "); 00531 if (chan->logmask & (1 << __LOG_ERROR)) 00532 ast_cli(fd, "Error "); 00533 if (chan->logmask & (1 << __LOG_EVENT)) 00534 ast_cli(fd, "Event "); 00535 ast_cli(fd, "\n"); 00536 } 00537 AST_LIST_UNLOCK(&logchannels); 00538 ast_cli(fd, "\n"); 00539 00540 return RESULT_SUCCESS;
static int handle_SIGXFSZ | ( | int | sig | ) | [static] |
Definition at line 575 of file logger.c.
Referenced by init_logger().
00577 { 00578 /* Indicate need to reload */ 00579 filesize_reload_needed = 1; 00580 return 0;
int init_logger | ( | void | ) |
Provided by logger.c
Definition at line 582 of file logger.c.
References ast_cli_register_multiple(), ast_config_AST_LOG_DIR, ast_log(), ast_queue_log(), ast_verbose(), cli_logger, errno, EVENTLOG, eventlog, handle_SIGXFSZ(), init_logger_chain(), LOG_ERROR, LOG_EVENT, logfiles, option_verbose, qlog, and QUEUELOG.
Referenced by main().
00584 { 00585 char tmp[256]; 00586 int res = 0; 00587 00588 /* auto rotate if sig SIGXFSZ comes a-knockin */ 00589 (void) signal(SIGXFSZ,(void *) handle_SIGXFSZ); 00590 00591 /* register the logger cli commands */ 00592 ast_cli_register_multiple(cli_logger, sizeof(cli_logger) / sizeof(struct ast_cli_entry)); 00593 00594 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00595 00596 /* create log channels */ 00597 init_logger_chain(); 00598 00599 /* create the eventlog */ 00600 if (logfiles.event_log) { 00601 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00602 snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); 00603 eventlog = fopen((char *)tmp, "a"); 00604 if (eventlog) { 00605 ast_log(LOG_EVENT, "Started Asterisk Event Logger\n"); 00606 if (option_verbose) 00607 ast_verbose("Asterisk Event Logger Started %s\n",(char *)tmp); 00608 } else { 00609 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 00610 res = -1; 00611 } 00612 } 00613 00614 if (logfiles.queue_log) { 00615 snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, QUEUELOG); 00616 qlog = fopen(tmp, "a"); 00617 ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", ""); 00618 } 00619 return res;
static void init_logger_chain | ( | void | ) | [static] |
Definition at line 277 of file logger.c.
References ast_calloc, ast_config_destroy(), ast_config_load(), ast_copy_string(), AST_LIST_INSERT_HEAD, AST_LIST_LOCK, AST_LIST_REMOVE_HEAD, AST_LIST_UNLOCK, ast_log(), ast_true(), ast_variable_browse(), ast_variable_retrieve(), errno, free, logchannel::list, LOG_WARNING, logfiles, LOGTYPE_CONSOLE, make_logchannel(), s, and var.
Referenced by init_logger(), and reload_logger().
00279 { 00280 struct logchannel *chan; 00281 struct ast_config *cfg; 00282 struct ast_variable *var; 00283 const char *s; 00284 00285 /* delete our list of log channels */ 00286 AST_LIST_LOCK(&logchannels); 00287 while ((chan = AST_LIST_REMOVE_HEAD(&logchannels, list))) 00288 free(chan); 00289 AST_LIST_UNLOCK(&logchannels); 00290 00291 global_logmask = 0; 00292 errno = 0; 00293 /* close syslog */ 00294 closelog(); 00295 00296 cfg = ast_config_load("logger.conf"); 00297 00298 /* If no config file, we're fine, set default options. */ 00299 if (!cfg) { 00300 if (errno) 00301 fprintf(stderr, "Unable to open logger.conf: %s; default settings will be used.\n", strerror(errno)); 00302 else 00303 fprintf(stderr, "Errors detected in logger.conf: see above; default settings will be used.\n"); 00304 if (!(chan = ast_calloc(1, sizeof(*chan)))) 00305 return; 00306 chan->type = LOGTYPE_CONSOLE; 00307 chan->logmask = 28; /*warning,notice,error */ 00308 AST_LIST_LOCK(&logchannels); 00309 AST_LIST_INSERT_HEAD(&logchannels, chan, list); 00310 AST_LIST_UNLOCK(&logchannels); 00311 global_logmask |= chan->logmask; 00312 return; 00313 } 00314 00315 if ((s = ast_variable_retrieve(cfg, "general", "appendhostname"))) { 00316 if (ast_true(s)) { 00317 if (gethostname(hostname, sizeof(hostname) - 1)) { 00318 ast_copy_string(hostname, "unknown", sizeof(hostname)); 00319 ast_log(LOG_WARNING, "What box has no hostname???\n"); 00320 } 00321 } else 00322 hostname[0] = '\0'; 00323 } else 00324 hostname[0] = '\0'; 00325 if ((s = ast_variable_retrieve(cfg, "general", "dateformat"))) 00326 ast_copy_string(dateformat, s, sizeof(dateformat)); 00327 else 00328 ast_copy_string(dateformat, "%b %e %T", sizeof(dateformat)); 00329 if ((s = ast_variable_retrieve(cfg, "general", "queue_log"))) 00330 logfiles.queue_log = ast_true(s); 00331 if ((s = ast_variable_retrieve(cfg, "general", "event_log"))) 00332 logfiles.event_log = ast_true(s); 00333 00334 AST_LIST_LOCK(&logchannels); 00335 var = ast_variable_browse(cfg, "logfiles"); 00336 for (; var; var = var->next) { 00337 if (!(chan = make_logchannel(var->name, var->value, var->lineno))) 00338 continue; 00339 AST_LIST_INSERT_HEAD(&logchannels, chan, list); 00340 global_logmask |= chan->logmask; 00341 } 00342 AST_LIST_UNLOCK(&logchannels); 00343 00344 ast_config_destroy(cfg);
int logger_reload | ( | void | ) |
Reload logger without rotating log files.
Definition at line 481 of file logger.c.
References reload_logger(), RESULT_FAILURE, and RESULT_SUCCESS.
Referenced by handle_logger_reload().
00483 { 00484 if(reload_logger(0)) 00485 return RESULT_FAILURE; 00486 return RESULT_SUCCESS;
static int make_components | ( | char * | s, | |
int | lineno | |||
) | [static] |
Definition at line 142 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_ERROR, __LOG_EVENT, __LOG_NOTICE, __LOG_VERBOSE, __LOG_WARNING, and ast_skip_blanks().
Referenced by make_logchannel().
00144 { 00145 char *w; 00146 int res = 0; 00147 char *stringp = s; 00148 00149 while ((w = strsep(&stringp, ","))) { 00150 w = ast_skip_blanks(w); 00151 if (!strcasecmp(w, "error")) 00152 res |= (1 << __LOG_ERROR); 00153 else if (!strcasecmp(w, "warning")) 00154 res |= (1 << __LOG_WARNING); 00155 else if (!strcasecmp(w, "notice")) 00156 res |= (1 << __LOG_NOTICE); 00157 else if (!strcasecmp(w, "event")) 00158 res |= (1 << __LOG_EVENT); 00159 else if (!strcasecmp(w, "debug")) 00160 res |= (1 << __LOG_DEBUG); 00161 else if (!strcasecmp(w, "verbose")) 00162 res |= (1 << __LOG_VERBOSE); 00163 else if (!strcasecmp(w, "dtmf")) 00164 res |= (1 << __LOG_DTMF); 00165 else { 00166 fprintf(stderr, "Logfile Warning: Unknown keyword '%s' at line %d of logger.conf\n", w, lineno); 00167 } 00168 } 00169 00170 return res;
static struct logchannel* make_logchannel | ( | char * | channel, | |
char * | components, | |||
int | lineno | |||
) | [static] |
Definition at line 172 of file logger.c.
References ast_calloc, ast_config_AST_LOG_DIR, ast_strlen_zero(), errno, logchannel::facility, free, LOGTYPE_CONSOLE, LOGTYPE_FILE, LOGTYPE_SYSLOG, and make_components().
Referenced by init_logger_chain().
00174 { 00175 struct logchannel *chan; 00176 char *facility; 00177 #ifndef SOLARIS 00178 CODE *cptr; 00179 #endif 00180 00181 if (ast_strlen_zero(channel) || !(chan = ast_calloc(1, sizeof(*chan)))) 00182 return NULL; 00183 00184 if (!strcasecmp(channel, "console")) { 00185 chan->type = LOGTYPE_CONSOLE; 00186 } else if (!strncasecmp(channel, "syslog", 6)) { 00187 /* 00188 * syntax is: 00189 * syslog.facility => level,level,level 00190 */ 00191 facility = strchr(channel, '.'); 00192 if(!facility++ || !facility) { 00193 facility = "local0"; 00194 } 00195 00196 #ifndef SOLARIS 00197 /* 00198 * Walk through the list of facilitynames (defined in sys/syslog.h) 00199 * to see if we can find the one we have been given 00200 */ 00201 chan->facility = -1; 00202 cptr = facilitynames; 00203 while (cptr->c_name) { 00204 if (!strcasecmp(facility, cptr->c_name)) { 00205 chan->facility = cptr->c_val; 00206 break; 00207 } 00208 cptr++; 00209 } 00210 #else 00211 chan->facility = -1; 00212 if (!strcasecmp(facility, "kern")) 00213 chan->facility = LOG_KERN; 00214 else if (!strcasecmp(facility, "USER")) 00215 chan->facility = LOG_USER; 00216 else if (!strcasecmp(facility, "MAIL")) 00217 chan->facility = LOG_MAIL; 00218 else if (!strcasecmp(facility, "DAEMON")) 00219 chan->facility = LOG_DAEMON; 00220 else if (!strcasecmp(facility, "AUTH")) 00221 chan->facility = LOG_AUTH; 00222 else if (!strcasecmp(facility, "SYSLOG")) 00223 chan->facility = LOG_SYSLOG; 00224 else if (!strcasecmp(facility, "LPR")) 00225 chan->facility = LOG_LPR; 00226 else if (!strcasecmp(facility, "NEWS")) 00227 chan->facility = LOG_NEWS; 00228 else if (!strcasecmp(facility, "UUCP")) 00229 chan->facility = LOG_UUCP; 00230 else if (!strcasecmp(facility, "CRON")) 00231 chan->facility = LOG_CRON; 00232 else if (!strcasecmp(facility, "LOCAL0")) 00233 chan->facility = LOG_LOCAL0; 00234 else if (!strcasecmp(facility, "LOCAL1")) 00235 chan->facility = LOG_LOCAL1; 00236 else if (!strcasecmp(facility, "LOCAL2")) 00237 chan->facility = LOG_LOCAL2; 00238 else if (!strcasecmp(facility, "LOCAL3")) 00239 chan->facility = LOG_LOCAL3; 00240 else if (!strcasecmp(facility, "LOCAL4")) 00241 chan->facility = LOG_LOCAL4; 00242 else if (!strcasecmp(facility, "LOCAL5")) 00243 chan->facility = LOG_LOCAL5; 00244 else if (!strcasecmp(facility, "LOCAL6")) 00245 chan->facility = LOG_LOCAL6; 00246 else if (!strcasecmp(facility, "LOCAL7")) 00247 chan->facility = LOG_LOCAL7; 00248 #endif /* Solaris */ 00249 00250 if (0 > chan->facility) { 00251 fprintf(stderr, "Logger Warning: bad syslog facility in logger.conf\n"); 00252 free(chan); 00253 return NULL; 00254 } 00255 00256 chan->type = LOGTYPE_SYSLOG; 00257 snprintf(chan->filename, sizeof(chan->filename), "%s", channel); 00258 openlog("asterisk", LOG_PID, chan->facility); 00259 } else { 00260 if (!ast_strlen_zero(hostname)) { 00261 snprintf(chan->filename, sizeof(chan->filename), "%s/%s.%s", 00262 channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel, hostname); 00263 } else { 00264 snprintf(chan->filename, sizeof(chan->filename), "%s/%s", 00265 channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel); 00266 } 00267 chan->fileptr = fopen(chan->filename, "a"); 00268 if (!chan->fileptr) { 00269 /* Can't log here, since we're called with a lock */ 00270 fprintf(stderr, "Logger Warning: Unable to open log file '%s': %s\n", chan->filename, strerror(errno)); 00271 } 00272 chan->type = LOGTYPE_FILE; 00273 } 00274 chan->logmask = make_components(components, lineno); 00275 return chan;
int reload_logger | ( | int | ) |
Provided by logger.c
Definition at line 361 of file logger.c.
References ast_config_AST_LOG_DIR, ast_copy_string(), AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_log(), ast_queue_log(), ast_verbose(), errno, EVENT_FLAG_SYSTEM, eventlog, EVENTLOG, f, init_logger_chain(), logchannel::list, LOG_ERROR, LOG_EVENT, logfiles, manager_event(), option_verbose, qlog, and QUEUELOG.
Referenced by ast_log(), handle_logger_rotate(), and logger_reload().
00363 { 00364 char old[PATH_MAX] = ""; 00365 char new[PATH_MAX]; 00366 int event_rotate = rotate, queue_rotate = rotate; 00367 struct logchannel *f; 00368 FILE *myf; 00369 int x, res = 0; 00370 00371 AST_LIST_LOCK(&logchannels); 00372 00373 if (eventlog) 00374 fclose(eventlog); 00375 else 00376 event_rotate = 0; 00377 eventlog = NULL; 00378 00379 if (qlog) 00380 fclose(qlog); 00381 else 00382 queue_rotate = 0; 00383 qlog = NULL; 00384 00385 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00386 00387 AST_LIST_TRAVERSE(&logchannels, f, list) { 00388 if (f->disabled) { 00389 f->disabled = 0; /* Re-enable logging at reload */ 00390 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: Yes\r\n", f->filename); 00391 } 00392 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00393 fclose(f->fileptr); /* Close file */ 00394 f->fileptr = NULL; 00395 if (rotate) { 00396 ast_copy_string(old, f->filename, sizeof(old)); 00397 00398 for (x = 0; ; x++) { 00399 snprintf(new, sizeof(new), "%s.%d", f->filename, x); 00400 myf = fopen((char *)new, "r"); 00401 if (myf) 00402 fclose(myf); 00403 else 00404 break; 00405 } 00406 00407 /* do it */ 00408 if (rename(old,new)) 00409 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); 00410 } 00411 } 00412 } 00413 00414 filesize_reload_needed = 0; 00415 00416 init_logger_chain(); 00417 00418 if (logfiles.event_log) { 00419 snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); 00420 if (event_rotate) { 00421 for (x=0;;x++) { 00422 snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x); 00423 myf = fopen((char *)new, "r"); 00424 if (myf) /* File exists */ 00425 fclose(myf); 00426 else 00427 break; 00428 } 00429 00430 /* do it */ 00431 if (rename(old,new)) 00432 ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new); 00433 } 00434 00435 eventlog = fopen(old, "a"); 00436 if (eventlog) { 00437 ast_log(LOG_EVENT, "Restarted Asterisk Event Logger\n"); 00438 if (option_verbose) 00439 ast_verbose("Asterisk Event Logger restarted\n"); 00440 } else { 00441 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 00442 res = -1; 00443 } 00444 } 00445 00446 if (logfiles.queue_log) { 00447 snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, QUEUELOG); 00448 if (queue_rotate) { 00449 for (x = 0; ; x++) { 00450 snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, QUEUELOG, x); 00451 myf = fopen((char *)new, "r"); 00452 if (myf) /* File exists */ 00453 fclose(myf); 00454 else 00455 break; 00456 } 00457 00458 /* do it */ 00459 if (rename(old, new)) 00460 ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new); 00461 } 00462 00463 qlog = fopen(old, "a"); 00464 if (qlog) { 00465 ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", ""); 00466 ast_log(LOG_EVENT, "Restarted Asterisk Queue Logger\n"); 00467 if (option_verbose) 00468 ast_verbose("Asterisk Queue Logger restarted\n"); 00469 } else { 00470 ast_log(LOG_ERROR, "Unable to create queue log: %s\n", strerror(errno)); 00471 res = -1; 00472 } 00473 } 00474 00475 AST_LIST_UNLOCK(&logchannels); 00476 00477 return res;
struct ast_cli_entry cli_logger[] [static] |
char dateformat[256] = "%b %e %T" [static] |
FILE* eventlog [static] |
Definition at line 113 of file logger.c.
Referenced by ast_log(), close_logger(), init_logger(), and reload_logger().
int filesize_reload_needed [static] |
int global_logmask = -1 [static] |
char hostname[MAXHOSTNAMELEN] [static] |
Definition at line 93 of file logger.c.
Referenced by ast_remotecontrol(), cli_prompt(), iax2_register(), main(), netconsole(), set_destination(), and sip_register().
char* levels[] [static] |
struct ast_threadstorage log_buf = { .once = { PTHREAD_ONCE_INIT } , .key_init = log_buf_init , } [static] |
struct { ... } logfiles [static] |
Referenced by ast_log(), init_logger(), init_logger_chain(), and reload_logger().
char logger_reload_help[] [static] |
char logger_rotate_help[] [static] |
char logger_show_channels_help[] [static] |
FILE* qlog [static] |
Definition at line 114 of file logger.c.
Referenced by ast_queue_log(), close_logger(), init_logger(), and reload_logger().
int syslog_level_map[] [static] |
struct ast_threadstorage verbose_buf = { .once = { PTHREAD_ONCE_INIT } , .key_init = verbose_buf_init , } [static] |