X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Flogger.c;h=7e92e97c2e002701911b3fc2727f509e024bd274;hb=29f2d89e37955378d3a341dc0deaa7fdd8da40af;hp=e9ed302ab57964e7483a67fd3f658e5854d5dfd4;hpb=0cd7064a1b656cd87e61af14b74ec6c80c341fe6;p=vlc diff --git a/modules/misc/logger.c b/modules/misc/logger.c index e9ed302ab5..7e92e97c2e 100644 --- a/modules/misc/logger.c +++ b/modules/misc/logger.c @@ -29,7 +29,8 @@ # include "config.h" #endif -#include +#include +#include #include #include #include @@ -85,6 +86,7 @@ struct intf_sys_t int i_mode; FILE *p_rrd; mtime_t last_update; + time_t now; /* timestamp for rrd-log */ FILE * p_file; /* The log file */ msg_subscription_t *p_sub; @@ -109,12 +111,12 @@ static void DoRRD( intf_thread_t *p_intf ); /***************************************************************************** * Module descriptor *****************************************************************************/ -static const char *mode_list[] = { "text", "html" +static const char *const mode_list[] = { "text", "html" #ifdef HAVE_SYSLOG_H ,"syslog" #endif }; -static const char *mode_list_text[] = { N_("Text"), "HTML" +static const char *const mode_list_text[] = { N_("Text"), "HTML" #ifdef HAVE_SYSLOG_H , "syslog" #endif @@ -131,21 +133,21 @@ static const char *mode_list_text[] = { N_("Text"), "HTML" #endif vlc_module_begin(); - set_shortname( _( "Logging" ) ); - set_description( _("File logging") ); + set_shortname( N_( "Logging" ) ); + set_description( N_("File logging") ); set_category( CAT_ADVANCED ); set_subcategory( SUBCAT_ADVANCED_MISC ); add_file( "logfile", NULL, NULL, - N_("Log filename"), N_("Specify the log filename."), VLC_FALSE ); + N_("Log filename"), N_("Specify the log filename."), false ); change_unsafe(); add_string( "logmode", "text", NULL, LOGMODE_TEXT, LOGMODE_LONGTEXT, - VLC_FALSE ); + false ); change_string_list( mode_list, mode_list_text, 0 ); add_file( "rrd-file", NULL, NULL, N_("RRD output file") , - N_("Output data for RRDTool in this file." ), VLC_TRUE ); + N_("Output data for RRDTool in this file." ), true ); set_capability( "interface", 0 ); set_callbacks( Open, Close ); @@ -165,10 +167,7 @@ static int Open( vlc_object_t *p_this ) /* Allocate instance and initialize some members */ p_intf->p_sys = (intf_sys_t *)malloc( sizeof( intf_sys_t ) ); if( p_intf->p_sys == NULL ) - { - msg_Err( p_intf, "out of memory" ); return -1; - } psz_mode = var_CreateGetString( p_intf, "logmode" ); if( psz_mode ) @@ -207,30 +206,10 @@ static int Open( vlc_object_t *p_this ) if( !psz_file ) { #ifdef __APPLE__ - char *psz_homedir = p_this->p_libvlc->psz_homedir; - - if( !psz_homedir ) /* XXX: This should never happen */ - { - msg_Err( p_this, "unable to find home directory" ); - return -1; - } - psz_file = (char *)malloc( sizeof("/" LOG_DIR "/" LOG_FILE_HTML) + - strlen(psz_homedir) ); - if( psz_file ) - { - switch( p_intf->p_sys->i_mode ) - { - case MODE_HTML: - sprintf( psz_file, "%s/" LOG_DIR "/" LOG_FILE_HTML, - psz_homedir ); - break; - case MODE_TEXT: - default: - sprintf( psz_file, "%s/" LOG_DIR "/" LOG_FILE_TEXT, - psz_homedir ); - break; - } - } + if( asprintf( &psz_file, "%s/"LOG_DIR"/%s", config_GetHomeDir(), + (p_intf->p_sys->i_mode == MODE_HTML) ? LOG_FILE_HTML + : LOG_FILE_TEXT ) == -1 ) + psz_file = NULL; #else switch( p_intf->p_sys->i_mode ) { @@ -277,7 +256,7 @@ static int Open( vlc_object_t *p_this ) { p_intf->p_sys->p_file = NULL; #ifdef HAVE_SYSLOG_H - openlog( "VLC", LOG_PID|LOG_NDELAY, LOG_DAEMON ); + openlog( "vlc", LOG_PID|LOG_NDELAY, LOG_DAEMON ); #endif } @@ -290,7 +269,7 @@ static int Open( vlc_object_t *p_this ) p_intf->p_sys->p_rrd = utf8_fopen( psz_rrd_file, "w" ); } - p_intf->p_sys->p_sub = msg_Subscribe( p_intf , MSG_QUEUE_NORMAL ); + p_intf->p_sys->p_sub = msg_Subscribe( p_intf ); p_intf->pf_run = Run; return 0; @@ -305,7 +284,8 @@ static void Close( vlc_object_t *p_this ) /* Flush the queue and unsubscribe from the message queue */ FlushQueue( p_intf->p_sys->p_sub, p_intf->p_sys->p_file, - p_intf->p_sys->i_mode, p_intf->p_libvlc->i_verbose ); + p_intf->p_sys->i_mode, + var_CreateGetInteger( p_intf, "verbose" ) ); msg_Unsubscribe( p_intf, p_intf->p_sys->p_sub ); switch( p_intf->p_sys->i_mode ) @@ -340,11 +320,11 @@ static void Close( vlc_object_t *p_this ) *****************************************************************************/ static void Run( intf_thread_t *p_intf ) { - while( !p_intf->b_die ) + while( vlc_object_alive (p_intf) ) { FlushQueue( p_intf->p_sys->p_sub, p_intf->p_sys->p_file, - p_intf->p_sys->i_mode, p_intf->p_libvlc->i_verbose ); - + p_intf->p_sys->i_mode, + var_CreateGetInteger( p_intf, "verbose" ) ); if( p_intf->p_sys->p_rrd ) DoRRD( p_intf ); @@ -454,28 +434,25 @@ static void HtmlPrint( const msg_item_t *p_msg, FILE *p_file ) static void DoRRD( intf_thread_t *p_intf ) { - playlist_t *p_playlist; if( mdate() - p_intf->p_sys->last_update < 1000000 ) return; p_intf->p_sys->last_update = mdate(); - p_playlist = (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if( p_playlist && p_playlist->p_stats ) + if( p_intf->p_libvlc->p_stats ) { - lldiv_t din = lldiv( p_playlist->p_stats->f_input_bitrate * 1000000, + time(&p_intf->p_sys->now); + lldiv_t din = lldiv( p_intf->p_libvlc->p_stats->f_input_bitrate * 1000000, 1000 ); - lldiv_t ddm = lldiv( p_playlist->p_stats->f_demux_bitrate * 1000000, + lldiv_t ddm = lldiv( p_intf->p_libvlc->p_stats->f_demux_bitrate * 1000000, 1000 ); - lldiv_t dout = lldiv( p_playlist->p_stats->f_output_bitrate * 1000000, + lldiv_t dout = lldiv( p_intf->p_libvlc->p_stats->f_output_bitrate * 1000000, 1000 ); fprintf( p_intf->p_sys->p_rrd, - I64Fi":%lld.%03u:%lld.%03u:%lld.%03u\n", - p_intf->p_sys->last_update/1000000, + "%"PRIi64":%lld.%03u:%lld.%03u:%lld.%03u\n", + (uintmax_t)p_intf->p_sys->now, din.quot, (unsigned int)din.rem, ddm.quot, (unsigned int)ddm.rem, dout.quot, (unsigned int)dout.rem ); fflush( p_intf->p_sys->p_rrd ); - vlc_object_release( p_playlist ); } }