Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
f685bd2a
Commit
f685bd2a
authored
Jun 27, 2014
by
woogerboy21
Browse files
formatting
4 space indent + code flow rewrite for easier readability.
parent
b83fe95b
Changes
1
Hide whitespace changes
Inline
Side-by-side
servatrice/src/server_logger.cpp
View file @
f685bd2a
...
@@ -12,121 +12,122 @@
...
@@ -12,121 +12,122 @@
#endif
#endif
ServerLogger
::
ServerLogger
(
bool
_logToConsole
,
QObject
*
parent
)
ServerLogger
::
ServerLogger
(
bool
_logToConsole
,
QObject
*
parent
)
:
QObject
(
parent
),
logToConsole
(
_logToConsole
),
flushRunning
(
false
)
:
QObject
(
parent
),
logToConsole
(
_logToConsole
),
flushRunning
(
false
)
{
{
}
}
ServerLogger
::~
ServerLogger
()
ServerLogger
::~
ServerLogger
()
{
{
flushBuffer
();
flushBuffer
();
// This does not work with the destroyed() signal as this destructor is called after the main event loop is done.
// This does not work with the destroyed() signal as this destructor is called after the main event loop is done.
thread
()
->
quit
();
thread
()
->
quit
();
}
}
void
ServerLogger
::
startLog
(
const
QString
&
logFileName
)
void
ServerLogger
::
startLog
(
const
QString
&
logFileName
)
{
{
if
(
!
logFileName
.
isEmpty
())
{
if
(
!
logFileName
.
isEmpty
())
{
logFile
=
new
QFile
(
"server.log"
,
this
);
logFile
=
new
QFile
(
"server.log"
,
this
);
logFile
->
open
(
QIODevice
::
Append
);
logFile
->
open
(
QIODevice
::
Append
);
#ifdef Q_OS_UNIX
#ifdef Q_OS_UNIX
::
socketpair
(
AF_UNIX
,
SOCK_STREAM
,
0
,
sigHupFD
);
::
socketpair
(
AF_UNIX
,
SOCK_STREAM
,
0
,
sigHupFD
);
snHup
=
new
QSocketNotifier
(
sigHupFD
[
1
],
QSocketNotifier
::
Read
,
this
);
snHup
=
new
QSocketNotifier
(
sigHupFD
[
1
],
QSocketNotifier
::
Read
,
this
);
connect
(
snHup
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
handleSigHup
()));
connect
(
snHup
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
handleSigHup
()));
#endif
#endif
}
else
}
else
logFile
=
0
;
logFile
=
0
;
connect
(
this
,
SIGNAL
(
sigFlushBuffer
()),
this
,
SLOT
(
flushBuffer
()),
Qt
::
QueuedConnection
);
connect
(
this
,
SIGNAL
(
sigFlushBuffer
()),
this
,
SLOT
(
flushBuffer
()),
Qt
::
QueuedConnection
);
}
}
void
ServerLogger
::
logMessage
(
QString
message
,
void
*
caller
)
void
ServerLogger
::
logMessage
(
QString
message
,
void
*
caller
)
{
{
if
(
!
logFile
)
if
(
!
logFile
)
return
;
return
;
QString
callerString
;
QString
callerString
;
if
(
caller
)
if
(
caller
)
callerString
=
QString
::
number
((
qulonglong
)
caller
,
16
)
+
" "
;
callerString
=
QString
::
number
((
qulonglong
)
caller
,
16
)
+
" "
;
//filter out all log entries based on values in configuration file
//filter out all log entries based on values in configuration file
QSettings
*
settings
=
new
QSettings
(
"servatrice.ini"
,
QSettings
::
IniFormat
);
QSettings
*
settings
=
new
QSettings
(
"servatrice.ini"
,
QSettings
::
IniFormat
);
bool
shouldWeWriteLog
=
settings
->
value
(
"server/writelog"
).
toBool
();
bool
shouldWeWriteLog
=
settings
->
value
(
"server/writelog"
).
toBool
();
QString
logFilters
=
settings
->
value
(
"server/logfilters"
).
toString
();
if
(
shouldWeWriteLog
){
QStringList
listlogFilters
=
logFilters
.
split
(
","
,
QString
::
SkipEmptyParts
);
QString
logFilters
=
settings
->
value
(
"server/logfilters"
).
toString
();
bool
shouldWeSkipLine
=
false
;
QStringList
listlogFilters
=
logFilters
.
split
(
","
,
QString
::
SkipEmptyParts
);
bool
shouldWeSkipLine
=
false
;
if
(
!
shouldWeWriteLog
)
if
(
!
logFilters
.
trimmed
().
isEmpty
()){
return
;
shouldWeSkipLine
=
true
;
foreach
(
QString
logFilter
,
listlogFilters
){
if
(
message
.
contains
(
logFilter
,
Qt
::
CaseInsensitive
)){
shouldWeSkipLine
=
false
;
break
;
}
}
}
if
(
shouldWeSkipLine
)
if
(
!
logFilters
.
trimmed
().
isEmpty
()){
return
;
shouldWeSkipLine
=
true
;
foreach
(
QString
logFilter
,
listlogFilters
){
if
(
message
.
contains
(
logFilter
,
Qt
::
CaseInsensitive
)){
shouldWeSkipLine
=
false
;
break
;
}
}
}
bufferMutex
.
lock
();
if
(
shouldWeSkipLine
)
buffer
.
append
(
QDateTime
::
currentDateTime
().
toString
()
+
" "
+
callerString
+
message
);
return
;
bufferMutex
.
unlock
();
emit
sigFlushBuffer
();
bufferMutex
.
lock
();
}
buffer
.
append
(
QDateTime
::
currentDateTime
().
toString
()
+
" "
+
callerString
+
message
);
bufferMutex
.
unlock
();
emit
sigFlushBuffer
();
}
}
void
ServerLogger
::
flushBuffer
()
void
ServerLogger
::
flushBuffer
()
{
{
if
(
flushRunning
)
if
(
flushRunning
)
return
;
return
;
flushRunning
=
true
;
flushRunning
=
true
;
QTextStream
stream
(
logFile
);
QTextStream
stream
(
logFile
);
forever
{
forever
{
bufferMutex
.
lock
();
bufferMutex
.
lock
();
if
(
buffer
.
isEmpty
())
{
if
(
buffer
.
isEmpty
())
{
bufferMutex
.
unlock
();
bufferMutex
.
unlock
();
flushRunning
=
false
;
flushRunning
=
false
;
return
;
return
;
}
}
QString
message
=
buffer
.
takeFirst
();
QString
message
=
buffer
.
takeFirst
();
bufferMutex
.
unlock
();
bufferMutex
.
unlock
();
stream
<<
message
<<
"
\n
"
;
stream
<<
message
<<
"
\n
"
;
stream
.
flush
();
stream
.
flush
();
if
(
logToConsole
)
if
(
logToConsole
)
std
::
cout
<<
message
.
toStdString
()
<<
std
::
endl
;
std
::
cout
<<
message
.
toStdString
()
<<
std
::
endl
;
}
}
}
}
void
ServerLogger
::
hupSignalHandler
(
int
/*unused*/
)
void
ServerLogger
::
hupSignalHandler
(
int
/*unused*/
)
{
{
#ifdef Q_OS_UNIX
#ifdef Q_OS_UNIX
if
(
!
logFile
)
if
(
!
logFile
)
return
;
return
;
char
a
=
1
;
char
a
=
1
;
::
write
(
sigHupFD
[
0
],
&
a
,
sizeof
(
a
));
::
write
(
sigHupFD
[
0
],
&
a
,
sizeof
(
a
));
#endif
#endif
}
}
void
ServerLogger
::
handleSigHup
()
void
ServerLogger
::
handleSigHup
()
{
{
#ifdef Q_OS_UNIX
#ifdef Q_OS_UNIX
if
(
!
logFile
)
if
(
!
logFile
)
return
;
return
;
snHup
->
setEnabled
(
false
);
snHup
->
setEnabled
(
false
);
char
tmp
;
char
tmp
;
::
read
(
sigHupFD
[
1
],
&
tmp
,
sizeof
(
tmp
));
::
read
(
sigHupFD
[
1
],
&
tmp
,
sizeof
(
tmp
));
logFile
->
close
();
logFile
->
close
();
logFile
->
open
(
QIODevice
::
Append
);
logFile
->
open
(
QIODevice
::
Append
);
snHup
->
setEnabled
(
true
);
snHup
->
setEnabled
(
true
);
#endif
#endif
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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