blob: 0c939820c601b92186bedf3667119f9222ce9257 [file]
#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Utility methods for working with logs."""
import os
import time
REQUEST_LOG_ID = 'REQUEST_LOG_ID'
def RequestID():
"""Returns the ID of the current request assigned by App Engine."""
return os.environ.get(REQUEST_LOG_ID, None)
def ParseLogEntry(entry):
"""Parses a single log entry emitted by app_logging.AppLogsHandler.
Parses a log entry of the form LOG <level> <timestamp> <message> where the
level is in the range [0, 4]. If the entry is not of that form, take the whole
entry to be the message. Null characters in the entry are replaced by
newlines.
Args:
entry: The log entry to parse.
Returns:
A (timestamp, level, message) tuple.
"""
split = entry.split(' ', 3)
if len(split) == 4 and split[0] == 'LOG':
level = split[1]
timestamp = split[2]
message = split[3]
try:
message = str(message)
timestamp = int(timestamp)
level = int(level)
except ValueError:
pass
else:
if 0 <= level <= 4:
return timestamp, level, message.replace('\0', '\n')
usec = int(time.time() * 1e6)
return usec, 3, entry.replace('\0', '\n')
def ParseLogs(logs):
"""Parses a str containing newline separated log entries.
Parses a series of log entries in the form LOG <level> <timestamp> <message>
where the level is in the range [0, 4]. Null characters in the entry are
replaced by newlines.
Args:
logs: A string containing the log entries.
Returns:
A list of (timestamp, level, message) tuples.
"""
return [ParseLogEntry(line) for line in logs.split('\n') if line]