Sun Dec 18 20:55:52 2011

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"

Include dependency graph for logger.c:

Go to the source code of this file.

Data Structures

struct  logchannel
struct  verb

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)
static AST_LIST_HEAD_STATIC (verbosers, verb)
static AST_LIST_HEAD_STATIC (logchannels, logchannel)
void ast_log (int level, const char *file, int line, const char *function, const char *fmt,...)
 send log messages to syslog and/or the console
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))
 AST_THREADSTORAGE (log_buf, log_buf_init)
 AST_THREADSTORAGE (verbose_buf, verbose_buf_init)
int ast_unregister_verbose (void(*v)(const char *string))
void ast_verbose (const char *fmt,...)
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)
int logger_reload (void)
 Reload the logger module without rotating log files (also used from loader.c during a full Asterisk reload).
static int make_components (char *s, int lineno)
static struct logchannelmake_logchannel (char *channel, char *components, int lineno)
int reload_logger (int rotate)

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 []
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 []


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 "

 
#define GETTID (  )     getpid()

Definition at line 80 of file logger.c.

Referenced by ast_log(), and ast_log_vsyslog().

#define LOG_BUF_INIT_SIZE   128

Definition at line 141 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 138 of file logger.c.

Referenced by ast_verbose().


Enumeration Type Documentation

enum logtypes

Enumerator:
LOGTYPE_SYSLOG 
LOGTYPE_FILE 
LOGTYPE_CONSOLE 

Definition at line 96 of file logger.c.

00096               {
00097    LOGTYPE_SYSLOG,
00098    LOGTYPE_FILE,
00099    LOGTYPE_CONSOLE,
00100 };


Function Documentation

void ast_backtrace ( void   ) 

Definition at line 828 of file logger.c.

References ast_calloc, ast_log(), free, LOG_DEBUG, 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
00859 }

static AST_LIST_HEAD_STATIC ( verbosers  ,
verb   
) [static]

static AST_LIST_HEAD_STATIC ( logchannels  ,
logchannel   
) [static]

void ast_log ( int  level,
const char *  file,
int  line,
const char *  function,
const char *  fmt,
  ... 
)

send log messages to syslog and/or the console

Definition at line 687 of file logger.c.

References __LOG_DEBUG, __LOG_EVENT, __LOG_VERBOSE, ast_console_puts_mutable(), ast_dynamic_str_thread_set_va, AST_LIST_EMPTY, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_localtime(), 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, levels, LOG_BUF_INIT_SIZE, LOG_EVENT, logfiles, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_SYSLOG, manager_event(), option_debug, option_verbose, reload_logger(), 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_device_state_changed_literal(), __ast_dsp_call_progress(), __ast_encrypt_bin(), __ast_format_register(), __ast_http_load(), __ast_pbx_run(), __ast_play_and_record(), __ast_read(), __ast_register_translator(), __ast_request_and_dial_uniqueid(), __ast_sign_bin(), __ast_smoother_feed(), __attempt_transmit(), __auto_congest(), __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(), __sip_ack(), __sip_autodestruct(), __sip_destroy(), __sip_pretend_ack(), __sip_reliable_xmit(), __sip_semi_ack(), __sip_xmit(), __transmit_response(), __unload_module(), __zt_exception(), _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_sprintf(), acf_strftime(), acf_strptime(), ack_trans(), action_bridge(), action_devstate(), action_waitevent(), add_agent(), add_codec_to_answer(), add_extensions(), 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(), 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_card_init(), alsa_indicate(), alsa_new(), alsa_read(), alsa_request(), alsa_write(), answer_call(), anti_injection(), ao2_callback(), ao2_ref(), app_exec(), app_zapEC(), 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_autoanswer_login(), ast_autoservice_start(), ast_backtrace(), ast_best_codec(), ast_bridge_call(), ast_bridge_call_thread(), ast_builtins_init(), ast_cdr_alloc(), ast_cdr_detach(), ast_cdr_end(), ast_cdr_engine_init(), ast_cdr_free(), 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_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_generic_bridge(), ast_get_channel_tech(), ast_get_enum(), ast_get_group(), ast_get_holded_call(), ast_get_indication_zone(), ast_get_ip_or_srv(), ast_get_txt(), ast_hangup(), ast_hold_call(), 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_lookup_iface(), ast_makesocket(), ast_manager_register_struct(), ast_masq_autoanswer_login(), ast_masq_hold_call(), ast_masq_park_call(), ast_merge_contexts_and_delete(), ast_module_reload(), ast_moh_destroy_one(), 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_uniqueid(), ast_pbx_outgoing_exten_uniqueid(), ast_pbx_run_app(), ast_pbx_start(), ast_pickup_call(), ast_playtones_start(), ast_prod(), ast_pthread_create_stack(), ast_queue_frame(), 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_with_uniqueid(), ast_retrieve_call(), ast_retrieve_call_to_death(), ast_rtcp_new(), ast_rtcp_read(), ast_rtcp_write_rr(), ast_rtcp_write_sr(), ast_rtp_bridge(), 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_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_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_read_frame_both(), auth_exec(), authenticate(), authenticate_verify(), auto_congest(), autoanswer_exec(), autoanswer_login_exec(), autoanswer_reregister_extensions(), autoservice_run(), available(), background_detect_exec(), base64_decode(), base64_encode(), base_encode(), bridge_exec(), bridge_native_loop(), bridge_p2p_loop(), bridge_p2p_rtp_write(), build_alias(), build_channels(), build_conf(), build_device(), build_gateway(), build_mapping(), build_peer(), build_reply_digest(), build_route(), build_rpid(), build_transactions(), build_user(), builtin_atxfer(), 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(), chanspychan_exec(), check_abstract_reference(), 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_switch_expr(), check_timerange(), check_tx_freq(), check_user_full(), check_via(), checkmd5(), cleanup_connection(), clear_caller(), clearcbone(), cleardisplay(), clearflag(), cleartimer(), close_mailbox(), 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_transfer(), compress_subclass(), conf_add(), conf_del(), conf_exec(), 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(), dbinit(), deadagi_exec(), decode_frame(), decode_length(), del_exec(), deltree_exec(), destroy_pval_item(), destroy_session(), destroy_trans(), determine_firstline_parts(), devstate_cli(), devstate_exec(), devstate_write(), dictate_exec(), digitcollect(), digitdirect(), directory_exec(), disa_exec(), diskavail(), display_nat_warning(), dns_parse_answer(), dnsmgr_init(), dnsmgr_refresh(), do_autoanswer_thread(), do_autokill(), do_cdr(), do_directory(), do_dtmf_local(), do_esel_thread(), do_message(), 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(), ds_devicestate(), 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_prop_precache(), dundi_query(), dundi_query_thread(), dundi_rexmit(), dundi_send(), dundi_xmit(), dundifunc_read(), eagi_exec(), encrypt_frame(), enum_callback(), esel_queue_extension_state(), exec_exec(), 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_engine(), find_line_by_instance(), find_line_by_name(), find_matching_endwhile(), 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_tpeer(), find_transaction(), 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(), 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_http_callback(), 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_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_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_bridge(), 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(), import_ch(), increase_call_count(), ind_load_module(), indexof(), 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(), listener(), load_config(), load_config_meetme(), load_module(), load_modules(), load_moh_classes(), load_odbc_config(), load_pbx(), load_realtime_queue(), load_resource(), load_rpt_vars(), local_alloc(), local_answer(), local_attended_transfer(), 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(), 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_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_load_module(), my_pickup_call(), my_pickup_channel(), my_zt_write(), 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(), 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_saynumber(), 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(), pickupchan_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(), post_cdr(), powerof(), pqm_exec(), precache_trans(), precache_transactions(), printdigest(), privacy_exec(), process_ast_dsp(), process_cisco_dtmf(), process_message(), process_my_load_module(), process_opcode(), process_returncode(), process_rfc2833(), process_rfc3389(), process_sdp(), process_text_line(), process_zap(), profile_set_param(), progress(), purge_old_messages(), ql_exec(), queue_exec(), queue_function_qac(), queue_function_queuememberlist(), queue_function_queuewaitingcount(), queue_set_param(), 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_peer(), realtime_pgsql(), realtime_update_exec(), realtime_user(), 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_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_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_settime(), sched_thread(), schedule_delivery(), send_callerid(), send_delay(), send_digit_to_chan(), send_dtmf(), 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_address_from_contact(), 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(), setcallerid_exec(), setcallerid_pres_exec(), setcdruserfield_exec(), setflag(), setformat(), setrem(), settransfercapability_exec(), setup_incoming_call(), setup_rtp_connection(), setup_zap(), 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(), sms_exec(), sms_generate(), sms_handleincoming(), sms_process(), sms_readfile(), sms_writefile(), socket_process(), socket_read(), softhangup_exec(), sound_thread(), soundcard_init(), soundcard_writeframe(), spawn_dp_lookup(), spawn_mp3(), speex_get_wb_sz_at(), speex_samples(), speextolin_framein(), sqlite_log(), ss_thread(), start_network_thread(), start_spying(), starttimer(), stealchan_exec(), store_boost(), store_by_peercallno(), 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(), unalloc_sub(), unload_module(), unwrap_timestamp(), update_call_counter(), update_common_options(), update_conf(), 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_read(), wav_write(), write_header(), write_metadata(), writefile(), xagi_exec(), zap_destroy(), zap_fake_event(), zap_framein(), zap_frameout(), zap_restart(), zap_show_channel(), zap_show_status(), zap_translate(), zapras_exec(), zt_answer(), zt_bridge(), zt_call(), zt_callwait(), zt_confmute(), zt_digit_begin(), zt_digit_end(), zt_disable_ec(), zt_enable_ec(), zt_fixup(), zt_get_index(), zt_handle_dtmfup(), zt_handle_event(), zt_hangup(), zt_indicate(), zt_link(), zt_new(), zt_open(), zt_read(), zt_request(), zt_ring_phone(), zt_sendmessage(), zt_set_hook(), zt_setoption(), zt_tdd_sendtext(), zt_train_ec(), zt_unlink(), and zt_write().

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    }
00826 }

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 658 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);
00682 }

void ast_queue_log ( const char *  queuename,
const char *  callid,
const char *  agent,
const char *  event,
const char *  fmt,
  ... 
)

Definition at line 353 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(), 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);
00366 }

int ast_register_verbose ( void(*)(const char *string)  v  ) 

Definition at line 907 of file logger.c.

References AST_LIST_INSERT_HEAD, AST_LIST_LOCK, AST_LIST_UNLOCK, ast_malloc, and verb::verboser.

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;
00921 }

AST_THREADSTORAGE ( log_buf  ,
log_buf_init   
)

AST_THREADSTORAGE ( verbose_buf  ,
verbose_buf_init   
)

int ast_unregister_verbose ( void(*)(const char *string)  v  ) 

Definition at line 923 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, 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;
00939 }

void ast_verbose ( const char *  fmt,
  ... 
)

Definition at line 861 of file logger.c.

References ast_dynamic_str_thread_set_va, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_localtime(), ast_log(), ast_opt_timestamp, LOG_VERBOSE, t, term_filter_escapes(), VERBOSE_BUF_INIT_SIZE, and verb::verboser.

Referenced by __agent_start_monitoring(), __ast_context_create(), __ast_format_register(), __ast_pbx_run(), __ast_play_and_record(), __ast_register_translator(), __login_exec(), __sip_destroy(), __unload_module(), __zt_exception(), _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(), app_zapEC(), append_mapping(), ast_add_extension2(), ast_aji_disconnect(), ast_app_has_voicemail(), ast_app_inboxcount(), ast_app_messagecount(), ast_autoanswer_login(), 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_holded_call(), 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_uniqueid(), ast_pbx_outgoing_exten_uniqueid(), ast_pbx_run_app(), ast_record_review(), ast_register_application(), ast_register_feature(), ast_register_indication_country(), ast_remotecontrol(), ast_retrieve_call(), ast_retrieve_call_to_death(), 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_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(), autoanswer_exec(), begin_dial(), bridge_p2p_rtp_write(), build_channels(), build_conf(), build_device(), build_gateway(), 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(), database_increment(), del_exec(), deltree_exec(), dialout(), dnsmgr_refresh(), do_autoanswer_thread(), do_holding_thread(), do_monitor(), do_parking_thread(), do_register_auth(), do_waiting(), dumpchan_exec(), dundi_debug_output(), exit_now(), find_command(), find_gtalk(), find_line_by_name(), find_subchannel_and_lock(), find_transcoders(), findmeexec(), flash_exec(), generic_http_callback(), 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_logger(), init_manager(), 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(), misdn_call(), mixmonitor_thread(), moh_alloc(), moh_files_alloc(), moh_files_release(), moh_register(), moh_release(), my_pickup_call(), my_pickup_channel(), 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(), privacy_exec(), process_ast_dsp(), process_message(), process_sdp(), process_zap(), 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(), rpt_exec(), 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_incoming_call(), setup_zap(), 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(), smdi_load(), sms_debug(), socket_process(), ss_thread(), start_network_thread(), store_config(), stun_handle_packet(), stun_process_attr(), timeout_write(), timing_read(), transmit_callinfo(), transmit_connect_with_sdp(), 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(), write_metadata(), zap_restart(), zapras_exec(), zt_bridge(), zt_call(), zt_handle_dtmfup(), zt_handle_event(), zt_hangup(), zt_read(), and zt_request().

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);
00905 }

