Write structured logs
Stay organized with collections
Save and categorize content based on your preferences.
Writes structured log entries with request log correlation using common libraries.
Explore further
For detailed documentation that includes this code sample, see the following:
Code sample
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],[],[],[],null,["# Write structured logs\n\nWrites structured log entries with request log correlation using common libraries.\n\nExplore further\n---------------\n\n\nFor detailed documentation that includes this code sample, see the following:\n\n- [Logging and viewing logs](/anthos/run/archive/docs/logging)\n- [Logging and viewing logs in Cloud Run](/run/docs/logging)\n- [Logging and viewing logs in Knative serving](/kubernetes-engine/enterprise/knative-serving/docs/logging)\n- [View and write Cloud Run function logs](/functions/1stgendocs/monitoring/logging)\n\nCode sample\n-----------\n\n### Go\n\n\nTo authenticate to Cloud Run, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n\n func init() {\n \t// Disable log prefixes such as the default timestamp.\n \t// Prefix text prevents the message from being parsed as JSON.\n \t// A timestamp is added when shipping logs to Cloud Logging.\n \tlog.SetFlags(0)\n }\n\n func indexHandler(w http.ResponseWriter, r *http.Request) {\n \t// Uncomment and populate this variable in your code:\n \t// projectID = \"The project ID of your Cloud Run service\"\n\n \t// Derive the traceID associated with the current request.\n \tvar trace string\n \tif projectID != \"\" {\n \t\ttraceHeader := r.Header.Get(\"X-Cloud-Trace-Context\")\n \t\ttraceParts := strings.Split(traceHeader, \"/\")\n \t\tif len(traceParts) \u003e 0 && len(traceParts[0]) \u003e 0 {\n \t\t\ttrace = fmt.Sprintf(\"projects/%s/traces/%s\", projectID, traceParts[0])\n \t\t}\n \t}\n\n \tlog.Println(Entry{\n \t\tSeverity: \"NOTICE\",\n \t\tMessage: \"This is the default display field.\",\n \t\tComponent: \"arbitrary-property\",\n \t\tTrace: trace,\n \t})\n\n \tfmt.Fprintln(w, \"Hello Logger!\")\n }\n\n### Java\n\n\nTo authenticate to Cloud Run, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n // Build structured log messages as an object.\n Object globalLogFields = null;\n\n // Add log correlation to nest all log messages beneath request log in Log Viewer.\n // TODO(developer): delete this code if you're creating a Cloud\n // Function and it is *NOT* triggered by HTTP.\n String traceHeader = req.headers(\"x-cloud-trace-context\");\n if (traceHeader != null && project != null) {\n String trace = traceHeader.split(\"/\")[0];\n globalLogFields =\n kv(\n \"logging.googleapis.com/trace\",\n String.format(\"projects/%s/traces/%s\", project, trace));\n }\n // -- End log correlation code --\n\n // Create a structured log entry using key value pairs.\n // For instantiating the \"logger\" variable, see\n // https://cloud.google.com/run/docs/logging#run_manual_logging-java\n logger.error(\n \"This is the default display field.\",\n kv(\"component\", \"arbitrary-property\"),\n kv(\"severity\", \"NOTICE\"),\n globalLogFields);\n\n### Node.js\n\n\nTo authenticate to Cloud Run, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n\n // Uncomment and populate this variable in your code:\n // const project = 'The project ID of your function or Cloud Run service';\n\n // Build structured log messages as an object.\n const globalLogFields = {};\n\n // Add log correlation to nest all log messages beneath request log in Log Viewer.\n // (This only works for HTTP-based invocations where `req` is defined.)\n if (typeof req !== 'undefined') {\n const traceHeader = req.header('X-Cloud-Trace-Context');\n if (traceHeader && project) {\n const [trace] = traceHeader.split('/');\n globalLogFields['logging.googleapis.com/trace'] =\n `projects/${project}/traces/${trace}`;\n }\n }\n\n // Complete a structured log entry.\n const entry = Object.assign(\n {\n severity: 'NOTICE',\n message: 'This is the default display field.',\n // Log viewer accesses 'component' as 'jsonPayload.component'.\n component: 'arbitrary-property',\n },\n globalLogFields\n );\n\n // Serialize to a JSON string and output.\n console.log(JSON.stringify(entry));\n\n### Python\n\n\nTo authenticate to Cloud Run, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n # Uncomment and populate this variable in your code:\n # PROJECT = 'The project ID of your Cloud Run service';\n\n # Build structured log messages as an object.\n global_log_fields = {}\n\n # Add log correlation to nest all log messages.\n # This is only relevant in HTTP-based contexts, and is ignored elsewhere.\n # (In particular, non-HTTP-based Cloud Functions.)\n request_is_defined = \"request\" in globals() or \"request\" in locals()\n if request_is_defined and request:\n trace_header = request.headers.get(\"X-Cloud-Trace-Context\")\n\n if trace_header and PROJECT:\n trace = trace_header.split(\"/\")\n global_log_fields[\n \"logging.googleapis.com/trace\"\n ] = f\"projects/{PROJECT}/traces/{trace[0]}\"\n\n # Complete a structured log entry.\n entry = dict(\n severity=\"NOTICE\",\n message=\"This is the default display field.\",\n # Log viewer accesses 'component' as jsonPayload.component'.\n component=\"arbitrary-property\",\n **global_log_fields,\n )\n\n print(json.dumps(entry))\n\nWhat's next\n-----------\n\n\nTo search and filter code samples for other Google Cloud products, see the\n[Google Cloud sample browser](/docs/samples?product=cloudrun)."]]