Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
G
glog
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
glog
Commits
5792d60d
Unverified
Commit
5792d60d
authored
Oct 31, 2019
by
Sergiu Deitsch
Committed by
GitHub
Oct 31, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #441 from asekretenko/useconds
Extend the LogSink interface to be able to pass microseconds
parents
44f6079f
94a54120
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
72 additions
and
21 deletions
+72
-21
logging.h.in
src/glog/logging.h.in
+19
-1
logging.cc
src/logging.cc
+15
-15
logging_unittest.cc
src/logging_unittest.cc
+19
-4
logging.h
src/windows/glog/logging.h
+19
-1
No files found.
src/glog/logging.h.in
View file @
5792d60d
...
...
@@ -1426,6 +1426,16 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
// Sink's logging logic (message_len is such as to exclude '\n' at the end).
// This method can't use LOG() or CHECK() as logging system mutex(s) are held
// during this call.
virtual void send(LogSeverity severity, const char* full_filename,
const char* base_filename, int line,
const struct ::tm* tm_time,
const char* message, size_t message_len, int32 usecs) {
send(severity, full_filename, base_filename, line,
tm_time, message, message_len);
}
// This send() signature is obsolete.
// New implementations should define this in terms of
// the above send() method.
virtual void send(LogSeverity severity, const char* full_filename,
const char* base_filename, int line,
const struct ::tm* tm_time,
...
...
@@ -1450,7 +1460,15 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
// Can be useful to implement send().
static std::string ToString(LogSeverity severity, const char* file, int line,
const struct ::tm* tm_time,
const char* message, size_t message_len);
const char* message, size_t message_len,
int32 usecs);
// Obsolete
static std::string ToString(LogSeverity severity, const char* file, int line,
const struct ::tm* tm_time,
const char* message, size_t message_len) {
return ToString(severity, file, line, tm_time, message, message_len, 0);
}
};
// Add or remove a LogSink as a consumer of logging data. Thread-safe.
...
...
src/logging.cc
View file @
5792d60d
...
...
@@ -352,6 +352,7 @@ struct LogMessage::LogMessageData {
};
time_t
timestamp_
;
// Time of creation of LogMessage
struct
::
tm
tm_time_
;
// Time of creation of LogMessage
int32
usecs_
;
// Time of creation of LogMessage - microseconds part
size_t
num_prefix_chars_
;
// # of chars of prefix in this message
size_t
num_chars_to_log_
;
// # of chars of msg to send to log
size_t
num_chars_to_syslog_
;
// # of chars of msg to send to syslog
...
...
@@ -518,7 +519,8 @@ class LogDestination {
int
line
,
const
struct
::
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
);
size_t
message_len
,
int32
usecs
);
// Wait for all registered sinks via WaitTillSent
// including the optional one in "data".
...
...
@@ -785,12 +787,13 @@ inline void LogDestination::LogToSinks(LogSeverity severity,
int
line
,
const
struct
::
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
)
{
size_t
message_len
,
int32
usecs
)
{
ReaderMutexLock
l
(
&
sink_mutex_
);
if
(
sinks_
)
{
for
(
int
i
=
sinks_
->
size
()
-
1
;
i
>=
0
;
i
--
)
{
(
*
sinks_
)[
i
]
->
send
(
severity
,
full_filename
,
base_filename
,
line
,
tm_time
,
message
,
message_len
);
line
,
tm_time
,
message
,
message_len
,
usecs
);
}
}
}
...
...
@@ -1307,7 +1310,7 @@ void LogMessage::Init(const char* file,
WallTime
now
=
WallTime_Now
();
data_
->
timestamp_
=
static_cast
<
time_t
>
(
now
);
localtime_r
(
&
data_
->
timestamp_
,
&
data_
->
tm_time_
);
int
usecs
=
static_cast
<
int
>
((
now
-
data_
->
timestamp_
)
*
1000000
);
data_
->
usecs_
=
static_cast
<
int32
>
((
now
-
data_
->
timestamp_
)
*
1000000
);
data_
->
num_chars_to_log_
=
0
;
data_
->
num_chars_to_syslog_
=
0
;
...
...
@@ -1327,7 +1330,7 @@ void LogMessage::Init(const char* file,
<<
setw
(
2
)
<<
data_
->
tm_time_
.
tm_hour
<<
':'
<<
setw
(
2
)
<<
data_
->
tm_time_
.
tm_min
<<
':'
<<
setw
(
2
)
<<
data_
->
tm_time_
.
tm_sec
<<
"."
<<
setw
(
6
)
<<
usecs
<<
setw
(
6
)
<<
data_
->
usecs_
<<
' '
<<
setfill
(
' '
)
<<
setw
(
5
)
<<
static_cast
<
unsigned
int
>
(
GetTID
())
<<
setfill
(
'0'
)
...
...
@@ -1474,7 +1477,8 @@ void LogMessage::SendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
data_
->
line_
,
&
data_
->
tm_time_
,
data_
->
message_text_
+
data_
->
num_prefix_chars_
,
(
data_
->
num_chars_to_log_
-
data_
->
num_prefix_chars_
-
1
));
data_
->
num_prefix_chars_
-
1
),
data_
->
usecs_
);
}
else
{
// log this message to all log files of severity <= severity_
...
...
@@ -1491,7 +1495,8 @@ void LogMessage::SendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
data_
->
line_
,
&
data_
->
tm_time_
,
data_
->
message_text_
+
data_
->
num_prefix_chars_
,
(
data_
->
num_chars_to_log_
-
data_
->
num_prefix_chars_
-
1
));
-
data_
->
num_prefix_chars_
-
1
),
data_
->
usecs_
);
// NOTE: -1 removes trailing \n
}
...
...
@@ -1587,7 +1592,8 @@ void LogMessage::SendToSink() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
data_
->
line_
,
&
data_
->
tm_time_
,
data_
->
message_text_
+
data_
->
num_prefix_chars_
,
(
data_
->
num_chars_to_log_
-
data_
->
num_prefix_chars_
-
1
));
data_
->
num_prefix_chars_
-
1
),
data_
->
usecs_
);
}
}
...
...
@@ -1714,16 +1720,10 @@ void LogSink::WaitTillSent() {
string
LogSink
::
ToString
(
LogSeverity
severity
,
const
char
*
file
,
int
line
,
const
struct
::
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
)
{
const
char
*
message
,
size_t
message_len
,
int32
usecs
)
{
ostringstream
stream
(
string
(
message
,
message_len
));
stream
.
fill
(
'0'
);
// FIXME(jrvb): Updating this to use the correct value for usecs
// requires changing the signature for both this method and
// LogSink::send(). This change needs to be done in a separate CL
// so subclasses of LogSink can be updated at the same time.
int
usecs
=
0
;
stream
<<
LogSeverityNames
[
severity
][
0
]
<<
setw
(
2
)
<<
1
+
tm_time
->
tm_mon
<<
setw
(
2
)
<<
tm_time
->
tm_mday
...
...
src/logging_unittest.cc
View file @
5792d60d
...
...
@@ -494,9 +494,16 @@ class TestLogSinkImpl : public LogSink {
virtual
void
send
(
LogSeverity
severity
,
const
char
*
/* full_filename */
,
const
char
*
base_filename
,
int
line
,
const
struct
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
)
{
const
char
*
message
,
size_t
message_len
,
int
usecs
)
{
errors
.
push_back
(
ToString
(
severity
,
base_filename
,
line
,
tm_time
,
message
,
message_len
));
ToString
(
severity
,
base_filename
,
line
,
tm_time
,
message
,
message_len
,
usecs
));
}
virtual
void
send
(
LogSeverity
severity
,
const
char
*
full_filename
,
const
char
*
base_filename
,
int
line
,
const
struct
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
)
{
send
(
severity
,
full_filename
,
base_filename
,
line
,
tm_time
,
message
,
message_len
,
0
);
}
};
...
...
@@ -1075,15 +1082,23 @@ class TestWaitingLogSink : public LogSink {
virtual
void
send
(
LogSeverity
severity
,
const
char
*
/* full_filename */
,
const
char
*
base_filename
,
int
line
,
const
struct
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
)
{
const
char
*
message
,
size_t
message_len
,
int
usecs
)
{
// Push it to Writer thread if we are the original logging thread.
// Note: Something like ThreadLocalLogSink is a better choice
// to do thread-specific LogSink logic for real.
if
(
pthread_equal
(
tid_
,
pthread_self
()))
{
writer_
.
Buffer
(
ToString
(
severity
,
base_filename
,
line
,
tm_time
,
message
,
message_len
));
tm_time
,
message
,
message_len
,
usecs
));
}
}
virtual
void
send
(
LogSeverity
severity
,
const
char
*
full_filename
,
const
char
*
base_filename
,
int
line
,
const
struct
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
)
{
send
(
severity
,
full_filename
,
base_filename
,
line
,
tm_time
,
message
,
message_len
);
}
virtual
void
WaitTillSent
()
{
// Wait for Writer thread if we are the original logging thread.
if
(
pthread_equal
(
tid_
,
pthread_self
()))
writer_
.
Wait
();
...
...
src/windows/glog/logging.h
View file @
5792d60d
...
...
@@ -1427,6 +1427,16 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
// Sink's logging logic (message_len is such as to exclude '\n' at the end).
// This method can't use LOG() or CHECK() as logging system mutex(s) are held
// during this call.
virtual
void
send
(
LogSeverity
severity
,
const
char
*
full_filename
,
const
char
*
base_filename
,
int
line
,
const
struct
::
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
,
int32
usecs
)
{
send
(
severity
,
full_filename
,
base_filename
,
line
,
tm_time
,
message
,
message_len
);
}
// This send() signature is obsolete.
// New implementations should define this in terms of
// the above send() method.
virtual
void
send
(
LogSeverity
severity
,
const
char
*
full_filename
,
const
char
*
base_filename
,
int
line
,
const
struct
::
tm
*
tm_time
,
...
...
@@ -1451,7 +1461,15 @@ class GOOGLE_GLOG_DLL_DECL LogSink {
// Can be useful to implement send().
static
std
::
string
ToString
(
LogSeverity
severity
,
const
char
*
file
,
int
line
,
const
struct
::
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
);
const
char
*
message
,
size_t
message_len
,
int32
usecs
);
// Obsolete
static
std
::
string
ToString
(
LogSeverity
severity
,
const
char
*
file
,
int
line
,
const
struct
::
tm
*
tm_time
,
const
char
*
message
,
size_t
message_len
)
{
return
ToString
(
severity
,
file
,
line
,
tm_time
,
message
,
message_len
,
0
);
}
};
// Add or remove a LogSink as a consumer of logging data. Thread-safe.
...
...
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