void close_logger ( void   ) 

Provided by logger.c

Definition at line 628 of file logger.c.

References AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, eventlog, f, logchannel::fileptr, 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;
00656 }

static int handle_logger_reload ( int  fd,
int  argc,
char *  argv[] 
) [static]

Definition at line 495 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;
00501 }

static int handle_logger_rotate ( int  fd,
int  argc,
char *  argv[] 
) [static]

Definition at line 503 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;
00510 }

static int handle_logger_show_channels ( int  fd,
int  argc,
char *  argv[] 
) [static]

CLI command to show logging system configuration.

Definition at line 513 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::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;
00547 }

static int handle_SIGXFSZ ( int  sig  )  [static]

Definition at line 582 of file logger.c.

Referenced by init_logger().

00583 {
00584    /* Indicate need to reload */
00585    filesize_reload_needed = 1;
00586    return 0;
00587 }

int init_logger ( void   ) 

Provided by logger.c

Definition at line 589 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;
00626 }

static void init_logger_chain ( void   )  [static]

Definition at line 284 of file logger.c.

References ast_calloc, ast_config_destroy(), ast_config_load(), 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, ast_variable::lineno, LOG_WARNING, logfiles, logchannel::logmask, LOGTYPE_CONSOLE, make_logchannel(), ast_variable::name, ast_variable::next, s, logchannel::type, ast_variable::value, 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);
00351 }

int logger_reload ( void   ) 

Reload the logger module without rotating log files (also used from loader.c during a full Asterisk reload).

Reload logger without rotating log files.

Definition at line 488 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;
00493 }

static int make_components ( char *  s,
int  lineno 
) [static]

Definition at line 143 of file logger.c.

References __LOG_DEBUG, __LOG_DTMF, __LOG_ERROR, __LOG_EVENT, __LOG_NOTICE, __LOG_VERBOSE, __LOG_WARNING, and strsep().

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;
00171 }

static struct logchannel* make_logchannel ( char *  channel,
char *  components,
int  lineno 
) [static, read]

Definition at line 173 of file logger.c.

References ast_calloc, ast_config_AST_LOG_DIR, ast_strlen_zero(), errno, logchannel::facility, logchannel::filename, logchannel::fileptr, free, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_FILE, LOGTYPE_SYSLOG, make_components(), and logchannel::type.

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;
00282 }

int reload_logger ( int   ) 

Provided by logger.c

Definition at line 368 of file logger.c.

References ast_config_AST_LOG_DIR, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_log(), ast_queue_log(), ast_verbose(), logchannel::disabled, errno, EVENT_FLAG_SYSTEM, EVENTLOG, eventlog, f, logchannel::filename, logchannel::fileptr, init_logger_chain(), 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;
00484 }


Variable Documentation

struct ast_cli_entry cli_logger[] [static]

Definition at line 568 of file logger.c.

Referenced by init_logger().

int colors[] [static]

Definition at line 127 of file logger.c.

Referenced by ast_log().

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

Definition at line 84 of file logger.c.

unsigned int event_log

Definition at line 91 of file logger.c.

FILE* eventlog [static]

Definition at line 114 of file logger.c.

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

int filesize_reload_needed [static]

Definition at line 86 of file logger.c.

int global_logmask = -1 [static]

Definition at line 87 of file logger.c.

char hostname[MAXHOSTNAMELEN] [static]

char* levels[] [static]

Definition at line 117 of file logger.c.

Referenced by ast_log(), and ast_log_vsyslog().

struct { ... } logfiles [static]

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 556 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 560 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 564 of file logger.c.

FILE* qlog [static]

Definition at line 115 of file logger.c.

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

unsigned int queue_log

Definition at line 90 of file logger.c.

int syslog_level_map[] [static]

Definition at line 50 of file logger.c.


Generated on Sun Dec 18 20:55:52 2011 for Asterisk - the Open Source PBX by  doxygen 1.5.6