Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ralpha/google_cloud_logging
Google Cloud Structured Logging structures.
https://github.com/ralpha/google_cloud_logging
gcp google logging rust rust-library
Last synced: 1 day ago
JSON representation
Google Cloud Structured Logging structures.
- Host: GitHub
- URL: https://github.com/ralpha/google_cloud_logging
- Owner: ralpha
- License: apache-2.0
- Created: 2021-12-20T16:00:18.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2021-12-20T17:53:14.000Z (about 3 years ago)
- Last Synced: 2025-01-31T22:25:41.656Z (13 days ago)
- Topics: gcp, google, logging, rust, rust-library
- Language: Rust
- Homepage:
- Size: 15.6 KB
- Stars: 5
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# Google Cloud Logging
[![Crates.io](https://img.shields.io/crates/v/google_cloud_logging)](https://crates.io/crates/google_cloud_logging/)
[![API Docs](https://img.shields.io/badge/docs.rs-google_cloud_logging-blue)](https://docs.rs/google_cloud_logging/latest/)This crate contains structures for
[Google Cloud Structured logging](https://cloud.google.com/logging/docs/structured-logging).
This allows for adding more metadata to log statements that will be interpreted by the
[Google Cloud "Logging"][Cloud_Logging] service and can be viewed in the "Logs Explorer".Some errors can also be formatted so the ["Error Reporting"][Error_Reporting] service will
group them.[Cloud_Logging]: https://cloud.google.com/logging/
[Error_Reporting]: https://cloud.google.com/error-reporting/.## Usage
Here you can see a snippet of how you can use it in you logging library.
```rust
let log_entry = GoogleCloudStructLog {
severity: Some(match level {
Level::Error => GCLogSeverity::Error,
Level::Warn => GCLogSeverity::Warning,
Level::Info => GCLogSeverity::Info,
Level::Debug => GCLogSeverity::Debug,
Level::Trace => GCLogSeverity::Default,
}),
report_type: match level {
// More info see: https://cloud.google.com/error-reporting/docs/formatting-error-messages#@type
Level::Error => Some("type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent".to_owned()),
_ => None,
},
message: Some(
format!(
"{}{}",
record.args(),
example_backtrace(),
)
),
operation: Some(GCOperation {
id: Some("My Service"),
producer: Some("MyService.Backend"),
..Default::default()
}),
source_location: Some(GCSourceLocation {
file: record.file_static(),
line: record.line().map(|s| s.to_string()),
function: record.module_path_static(),
}),
time: Some(Utc::now()),
..Default::default()
};
println!(
"{}",
serde_json::to_string(&log_entry).expect("Error during logging")
);
```To run the example use: `cargo run --example log`
This will result in the following output:
```json
{"severity":"info","message":"Start logging:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658","time":"2021-12-20T16:33:41.643966093Z","logging.googleapis.com/operation":{"id":"My Service","producer":"MyService.Backend"},"logging.googleapis.com/sourceLocation":{"file":"examples/log/main.rs","line":"11","function":"log"}}
{"severity":"warning","message":"Oh no, things might go wrong soon.:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658","time":"2021-12-20T16:33:41.644085317Z","logging.googleapis.com/operation":{"id":"My Service","producer":"MyService.Backend"},"logging.googleapis.com/sourceLocation":{"file":"examples/log/main.rs","line":"12","function":"log"}}
{"severity":"error","message":"Yeah, this is not good.:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658","@type":"type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent","time":"2021-12-20T16:33:41.644179397Z","logging.googleapis.com/operation":{"id":"My Service","producer":"MyService.Backend"},"logging.googleapis.com/sourceLocation":{"file":"examples/log/main.rs","line":"13","function":"log"}}
{"severity":"default","message":"Something went wrong in `my service`.:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658","time":"2021-12-20T16:33:41.644276526Z","logging.googleapis.com/operation":{"id":"My Service","producer":"MyService.Backend"},"logging.googleapis.com/sourceLocation":{"file":"examples/log/main.rs","line":"14","function":"log"}}
```
Each line in the output above is 1 log message. Each log message is a json string.
Note that this is **not** an array of json messages. Each json object is separated by a newline.View pretty print:
```json
{
"severity": "info",
"message": "Start logging:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658",
"time": "2021-12-20T16:38:13.654978059Z",
"logging.googleapis.com/operation": {
"id": "My Service",
"producer": "MyService.Backend"
},
"logging.googleapis.com/sourceLocation": {
"file": "examples/log/main.rs",
"line": "11",
"function": "log"
}
}
{
"severity": "warning",
"message": "Oh no, things might go wrong soon.:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658",
"time": "2021-12-20T16:38:13.655138074Z",
"logging.googleapis.com/operation": {
"id": "My Service",
"producer": "MyService.Backend"
},
"logging.googleapis.com/sourceLocation": {
"file": "examples/log/main.rs",
"line": "12",
"function": "log"
}
}
{
"severity": "error",
"message": "Yeah, this is not good.:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658",
"@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
"time": "2021-12-20T16:38:13.655236672Z",
"logging.googleapis.com/operation": {
"id": "My Service",
"producer": "MyService.Backend"
},
"logging.googleapis.com/sourceLocation": {
"file": "examples/log/main.rs",
"line": "13",
"function": "log"
}
}
{
"severity": "default",
"message": "Something went wrong in `my service`.:\n at services::module_name::he77c0bac773c93b4 line: 42\n at services::module_name::h7ad5e699ac5d6658",
"time": "2021-12-20T16:38:13.655335729Z",
"logging.googleapis.com/operation": {
"id": "My Service",
"producer": "MyService.Backend"
},
"logging.googleapis.com/sourceLocation": {
"file": "examples/log/main.rs",
"line": "14",
"function": "log"
}
}
```## Tips
When logging your Rust service you might also want to capture panic message and format them
the same way. This can be done using a
[panic hook](https://doc.rust-lang.org/std/panic/fn.set_hook.html).## License
The code in this project is licensed under the MIT or Apache 2.0 license.
All contributions, code and documentation, to this project will be similarly licensed.