X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Flogger.c;h=f913e8efa32ac4f7b92f9c397a7428e74ad804f3;hb=cf05c96ca52d7beb20130a083df7b95ffa4e7e69;hp=0aa85a3aab840d24e3884589d00d3774799bfbba;hpb=66f6a9141d4634a5f6e0ad5cae5be48a95842a58;p=vlc diff --git a/modules/misc/logger.c b/modules/misc/logger.c index 0aa85a3aab..f913e8efa3 100644 --- a/modules/misc/logger.c +++ b/modules/misc/logger.c @@ -24,24 +24,23 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc(), free() */ -#include + +#include +#include +#include +#include #include /* ENOMEM */ -#include #ifdef UNDER_CE # define _IONBF 0x0004 #endif -#include -#include - #define MODE_TEXT 0 #define MODE_HTML 1 #define MODE_SYSLOG 2 -#ifdef SYS_DARWIN +#ifdef __APPLE__ #define LOG_DIR "Library/Logs/" #endif @@ -103,12 +102,12 @@ static void DoRRD( intf_thread_t *p_intf ); /***************************************************************************** * Module descriptor *****************************************************************************/ -static char *mode_list[] = { "text", "html" +static const char *mode_list[] = { "text", "html" #ifdef HAVE_SYSLOG_H ,"syslog" #endif }; -static char *mode_list_text[] = { N_("Text"), "HTML" +static const char *mode_list_text[] = { N_("Text"), "HTML" #ifdef HAVE_SYSLOG_H , "syslog" #endif @@ -116,23 +115,29 @@ static char *mode_list_text[] = { N_("Text"), "HTML" #define LOGMODE_TEXT N_("Log format") #ifdef HAVE_SYSLOG_H -#define LOGMODE_LONGTEXT N_("Specify the log format. Available choices are \"text\" (default), \"html\", and \"syslog\".") +#define LOGMODE_LONGTEXT N_("Specify the log format. Available choices are " \ + "\"text\" (default), \"html\", and \"syslog\" (special mode to send to " \ + "syslog instead of file.") #else -#define LOGMODE_LONGTEXT N_("Specify the log format. Available choices are \"text\" (default) and \"html\".") +#define LOGMODE_LONGTEXT N_("Specify the log format. Available choices are " \ + "\"text\" (default) and \"html\".") #endif vlc_module_begin(); - set_shortname( N_( "Logging" ) ); + set_shortname( _( "Logging" ) ); set_description( _("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 ); add_string( "logmode", "text", NULL, LOGMODE_TEXT, LOGMODE_LONGTEXT, VLC_FALSE ); change_string_list( mode_list, mode_list_text, 0 ); - add_string( "rrd-file", NULL, NULL, N_("RRD output file") , - N_("Output data for RRDTool in this file" ), VLC_TRUE ); + add_file( "rrd-file", NULL, NULL, N_("RRD output file") , + N_("Output data for RRDTool in this file." ), VLC_TRUE ); set_capability( "interface", 0 ); set_callbacks( Open, Close ); @@ -147,7 +152,7 @@ static int Open( vlc_object_t *p_this ) char *psz_mode, *psz_file, *psz_rrd_file; CONSOLE_INTRO_MSG; - msg_Info( p_intf, "Using logger..." ); + msg_Info( p_intf, "using logger..." ); /* Allocate instance and initialize some members */ p_intf->p_sys = (intf_sys_t *)malloc( sizeof( intf_sys_t ) ); @@ -176,7 +181,7 @@ static int Open( vlc_object_t *p_this ) #endif else { - msg_Err( p_intf, "invalid log mode `%s', using `text'", psz_mode ); + msg_Warn( p_intf, "invalid log mode `%s', using `text'", psz_mode ); p_intf->p_sys->i_mode = MODE_TEXT; } @@ -193,12 +198,12 @@ static int Open( vlc_object_t *p_this ) psz_file = config_GetPsz( p_intf, "logfile" ); if( !psz_file ) { -#ifdef SYS_DARWIN - char *psz_homedir = p_this->p_vlc->psz_homedir; +#ifdef __APPLE__ + char *psz_homedir = p_this->p_libvlc->psz_homedir; - if( !psz_homedir ) + if( !psz_homedir ) /* XXX: This should never happen */ { - msg_Err( p_this, "psz_homedir is null" ); + msg_Err( p_this, "unable to find home directory" ); return -1; } psz_file = (char *)malloc( sizeof("/" LOG_DIR "/" LOG_FILE_HTML) + @@ -236,7 +241,7 @@ static int Open( vlc_object_t *p_this ) /* Open the log file and remove any buffering for the stream */ msg_Dbg( p_intf, "opening logfile `%s'", psz_file ); - p_intf->p_sys->p_file = fopen( psz_file, "wt" ); + p_intf->p_sys->p_file = utf8_fopen( psz_file, "at" ); if( p_intf->p_sys->p_file == NULL ) { msg_Err( p_intf, "error opening logfile `%s'", psz_file ); @@ -274,7 +279,7 @@ static int Open( vlc_object_t *p_this ) psz_rrd_file = config_GetPsz( p_intf, "rrd-file" ); if( psz_rrd_file && *psz_rrd_file ) { - p_intf->p_sys->p_rrd = fopen( psz_rrd_file, "w" ); + 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 ); @@ -427,7 +432,6 @@ static void HtmlPrint( const msg_item_t *p_msg, FILE *p_file ) static void DoRRD( intf_thread_t *p_intf ) { playlist_t *p_playlist; - float f_input_bitrate; if( mdate() - p_intf->p_sys->last_update < 1000000 ) return; p_intf->p_sys->last_update = mdate(); @@ -436,11 +440,18 @@ static void DoRRD( intf_thread_t *p_intf ) FIND_ANYWHERE ); if( p_playlist && p_playlist->p_stats ) { - fprintf( p_intf->p_sys->p_rrd, I64Fi":%f:%f:%f\n", + lldiv_t din = lldiv( p_playlist->p_stats->f_input_bitrate * 1000000, + 1000 ); + lldiv_t ddm = lldiv( p_playlist->p_stats->f_demux_bitrate * 1000000, + 1000 ); + lldiv_t dout = lldiv( p_playlist->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, - (float)(p_playlist->p_stats->f_input_bitrate)*1000, - (float)(p_playlist->p_stats->f_demux_bitrate)*1000, - (float)(p_playlist->p_stats->f_output_bitrate)*1000 ); + 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 ); }