Serilog sink that writes events to Google Cloud Logging.
- Built for
net6.0
,net5.0
,netstandard2.0
- Release Notes
Install package from Nuget:
dotnet add package Serilog.Sinks.GoogleCloudLogging
var config = new GoogleCloudLoggingSinkOptions { ProjectId = "YOUR_PROJECT_ID" };
Log.Logger = new LoggerConfiguration().WriteTo.GoogleCloudLogging(config).CreateLogger();
This requires the serilog-settings-configuration
package.
"Serilog": {
"Using": [ "Serilog.Sinks.GoogleCloudLogging" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "GoogleCloudLogging",
"Args": {
"projectID": "PROJECT-ID-12345",
"restrictedToMinimumLevel": "Information",
"labels": {
"foo": "bar"
}
}
}
]
}
var config = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(config).CreateLogger();
- Serilog example for .NET 6: https://blog.datalust.co/using-serilog-in-net-6/
This library uses the Google Cloud .NET client and Application Default Credentials. The Logs Writer
permission is required to send logs. There are several different ways to set credentials:
- GCE, GKE, Cloud Run, AppEngine and other managed services will have the Application Default Credentials set to the active service account for the resource and can be used without any additional configuration.
- Authenticate manually with the gcloud SDK on a server to set the Application Default Credentials.
- Set the
GOOGLE_APPLICATION_CREDENTIALS
environment variable to specify the path to your JSON credentials file. - Set the
GoogleCredentialJson
config option to pass in a JSON string (the contents of your JSON credentials file).
- Serilog is designed for structured logging which is fully supported by Google Cloud. Logs are sent as a JSON object (
JsonPayload
in the protobuf API) with labels, properties, metadata and any other data like stack traces automatically attached. - Numeric values in labels and properties will be converted to
double
during serialization because that is the only numeric type supported by JSON. Large integers and floating-point values will lose precision. If you want the exact value preserved then log it as a string instead. - GCP Error Reporting is separate from Cloud Logging and will automatically capture error messages only if they have an
Exception
attached. It is not based on log severity level. - View logs in the GCP Logs Explorer: https://console.cloud.google.com/logs/viewer
Option | Description |
---|---|
ProjectId | ID (not name) of GCP project where logs will be sent. Optional if running in GCP. Required if running elsewhere or to override the destination. |
ResourceType | Resource type for logs. Automatically identified if running in GCP or will default to "global". See Monitored Resources and Services for supported types. |
LogName | Name of the log. Default is "Default", or will use SourceContext is setting is enabled. |
Labels | Optional Dictionary<string, string> labels added to all log entries. |
ResourceLabels | Optional Dictionary<string, string> labels added to all log entries, for the resource type. See Monitored Resources and Services for recognized labels. |
ServiceName | Name of the service added as metadata to log entries. Required for logged exceptions to be forwarded to StackDriver Error Reporting. |
ServiceVersion | Version of the service added as metadata to log entries. Required for logged exceptions to be forwarded to StackDriver Error Reporting. |
UseSourceContextAsLogName | The log name for a log entry will be set to the SourceContext property if available. Default is true . |
UseLogCorrelation | Integrate logs with Cloud Trace by setting Trace , SpanId , TraceSampled properties if available. Default is true . |
GoogleCredentialJson | JSON string to override Application Default Credentials (contents of your credential file). |
This table shows the mapping from Serilog LogLevel
to Google Cloud Logging LogSeverity
Serilog | Cloud Logging |
---|---|
Verbose | Debug |
Debug | Debug |
Information | Info |
Warning | Warning |
Error | Error |
Fatal | Critical |