logging/api/WithGitId/StackdriverLogWriter.cs (73 lines of code) (raw):

/* * Copyright (c) 2017 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. */ using Google.Api; using Google.Cloud.Logging.V2; using Google.Cloud.Logging.Type; using Google.Cloud.DevTools.Source.V1; using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Security; using Google.Protobuf; namespace GoogleCloudSamples { public static class StackdriverLogWriter { public static string LogId { get; set; } = "YOUR-LOG-ID"; public static string ProjectId { get; set; } = "YOUR-PROJECT-ID"; public static string WriteLog( string msg, [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0, [CallerMemberName] string memberName = "") { var client = LoggingServiceV2Client.Create(); var resource = new MonitoredResource { Type = "global" }; resource.Labels["project_id"] = ProjectId; LogName logName = new LogName(ProjectId, LogId); LogEntrySourceLocation sourceLocation = new LogEntrySourceLocation { File = sourceFilePath, Line = sourceLineNumber, Function = memberName }; LogEntry logEntry = new LogEntry { LogNameAsLogName = logName, Severity = LogSeverity.Info, SourceLocation = sourceLocation, TextPayload = msg }; IDictionary<string, string> entryLabels = new Dictionary<string, string> { { "size", "large" }, { "color", "red" } }; TryAddGitRevisionId(entryLabels); client.WriteLogEntries( logName: logName, resource: resource, labels: entryLabels, entries: new[] { logEntry }, callSettings: null); return logEntry.ToString(); } private static void TryAddGitRevisionId(IDictionary<string, string> labels) { try { var gitId = SourceContext.AppSourceContext?.Git?.RevisionId ?? ""; Debug.Assert(!String.IsNullOrWhiteSpace(gitId), "No valid git revision id found.", "Make sure you have source-context.json published with the application."); labels.Add(SourceContext.GitRevisionIdLogLabel, gitId); } catch (Exception ex) when ( ex is SecurityException || ex is InvalidProtocolBufferException || ex is InvalidJsonException || ex is UnauthorizedAccessException) { // This is best-effort only, exceptions from reading/parsing the source_context.json are ignored. Debug.Fail("Exception at TryAddGitRevisionId.", ex.ToString()); } } } }