Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
f83d51d4
Commit
f83d51d4
authored
Aug 21, 2011
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
logger: dispatch message directly to the correct function + clean up
parent
63d1c692
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
123 additions
and
159 deletions
+123
-159
modules/misc/logger.c
modules/misc/logger.c
+123
-159
No files found.
modules/misc/logger.c
View file @
f83d51d4
...
...
@@ -80,7 +80,7 @@ struct intf_sys_t
{
msg_subscription_t
*
p_sub
;
FILE
*
p_file
;
int
i_mode
;
const
char
*
footer
;
};
/*****************************************************************************
...
...
@@ -89,11 +89,11 @@ struct intf_sys_t
static
int
Open
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
static
void
Overflow
(
void
*
,
int
,
const
msg_item_t
*
,
const
char
*
,
va_list
);
static
void
TextPrint
(
FILE
*
,
int
,
const
msg_item_t
*
,
const
char
*
);
static
void
HtmlPrint
(
FILE
*
,
int
,
const
msg_item_t
*
,
const
char
*
);
static
void
TextPrint
(
void
*
,
int
,
const
msg_item_t
*
,
const
char
*
,
va_list
);
static
void
HtmlPrint
(
void
*
,
int
,
const
msg_item_t
*
,
const
char
*
,
va_list
);
#ifdef HAVE_SYSLOG_H
static
void
SyslogPrint
(
int
,
const
msg_item_t
*
,
const
char
*
);
static
void
SyslogPrint
(
void
*
,
int
,
const
msg_item_t
*
,
const
char
*
,
va_list
);
#endif
/*****************************************************************************
...
...
@@ -186,7 +186,6 @@ static int Open( vlc_object_t *p_this )
{
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
p_this
;
intf_sys_t
*
p_sys
;
char
*
psz_mode
;
CONSOLE_INTRO_MSG
;
msg_Info
(
p_intf
,
"using logger."
);
...
...
@@ -196,93 +195,31 @@ static int Open( vlc_object_t *p_this )
if
(
p_sys
==
NULL
)
return
VLC_ENOMEM
;
p_sys
->
i_mode
=
MODE_TEXT
;
psz_mode
=
var_InheritString
(
p_intf
,
"logmode"
);
if
(
psz_mode
)
msg_callback_t
cb
=
TextPrint
;
const
char
*
filename
=
LOG_FILE_TEXT
,
*
header
=
TEXT_HEADER
;
p_sys
->
footer
=
TEXT_FOOTER
;
char
*
mode
=
var_InheritString
(
p_intf
,
"logmode"
);
if
(
mode
!=
NULL
)
{
if
(
!
strcmp
(
psz_mode
,
"text"
)
)
;
else
if
(
!
strcmp
(
psz_mode
,
"html"
)
)
if
(
!
strcmp
(
mode
,
"html"
)
)
{
p_sys
->
i_mode
=
MODE_HTML
;
p_sys
->
footer
=
HTML_FOOTER
;
header
=
HTML_HEADER
;
cb
=
HtmlPrint
;
}
#ifdef HAVE_SYSLOG_H
else
if
(
!
strcmp
(
psz_mode
,
"syslog"
)
)
{
p_sys
->
i_mode
=
MODE_SYSLOG
;
}
else
if
(
!
strcmp
(
mode
,
"syslog"
)
)
cb
=
SyslogPrint
;
#endif
else
{
msg_Warn
(
p_intf
,
"invalid log mode `%s', using `text'"
,
psz_mode
);
p_sys
->
i_mode
=
MODE_TEXT
;
}
free
(
psz_mode
);
else
if
(
strcmp
(
mode
,
"text"
)
)
msg_Warn
(
p_intf
,
"invalid log mode `%s', using `text'"
,
mode
);
free
(
mode
);
}
else
{
msg_Warn
(
p_intf
,
"no log mode specified, using `text'"
);
}
if
(
p_sys
->
i_mode
!=
MODE_SYSLOG
)
{
char
*
psz_file
=
var_InheritString
(
p_intf
,
"logfile"
);
if
(
!
psz_file
)
{
#ifdef __APPLE__
char
*
home
=
config_GetUserDir
(
VLC_DOCUMENTS_DIR
);
if
(
home
==
NULL
||
asprintf
(
&
psz_file
,
"%s/"
LOG_DIR
"/%s"
,
home
,
(
p_sys
->
i_mode
==
MODE_HTML
)
?
LOG_FILE_HTML
:
LOG_FILE_TEXT
)
==
-
1
)
psz_file
=
NULL
;
free
(
home
);
#else
switch
(
p_sys
->
i_mode
)
{
case
MODE_HTML
:
psz_file
=
strdup
(
LOG_FILE_HTML
);
break
;
case
MODE_TEXT
:
default:
psz_file
=
strdup
(
LOG_FILE_TEXT
);
break
;
}
#endif
msg_Warn
(
p_intf
,
"no log filename provided, using `%s'"
,
psz_file
);
}
/* Open the log file and remove any buffering for the stream */
msg_Dbg
(
p_intf
,
"opening logfile `%s'"
,
psz_file
);
p_sys
->
p_file
=
vlc_fopen
(
psz_file
,
"at"
);
if
(
p_sys
->
p_file
==
NULL
)
{
msg_Err
(
p_intf
,
"error opening logfile `%s'"
,
psz_file
);
free
(
p_sys
);
free
(
psz_file
);
return
-
1
;
}
setvbuf
(
p_sys
->
p_file
,
NULL
,
_IONBF
,
0
);
free
(
psz_file
);
switch
(
p_sys
->
i_mode
)
{
case
MODE_HTML
:
fputs
(
HTML_HEADER
,
p_sys
->
p_file
);
break
;
case
MODE_TEXT
:
default:
fputs
(
TEXT_HEADER
,
p_sys
->
p_file
);
break
;
}
}
else
{
p_sys
->
p_file
=
NULL
;
#ifdef HAVE_SYSLOG_H
if
(
cb
==
SyslogPrint
)
{
int
i_facility
;
char
*
psz_facility
=
var_InheritString
(
p_intf
,
"syslog-facility"
);
if
(
psz_facility
)
...
...
@@ -313,12 +250,45 @@ static int Open( vlc_object_t *p_this )
}
openlog
(
"vlc"
,
LOG_PID
|
LOG_NDELAY
,
i_facility
);
#endif
p_sys
->
p_file
=
NULL
;
}
else
#endif
{
char
*
psz_file
=
var_InheritString
(
p_intf
,
"logfile"
);
if
(
!
psz_file
)
{
#ifdef __APPLE__
char
*
home
=
config_GetUserDir
(
VLC_DOCUMENTS_DIR
);
if
(
home
==
NULL
||
asprintf
(
&
psz_file
,
"%s/"
LOG_DIR
"/%s"
,
home
,
filename
)
==
-
1
)
psz_file
=
NULL
;
free
(
home
);
filename
=
psz_file
;
#endif
msg_Warn
(
p_intf
,
"no log filename provided, using `%s'"
,
filename
);
}
else
filename
=
psz_file
;
p_sys
->
p_sub
=
vlc_Subscribe
(
Overflow
,
p_intf
);
/* Open the log file and remove any buffering for the stream */
msg_Dbg
(
p_intf
,
"opening logfile `%s'"
,
filename
);
p_sys
->
p_file
=
vlc_fopen
(
filename
,
"at"
);
free
(
psz_file
);
if
(
p_sys
->
p_file
==
NULL
)
{
msg_Err
(
p_intf
,
"error opening logfile `%s': %m"
,
filename
);
free
(
p_sys
);
return
VLC_EGENERIC
;
}
setvbuf
(
p_sys
->
p_file
,
NULL
,
_IONBF
,
0
);
fputs
(
header
,
p_sys
->
p_file
);
}
return
0
;
p_sys
->
p_sub
=
vlc_Subscribe
(
cb
,
p_intf
);
return
VLC_SUCCESS
;
}
/*****************************************************************************
...
...
@@ -330,114 +300,108 @@ static void Close( vlc_object_t *p_this )
intf_sys_t
*
p_sys
=
p_intf
->
p_sys
;
/* Flush the queue and unsubscribe from the message queue */
/* FIXME: flush */
vlc_Unsubscribe
(
p_sys
->
p_sub
);
switch
(
p_sys
->
i_mode
)
{
case
MODE_HTML
:
fputs
(
HTML_FOOTER
,
p_sys
->
p_file
);
break
;
/* Close the log file */
#ifdef HAVE_SYSLOG_H
case
MODE_SYSLOG
:
if
(
p_sys
->
p_file
==
NULL
)
closelog
();
break
;
else
#endif
case
MODE_TEXT
:
default:
fputs
(
TEXT_FOOTER
,
p_sys
->
p_file
);
break
;
}
/* Close the log file */
if
(
p_sys
->
p_file
)
{
fputs
(
p_sys
->
footer
,
p_sys
->
p_file
);
fclose
(
p_sys
->
p_file
);
}
/* Destroy structure */
free
(
p_sys
);
}
/**
* Log a message
*/
static
void
Overflow
(
void
*
opaque
,
int
type
,
const
msg_item_t
*
p_item
,
const
char
*
format
,
va_list
ap
)
static
bool
IgnoreMessage
(
intf_thread_t
*
p_intf
,
int
type
)
{
intf_thread_t
*
p_intf
=
opaque
;
intf_sys_t
*
p_sys
=
p_intf
->
p_sys
;
char
*
str
;
/* TODO: cache value... */
int
verbosity
=
var_InheritInteger
(
p_intf
,
"log-verbose"
);
if
(
verbosity
==
-
1
)
verbosity
=
var_InheritInteger
(
p_intf
,
"verbose"
);
if
(
verbosity
<
0
||
verbosity
<
(
type
-
VLC_MSG_ERR
)
||
vasprintf
(
&
str
,
format
,
ap
)
==
-
1
)
return
;
int
canc
=
vlc_savecancel
();
switch
(
p_sys
->
i_mode
)
{
case
MODE_HTML
:
HtmlPrint
(
p_sys
->
p_file
,
type
,
p_item
,
str
);
break
;
#ifdef HAVE_SYSLOG_H
case
MODE_SYSLOG
:
SyslogPrint
(
type
,
p_item
,
str
);
break
;
#endif
case
MODE_TEXT
:
default:
TextPrint
(
p_sys
->
p_file
,
type
,
p_item
,
str
);
break
;
}
vlc_restorecancel
(
canc
);
free
(
str
);
return
verbosity
<
0
||
verbosity
<
(
type
-
VLC_MSG_ERR
);
}
static
const
char
ppsz_type
[
4
][
11
]
=
{
": "
,
" error: "
,
" warning: "
,
" debug: "
,
/*
* Logging callbacks
*/
static
const
char
ppsz_type
[
4
][
9
]
=
{
""
,
" error"
,
" warning"
,
" debug"
,
};
static
void
TextPrint
(
FILE
*
stream
,
int
type
,
const
msg_item_t
*
item
,
const
char
*
str
)
static
void
TextPrint
(
void
*
opaque
,
int
type
,
const
msg_item_t
*
item
,
const
char
*
fmt
,
va_list
ap
)
{
utf8_fprintf
(
stream
,
"%s%s%s
\n
"
,
item
->
psz_module
,
ppsz_type
[
type
],
str
);
intf_thread_t
*
p_intf
=
opaque
;
FILE
*
stream
=
p_intf
->
p_sys
->
p_file
;
if
(
IgnoreMessage
(
p_intf
,
type
)
)
return
;
int
canc
=
vlc_savecancel
();
flockfile
(
stream
);
utf8_fprintf
(
stream
,
"%s%s: "
,
item
->
psz_module
,
ppsz_type
[
type
]
);
utf8_fprintf
(
stream
,
fmt
,
ap
);
fputc_unlocked
(
'\n'
,
stream
);
funlockfile
(
stream
);
vlc_restorecancel
(
canc
);
}
#ifdef HAVE_SYSLOG_H
static
void
SyslogPrint
(
int
type
,
const
msg_item_t
*
item
,
const
char
*
str
)
static
void
SyslogPrint
(
void
*
opaque
,
int
type
,
const
msg_item_t
*
item
,
const
char
*
fmt
,
va_list
ap
)
{
static
const
int
i_prio
[
4
]
=
{
LOG_INFO
,
LOG_ERR
,
LOG_WARNING
,
LOG_DEBUG
};
intf_thread_t
*
p_intf
=
opaque
;
char
*
str
;
int
i_priority
=
i_prio
[
type
];
if
(
IgnoreMessage
(
p_intf
,
type
)
||
unlikely
(
vasprintf
(
&
str
,
fmt
,
ap
)
==
-
1
)
)
return
;
int
canc
=
vlc_savecancel
();
if
(
item
->
psz_header
!=
NULL
)
syslog
(
i_priority
,
"[%s] %s%s%s"
,
item
->
psz_header
,
syslog
(
i_priority
,
"[%s] %s%s
:
%s"
,
item
->
psz_header
,
item
->
psz_module
,
ppsz_type
[
type
],
str
);
else
syslog
(
i_priority
,
"%s%s%s"
,
syslog
(
i_priority
,
"%s%s
:
%s"
,
item
->
psz_module
,
ppsz_type
[
type
],
str
);
vlc_restorecancel
(
canc
);
free
(
str
);
}
#endif
static
void
HtmlPrint
(
FILE
*
stream
,
int
type
,
const
msg_item_t
*
item
,
const
char
*
str
)
static
void
HtmlPrint
(
void
*
opaque
,
int
type
,
const
msg_item_t
*
item
,
const
char
*
fmt
,
va_list
ap
)
{
static
const
char
ppsz_color
[
4
][
30
]
=
{
"<span style=
\"
color: #ffffff
\"
>"
,
"<span style=
\"
color: #ff6666
\"
>"
,
"<span style=
\"
color: #ffff66
\"
>"
,
"<span style=
\"
color: #aaaaaa
\"
>"
,
static
const
unsigned
color
[
4
]
=
{
0xffffff
,
0xff6666
,
0xffff66
,
0xaaaaaa
,
};
fprintf
(
stream
,
"%s%s%s%s</span>
\n
"
,
item
->
psz_module
,
ppsz_type
[
type
],
ppsz_color
[
type
],
str
);
intf_thread_t
*
p_intf
=
opaque
;
FILE
*
stream
=
p_intf
->
p_sys
->
p_file
;
if
(
IgnoreMessage
(
p_intf
,
type
)
)
return
;
int
canc
=
vlc_savecancel
();
flockfile
(
stream
);
fprintf
(
stream
,
"%s%s: <span style=
\"
color: #%06x
\"
>"
,
item
->
psz_module
,
ppsz_type
[
type
],
color
[
type
]
);
/* FIXME: encode special ASCII characters */
fprintf
(
stream
,
fmt
,
ap
);
fputs
(
"</span>
\n
"
,
stream
);
funlockfile
(
stream
);
vlc_restorecancel
(
canc
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment