#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 827 of file logger.c.
References ast_calloc, ast_log(), free, and LOG_WARNING.
00829 { 00830 #ifdef linux 00831 #ifdef AST_DEVMODE 00832 int count=0, i=0; 00833 void **addresses; 00834 char **strings; 00835 00836 if ((addresses = ast_calloc(MAX_BACKTRACE_FRAMES, sizeof(*addresses)))) { 00837 count = backtrace(addresses, MAX_BACKTRACE_FRAMES); 00838 if ((strings = backtrace_symbols(addresses, count))) { 00839 ast_log(LOG_DEBUG, "Got %d backtrace record%c\n", count, count != 1 ? 's' : ' '); 00840 for (i=0; i < count ; i++) { 00841 #if __WORDSIZE == 32 00842 ast_log(LOG_DEBUG, "#%d: [%08X] %s\n", i, (unsigned int)addresses[i], strings[i]); 00843 #elif __WORDSIZE == 64 00844 ast_log(LOG_DEBUG, "#%d: [%016lX] %s\n", i, (unsigned long)addresses[i], strings[i]); 00845 #endif 00846 } 00847 free(strings); 00848 } else { 00849 ast_log(LOG_DEBUG, "Could not allocate memory for backtrace\n"); 00850 } 00851 free(addresses); 00852 } 00853 #else 00854 ast_log(LOG_WARNING, "Must run configure with '--enable-dev-mode' for stack backtraces.\n"); 00855 #endif 00856 #else /* ndef linux */ 00857 ast_log(LOG_WARNING, "Inline stack backtraces are only available on the Linux platform.\n"); 00858 #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 686 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_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_t38_sdp(), 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_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_interpret(), ast_feature_request_and_dial(), ast_filehelper(), ast_find_ourip(), 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_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_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_tw(), 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_tw(), 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_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_metric(), calc_rxstamp(), calc_timestamp(), callback_deprecated(), callerid_feed(), callerid_feed_jp(), callerid_get_dtmf(), callerid_read(), callerid_write(), 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(), custom_log(), custom_prepare(), cut_internal(), dahdi_answer(), 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_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(), 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_mohbyname(), get_range(), get_rdnis(), get_refer_info(), get_sip_pvt_byid_locked(), get_timerange(), get_token(), 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_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(), 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_exec(), 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(), 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(), 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_text_line(), profile_set_param(), progress(), purge_old_messages(), ql_exec(), queue_exec(), queue_function_queuemembercount(), queue_function_queuememberlist(), queue_function_queuewaitingcount(), queue_set_param(), queue_transfer_fixup(), quit_handler(), 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(), 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(), saycharstr(), sayfile(), saynum(), scan_service(), scan_thread(), 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_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(), 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_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().
00688 { 00689 struct logchannel *chan; 00690 struct ast_dynamic_str *buf; 00691 time_t t; 00692 struct tm tm; 00693 char date[256]; 00694 00695 va_list ap; 00696 00697 if (!(buf = ast_dynamic_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) 00698 return; 00699 00700 if (AST_LIST_EMPTY(&logchannels)) 00701 { 00702 /* 00703 * we don't have the logger chain configured yet, 00704 * so just log to stdout 00705 */ 00706 if (level != __LOG_VERBOSE) { 00707 int res; 00708 va_start(ap, fmt); 00709 res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); 00710 va_end(ap); 00711 if (res != AST_DYNSTR_BUILD_FAILED) { 00712 term_filter_escapes(buf->str); 00713 fputs(buf->str, stdout); 00714 } 00715 } 00716 return; 00717 } 00718 00719 /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug 00720 are non-zero; LOG_DEBUG messages can still be displayed if option_debug 00721 is zero, if option_verbose is non-zero (this allows for 'level zero' 00722 LOG_DEBUG messages to be displayed, if the logmask on any channel 00723 allows it) 00724 */ 00725 if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) 00726 return; 00727 00728 /* Ignore anything that never gets logged anywhere */ 00729 if (!(global_logmask & (1 << level))) 00730 return; 00731 00732 /* Ignore anything other than the currently debugged file if there is one */ 00733 if ((level == __LOG_DEBUG) && !ast_strlen_zero(debug_filename) && strcasecmp(debug_filename, file)) 00734 return; 00735 00736 time(&t); 00737 ast_localtime(&t, &tm, NULL); 00738 strftime(date, sizeof(date), dateformat, &tm); 00739 00740 AST_LIST_LOCK(&logchannels); 00741 00742 if (logfiles.event_log && level == __LOG_EVENT) { 00743 va_start(ap, fmt); 00744 00745 fprintf(eventlog, "%s asterisk[%ld]: ", date, (long)getpid()); 00746 vfprintf(eventlog, fmt, ap); 00747 fflush(eventlog); 00748 00749 va_end(ap); 00750 AST_LIST_UNLOCK(&logchannels); 00751 return; 00752 } 00753 00754 AST_LIST_TRAVERSE(&logchannels, chan, list) { 00755 if (chan->disabled) 00756 break; 00757 /* Check syslog channels */ 00758 if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << level))) { 00759 va_start(ap, fmt); 00760 ast_log_vsyslog(level, file, line, function, fmt, ap); 00761 va_end(ap); 00762 /* Console channels */ 00763 } else if ((chan->logmask & (1 << level)) && (chan->type == LOGTYPE_CONSOLE)) { 00764 char linestr[128]; 00765 char tmp1[80], tmp2[80], tmp3[80], tmp4[80]; 00766 00767 if (level != __LOG_VERBOSE) { 00768 int res; 00769 sprintf(linestr, "%d", line); 00770 ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, 00771 "[%s] %s[%ld]: %s:%s %s: ", 00772 date, 00773 term_color(tmp1, levels[level], colors[level], 0, sizeof(tmp1)), 00774 (long)GETTID(), 00775 term_color(tmp2, file, COLOR_BRWHITE, 0, sizeof(tmp2)), 00776 term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), 00777 term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4))); 00778 /*filter to the console!*/ 00779 term_filter_escapes(buf->str); 00780 ast_console_puts_mutable(buf->str); 00781 00782 va_start(ap, fmt); 00783 res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); 00784 va_end(ap); 00785 if (res != AST_DYNSTR_BUILD_FAILED) 00786 ast_console_puts_mutable(buf->str); 00787 } 00788 /* File channels */ 00789 } else if ((chan->logmask & (1 << level)) && (chan->fileptr)) { 00790 int res; 00791 ast_dynamic_str_thread_set(&buf, BUFSIZ, &log_buf, 00792 "[%s] %s[%ld] %s: ", 00793 date, levels[level], (long)GETTID(), file); 00794 res = fprintf(chan->fileptr, "%s", buf->str); 00795 if (res <= 0 && !ast_strlen_zero(buf->str)) { /* Error, no characters printed */ 00796 fprintf(stderr,"**** Asterisk Logging Error: ***********\n"); 00797 if (errno == ENOMEM || errno == ENOSPC) { 00798 fprintf(stderr, "Asterisk logging error: Out of disk space, can't log to log file %s\n", chan->filename); 00799 } else 00800 fprintf(stderr, "Logger Warning: Unable to write to log file '%s': %s (disabled)\n", chan->filename, strerror(errno)); 00801 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: No\r\nReason: %d - %s\r\n", chan->filename, errno, strerror(errno)); 00802 chan->disabled = 1; 00803 } else { 00804 int res; 00805 /* No error message, continue printing */ 00806 va_start(ap, fmt); 00807 res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap); 00808 va_end(ap); 00809 if (res != AST_DYNSTR_BUILD_FAILED) { 00810 term_strip(buf->str, buf->str, buf->len); 00811 fputs(buf->str, chan->fileptr); 00812 fflush(chan->fileptr); 00813 } 00814 } 00815 } 00816 } 00817 00818 AST_LIST_UNLOCK(&logchannels); 00819 00820 if (filesize_reload_needed) { 00821 reload_logger(1); 00822 ast_log(LOG_EVENT,"Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); 00823 if (option_verbose) 00824 ast_verbose("Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); 00825 }
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 657 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_VERBOSE, GETTID, levels, s, SYSLOG_NLEVELS, and term_strip().
Referenced by ast_log().
00659 { 00660 char buf[BUFSIZ]; 00661 char *s; 00662 00663 if (level >= SYSLOG_NLEVELS) { 00664 /* we are locked here, so cannot ast_log() */ 00665 fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", level); 00666 return; 00667 } 00668 if (level == __LOG_VERBOSE) { 00669 snprintf(buf, sizeof(buf), "VERBOSE[%ld]: ", (long)GETTID()); 00670 level = __LOG_DEBUG; 00671 } else if (level == __LOG_DTMF) { 00672 snprintf(buf, sizeof(buf), "DTMF[%ld]: ", (long)GETTID()); 00673 level = __LOG_DEBUG; 00674 } else { 00675 snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: ", 00676 levels[level], (long)GETTID(), file, line, function); 00677 } 00678 s = buf + strlen(buf); 00679 vsnprintf(s, sizeof(buf) - strlen(buf), fmt, args); 00680 term_strip(s, s, strlen(s) + 1); 00681 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 352 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(), try_calling(), and wait_our_turn().
00354 { 00355 va_list ap; 00356 AST_LIST_LOCK(&logchannels); 00357 if (qlog) { 00358 va_start(ap, fmt); 00359 fprintf(qlog, "%ld|%s|%s|%s|%s|", (long)time(NULL), callid, queuename, agent, event); 00360 vfprintf(qlog, fmt, ap); 00361 fprintf(qlog, "\n"); 00362 va_end(ap); 00363 fflush(qlog); 00364 } 00365 AST_LIST_UNLOCK(&logchannels);
int ast_register_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 906 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().
00908 { 00909 struct verb *verb; 00910 00911 if (!(verb = ast_malloc(sizeof(*verb)))) 00912 return -1; 00913 00914 verb->verboser = v; 00915 00916 AST_LIST_LOCK(&verbosers); 00917 AST_LIST_INSERT_HEAD(&verbosers, verb, list); 00918 AST_LIST_UNLOCK(&verbosers); 00919 00920 return 0;
int ast_unregister_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 922 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().
00924 { 00925 struct verb *cur; 00926 00927 AST_LIST_LOCK(&verbosers); 00928 AST_LIST_TRAVERSE_SAFE_BEGIN(&verbosers, cur, list) { 00929 if (cur->verboser == v) { 00930 AST_LIST_REMOVE_CURRENT(&verbosers, list); 00931 free(cur); 00932 break; 00933 } 00934 } 00935 AST_LIST_TRAVERSE_SAFE_END 00936 AST_LIST_UNLOCK(&verbosers); 00937 00938 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 860 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_interpret(), 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_read(), 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_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(), 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().
00862 { 00863 struct verb *v; 00864 struct ast_dynamic_str *buf; 00865 int res; 00866 va_list ap; 00867 00868 if (ast_opt_timestamp) { 00869 time_t t; 00870 struct tm tm; 00871 char date[40]; 00872 char *datefmt; 00873 00874 time(&t); 00875 ast_localtime(&t, &tm, NULL); 00876 strftime(date, sizeof(date), dateformat, &tm); 00877 datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1); 00878 sprintf(datefmt, "%c[%s] %s", 127, date, fmt); 00879 fmt = datefmt; 00880 } else { 00881 char *tmp = alloca(strlen(fmt) + 2); 00882 sprintf(tmp, "%c%s", 127, fmt); 00883 fmt = tmp; 00884 } 00885 00886 if (!(buf = ast_dynamic_str_thread_get(&verbose_buf, VERBOSE_BUF_INIT_SIZE))) 00887 return; 00888 00889 va_start(ap, fmt); 00890 res = ast_dynamic_str_thread_set_va(&buf, 0, &verbose_buf, fmt, ap); 00891 va_end(ap); 00892 00893 if (res == AST_DYNSTR_BUILD_FAILED) 00894 return; 00895 00896 /* filter out possibly hazardous escape sequences */ 00897 term_filter_escapes(buf->str); 00898 00899 AST_LIST_LOCK(&verbosers); 00900 AST_LIST_TRAVERSE(&verbosers, v, list) 00901 v->verboser(buf->str); 00902 AST_LIST_UNLOCK(&verbosers); 00903 00904 ast_log(LOG_VERBOSE, "%s", buf->str + 1);
void close_logger | ( | void | ) |
Provided by logger.c
Definition at line 627 of file logger.c.
References AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, eventlog, f, logchannel::list, and qlog.
Referenced by quit_handler().
00629 { 00630 struct logchannel *f; 00631 00632 AST_LIST_LOCK(&logchannels); 00633 00634 if (eventlog) { 00635 fclose(eventlog); 00636 eventlog = NULL; 00637 } 00638 00639 if (qlog) { 00640 fclose(qlog); 00641 qlog = NULL; 00642 } 00643 00644 AST_LIST_TRAVERSE(&logchannels, f, list) { 00645 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00646 fclose(f->fileptr); 00647 f->fileptr = NULL; 00648 } 00649 } 00650 00651 closelog(); /* syslog */ 00652 00653 AST_LIST_UNLOCK(&logchannels); 00654 00655 return;
static int handle_logger_reload | ( | int | fd, | |
int | argc, | |||
char * | argv[] | |||
) | [static] |
Definition at line 494 of file logger.c.
References ast_cli(), logger_reload(), and RESULT_FAILURE.
00496 { 00497 int result = logger_reload(); 00498 if (result == RESULT_FAILURE) 00499 ast_cli(fd, "Failed to reload the logger\n"); 00500 return result;
static int handle_logger_rotate | ( | int | fd, | |
int | argc, | |||
char * | argv[] | |||
) | [static] |
Definition at line 502 of file logger.c.
References ast_cli(), reload_logger(), RESULT_FAILURE, and RESULT_SUCCESS.
00504 { 00505 if(reload_logger(1)) { 00506 ast_cli(fd, "Failed to reload the logger and rotate log files\n"); 00507 return RESULT_FAILURE; 00508 } 00509 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 512 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.
00514 { 00515 #define FORMATL "%-35.35s %-8.8s %-9.9s " 00516 struct logchannel *chan; 00517 00518 ast_cli(fd,FORMATL, "Channel", "Type", "Status"); 00519 ast_cli(fd, "Configuration\n"); 00520 ast_cli(fd,FORMATL, "-------", "----", "------"); 00521 ast_cli(fd, "-------------\n"); 00522 AST_LIST_LOCK(&logchannels); 00523 AST_LIST_TRAVERSE(&logchannels, chan, list) { 00524 ast_cli(fd, FORMATL, chan->filename, chan->type==LOGTYPE_CONSOLE ? "Console" : (chan->type==LOGTYPE_SYSLOG ? "Syslog" : "File"), 00525 chan->disabled ? "Disabled" : "Enabled"); 00526 ast_cli(fd, " - "); 00527 if (chan->logmask & (1 << __LOG_DEBUG)) 00528 ast_cli(fd, "Debug "); 00529 if (chan->logmask & (1 << __LOG_DTMF)) 00530 ast_cli(fd, "DTMF "); 00531 if (chan->logmask & (1 << __LOG_VERBOSE)) 00532 ast_cli(fd, "Verbose "); 00533 if (chan->logmask & (1 << __LOG_WARNING)) 00534 ast_cli(fd, "Warning "); 00535 if (chan->logmask & (1 << __LOG_NOTICE)) 00536 ast_cli(fd, "Notice "); 00537 if (chan->logmask & (1 << __LOG_ERROR)) 00538 ast_cli(fd, "Error "); 00539 if (chan->logmask & (1 << __LOG_EVENT)) 00540 ast_cli(fd, "Event "); 00541 ast_cli(fd, "\n"); 00542 } 00543 AST_LIST_UNLOCK(&logchannels); 00544 ast_cli(fd, "\n"); 00545 00546 return RESULT_SUCCESS;
static int handle_SIGXFSZ | ( | int | sig | ) | [static] |
Definition at line 581 of file logger.c.
Referenced by init_logger().
00583 { 00584 /* Indicate need to reload */ 00585 filesize_reload_needed = 1; 00586 return 0;
int init_logger | ( | void | ) |
Provided by logger.c
Definition at line 588 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().
00590 { 00591 char tmp[256]; 00592 int res = 0; 00593 00594 /* auto rotate if sig SIGXFSZ comes a-knockin */ 00595 (void) signal(SIGXFSZ,(void *) handle_SIGXFSZ); 00596 00597 /* register the logger cli commands */ 00598 ast_cli_register_multiple(cli_logger, sizeof(cli_logger) / sizeof(struct ast_cli_entry)); 00599 00600 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00601 00602 /* create log channels */ 00603 init_logger_chain(); 00604 00605 /* create the eventlog */ 00606 if (logfiles.event_log) { 00607 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00608 snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); 00609 eventlog = fopen((char *)tmp, "a"); 00610 if (eventlog) { 00611 ast_log(LOG_EVENT, "Started Asterisk Event Logger\n"); 00612 if (option_verbose) 00613 ast_verbose("Asterisk Event Logger Started %s\n",(char *)tmp); 00614 } else { 00615 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 00616 res = -1; 00617 } 00618 } 00619 00620 if (logfiles.queue_log) { 00621 snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, QUEUELOG); 00622 qlog = fopen(tmp, "a"); 00623 ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", ""); 00624 } 00625 return res;
static void init_logger_chain | ( | void | ) | [static] |
Definition at line 283 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().
00285 { 00286 struct logchannel *chan; 00287 struct ast_config *cfg; 00288 struct ast_variable *var; 00289 const char *s; 00290 00291 /* delete our list of log channels */ 00292 AST_LIST_LOCK(&logchannels); 00293 while ((chan = AST_LIST_REMOVE_HEAD(&logchannels, list))) 00294 free(chan); 00295 AST_LIST_UNLOCK(&logchannels); 00296 00297 global_logmask = 0; 00298 errno = 0; 00299 /* close syslog */ 00300 closelog(); 00301 00302 cfg = ast_config_load("logger.conf"); 00303 00304 /* If no config file, we're fine, set default options. */ 00305 if (!cfg) { 00306 if (errno) 00307 fprintf(stderr, "Unable to open logger.conf: %s; default settings will be used.\n", strerror(errno)); 00308 else 00309 fprintf(stderr, "Errors detected in logger.conf: see above; default settings will be used.\n"); 00310 if (!(chan = ast_calloc(1, sizeof(*chan)))) 00311 return; 00312 chan->type = LOGTYPE_CONSOLE; 00313 chan->logmask = 28; /*warning,notice,error */ 00314 AST_LIST_LOCK(&logchannels); 00315 AST_LIST_INSERT_HEAD(&logchannels, chan, list); 00316 AST_LIST_UNLOCK(&logchannels); 00317 global_logmask |= chan->logmask; 00318 return; 00319 } 00320 00321 if ((s = ast_variable_retrieve(cfg, "general", "appendhostname"))) { 00322 if (ast_true(s)) { 00323 if (gethostname(hostname, sizeof(hostname) - 1)) { 00324 ast_copy_string(hostname, "unknown", sizeof(hostname)); 00325 ast_log(LOG_WARNING, "What box has no hostname???\n"); 00326 } 00327 } else 00328 hostname[0] = '\0'; 00329 } else 00330 hostname[0] = '\0'; 00331 if ((s = ast_variable_retrieve(cfg, "general", "dateformat"))) 00332 ast_copy_string(dateformat, s, sizeof(dateformat)); 00333 else 00334 ast_copy_string(dateformat, "%b %e %T", sizeof(dateformat)); 00335 if ((s = ast_variable_retrieve(cfg, "general", "queue_log"))) 00336 logfiles.queue_log = ast_true(s); 00337 if ((s = ast_variable_retrieve(cfg, "general", "event_log"))) 00338 logfiles.event_log = ast_true(s); 00339 00340 AST_LIST_LOCK(&logchannels); 00341 var = ast_variable_browse(cfg, "logfiles"); 00342 for (; var; var = var->next) { 00343 if (!(chan = make_logchannel(var->name, var->value, var->lineno))) 00344 continue; 00345 AST_LIST_INSERT_HEAD(&logchannels, chan, list); 00346 global_logmask |= chan->logmask; 00347 } 00348 AST_LIST_UNLOCK(&logchannels); 00349 00350 ast_config_destroy(cfg);
int logger_reload | ( | void | ) |
Reload logger without rotating log files.
Definition at line 487 of file logger.c.
References reload_logger(), RESULT_FAILURE, and RESULT_SUCCESS.
Referenced by handle_logger_reload().
00489 { 00490 if(reload_logger(0)) 00491 return RESULT_FAILURE; 00492 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_copy_string(), 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 (channel[0] == '/') { 00261 if(!ast_strlen_zero(hostname)) { 00262 snprintf(chan->filename, sizeof(chan->filename) - 1,"%s.%s", channel, hostname); 00263 } else { 00264 ast_copy_string(chan->filename, channel, sizeof(chan->filename)); 00265 } 00266 } 00267 00268 if(!ast_strlen_zero(hostname)) { 00269 snprintf(chan->filename, sizeof(chan->filename), "%s/%s.%s",(char *)ast_config_AST_LOG_DIR, channel, hostname); 00270 } else { 00271 snprintf(chan->filename, sizeof(chan->filename), "%s/%s", (char *)ast_config_AST_LOG_DIR, channel); 00272 } 00273 chan->fileptr = fopen(chan->filename, "a"); 00274 if (!chan->fileptr) { 00275 /* Can't log here, since we're called with a lock */ 00276 fprintf(stderr, "Logger Warning: Unable to open log file '%s': %s\n", chan->filename, strerror(errno)); 00277 } 00278 chan->type = LOGTYPE_FILE; 00279 } 00280 chan->logmask = make_components(components, lineno); 00281 return chan;
int reload_logger | ( | int | ) |
Provided by logger.c
Definition at line 367 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().
00369 { 00370 char old[PATH_MAX] = ""; 00371 char new[PATH_MAX]; 00372 int event_rotate = rotate, queue_rotate = rotate; 00373 struct logchannel *f; 00374 FILE *myf; 00375 int x, res = 0; 00376 00377 AST_LIST_LOCK(&logchannels); 00378 00379 if (eventlog) 00380 fclose(eventlog); 00381 else 00382 event_rotate = 0; 00383 eventlog = NULL; 00384 00385 if (qlog) 00386 fclose(qlog); 00387 else 00388 queue_rotate = 0; 00389 qlog = NULL; 00390 00391 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00392 00393 AST_LIST_TRAVERSE(&logchannels, f, list) { 00394 if (f->disabled) { 00395 f->disabled = 0; /* Re-enable logging at reload */ 00396 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: Yes\r\n", f->filename); 00397 } 00398 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00399 fclose(f->fileptr); /* Close file */ 00400 f->fileptr = NULL; 00401 if (rotate) { 00402 ast_copy_string(old, f->filename, sizeof(old)); 00403 00404 for (x = 0; ; x++) { 00405 snprintf(new, sizeof(new), "%s.%d", f->filename, x); 00406 myf = fopen((char *)new, "r"); 00407 if (myf) 00408 fclose(myf); 00409 else 00410 break; 00411 } 00412 00413 /* do it */ 00414 if (rename(old,new)) 00415 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); 00416 } 00417 } 00418 } 00419 00420 filesize_reload_needed = 0; 00421 00422 init_logger_chain(); 00423 00424 if (logfiles.event_log) { 00425 snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); 00426 if (event_rotate) { 00427 for (x=0;;x++) { 00428 snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x); 00429 myf = fopen((char *)new, "r"); 00430 if (myf) /* File exists */ 00431 fclose(myf); 00432 else 00433 break; 00434 } 00435 00436 /* do it */ 00437 if (rename(old,new)) 00438 ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new); 00439 } 00440 00441 eventlog = fopen(old, "a"); 00442 if (eventlog) { 00443 ast_log(LOG_EVENT, "Restarted Asterisk Event Logger\n"); 00444 if (option_verbose) 00445 ast_verbose("Asterisk Event Logger restarted\n"); 00446 } else { 00447 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 00448 res = -1; 00449 } 00450 } 00451 00452 if (logfiles.queue_log) { 00453 snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, QUEUELOG); 00454 if (queue_rotate) { 00455 for (x = 0; ; x++) { 00456 snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, QUEUELOG, x); 00457 myf = fopen((char *)new, "r"); 00458 if (myf) /* File exists */ 00459 fclose(myf); 00460 else 00461 break; 00462 } 00463 00464 /* do it */ 00465 if (rename(old, new)) 00466 ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new); 00467 } 00468 00469 qlog = fopen(old, "a"); 00470 if (qlog) { 00471 ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", ""); 00472 ast_log(LOG_EVENT, "Restarted Asterisk Queue Logger\n"); 00473 if (option_verbose) 00474 ast_verbose("Asterisk Queue Logger restarted\n"); 00475 } else { 00476 ast_log(LOG_ERROR, "Unable to create queue log: %s\n", strerror(errno)); 00477 res = -1; 00478 } 00479 } 00480 00481 AST_LIST_UNLOCK(&logchannels); 00482 00483 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] |