Thu May 14 14:50:03 2009

Asterisk developer's documentation


logger.c File Reference

Asterisk Logger. More...

#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 logchannelmake_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 , }


Detailed Description

Asterisk Logger.

Logging routines

Author:
Mark Spencer <markster@digium.com>

Definition in file logger.c.


Define Documentation

#define FORMATL   "%-35.35s %-8.8s %-9.9s "

Referenced by handle_logger_show_channels().

 
#define GETTID (  )     getpid()

Definition at line 79 of file logger.c.

Referenced by ast_log(), and ast_log_vsyslog().

#define LOG_BUF_INIT_SIZE   128

Definition at line 140 of file logger.c.

Referenced by ast_log().

#define SYSLOG_NAMES

Definition at line 46 of file logger.c.

#define SYSLOG_NLEVELS   sizeof(syslog_level_map) / sizeof(int)

Definition at line 60 of file logger.c.

Referenced by ast_log_vsyslog().

#define VERBOSE_BUF_INIT_SIZE   128

Definition at line 137 of file logger.c.

Referenced by ast_verbose().


Enumeration Type Documentation

enum logtypes

Enumerator:
LOGTYPE_SYSLOG 
LOGTYPE_FILE 
LOGTYPE_CONSOLE 

Definition at line 95 of file logger.c.

00096               {
00097    LOGTYPE_SYSLOG,
00098    LOGTYPE_FILE,
00099    LOGTYPE_CONSOLE,


Function Documentation

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.

Parameters:
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);

static void log_buf_init ( void   )  [static]

Definition at line 139 of file logger.c.

00144 {

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;

static void verbose_buf_init ( void   )  [static]

Definition at line 136 of file logger.c.

00144 {


Variable Documentation

struct ast_cli_entry cli_logger[] [static]

Definition at line 567 of file logger.c.

Referenced by init_logger().

int colors[] [static]

Definition at line 126 of file logger.c.

Referenced by ast_log().

char dateformat[256] = "%b %e %T" [static]

Definition at line 83 of file logger.c.

unsigned int event_log

Definition at line 90 of file logger.c.

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]

Definition at line 85 of file logger.c.

int global_logmask = -1 [static]

Definition at line 86 of file logger.c.

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]

Definition at line 116 of file logger.c.

Referenced by ast_log(), and ast_log_vsyslog().

struct ast_threadstorage log_buf = { .once = PTHREAD_ONCE_INIT, .key_init = log_buf_init , } [static]

Definition at line 139 of file logger.c.

Referenced by ast_log().

struct { ... } logfiles [static]

Referenced by ast_log(), init_logger(), init_logger_chain(), and reload_logger().

char logger_reload_help[] [static]

Initial value:

"Usage: logger reload\n"
"       Reloads the logger subsystem state.  Use after restarting syslogd(8) if you are using syslog logging.\n"

Definition at line 555 of file logger.c.

char logger_rotate_help[] [static]

Initial value:

"Usage: logger rotate\n"
"       Rotates and Reopens the log files.\n"

Definition at line 559 of file logger.c.

char logger_show_channels_help[] [static]

Initial value:

"Usage: logger show channels\n"
"       List configured logger channels.\n"

Definition at line 563 of file logger.c.

FILE* qlog [static]

Definition at line 114 of file logger.c.

Referenced by ast_queue_log(), close_logger(), init_logger(), and reload_logger().

unsigned int queue_log

Definition at line 89 of file logger.c.

int syslog_level_map[] [static]

Definition at line 50 of file logger.c.

struct ast_threadstorage verbose_buf = { .once = PTHREAD_ONCE_INIT, .key_init = verbose_buf_init , } [static]

Definition at line 136 of file logger.c.

Referenced by ast_verbose().


Generated on Thu May 14 14:50:03 2009 for Asterisk - the Open Source PBX by  doxygen 1.4.7