Skip to content

Instantly share code, notes, and snippets.

@absent1706
Created April 21, 2017 15:58
Show Gist options
  • Save absent1706/96ed3e52cb2d14aa78160ead5bdf737a to your computer and use it in GitHub Desktop.
Save absent1706/96ed3e52cb2d14aa78160ead5bdf737a to your computer and use it in GitHub Desktop.
Send error to StackDriver Error Reporting service. See https://cloud.google.com/error-reporting/docs/setup/app-engine-flexible-environment
STACKDRIVER_ERROR_FILE = '/var/log/app_engine/custom_logs/errors.log.json'
def log_stackdriver_err(request=None, exception=None, user=None):
'''
send error to StackDriver Error Reporting service
see https://cloud.google.com/error-reporting/docs/setup/app-engine-flexible-environment
'''
def make_path_to_file(filename):
if not os.path.exists(os.path.dirname(filename)):
try:
os.makedirs(os.path.dirname(filename), 0777)
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
we_are_on_gae = 'GAE_MODULE_VERSION' in os.environ
if we_are_on_gae:
# https://cloud.google.com/error-reporting/docs/formatting-error-messages
data = {
'eventTime': datetime.datetime.utcnow().isoformat()+'000Z',
'serviceContext': {
'service': 'default',
'version': os.environ.get('GAE_MODULE_VERSION')
},
'message': traceback.format_exc() if exception \
else traceback.format_stack(),
'context': {}
}
if request:
data['context']['httpRequest'] = {
'method': request.method,
'url': request.url,
'userAgent': request.user_agent,
'referrer': request.referrer,
'remoteIp': request.remote_addr
}
if user:
data['context']['user'] = u'#{}: {} <{}>'.format(user.user_id,
user.full_name,
user.email)
make_path_to_file(STACKDRIVER_ERROR_FILE)
with open(STACKDRIVER_ERROR_FILE, 'a+') as file:
file.write('\n'+json.dumps(data))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment