Comments (3)
Huge +1 to having something out-of-the-box for this; we've managed to grow several different implementations of structured logging at Zendesk and I would very much like there to be a clear gold standard here to switch to!
One thing I would like to see addressed in a built-in structured logging solution is what to do about multiple independent processes writing to stdout.
It's very common, in my experience, for apps in container environments to be expected to write their logs to stdout, where it gets collected by the container engine and then forwarded to a centralised logging solution. It's also very common to run Rails apps in a multiprocess app server like Unicorn or Puma's cluster mode, so there might be several independent Rails processes running in the one container. The problem is, by default, all of those processes will share the single stdout stream, leading to issues where structured log messages might be interleaved and thus their structure broken.
I've been sketching out a way to solve this for us at Zendesk (https://github.com/zendesk/multiproc_log_device). Essentially, it runs a parent process above Unicorn which exposes a unix socket, and reopens stdout in each process to connect to that socket. Then, the parent process can merge the logs together in a structure aware way.
I would be very interested in hearing how other Rails users have dealt with this issue, and very very interested in trying to hammer out a way this problem can be addressed in a built-in Rails structured logging solution.
from rails.
we should add structured json logging on a per-request basis
Good initiative!
Maybe logfmt
(https://brandur.org/logfmt) could be supported as an output alternative to JSON?
Assuming it's all strings and only one level deep (that's how JSON log lines are usually structured), logfmt is 1:1 with JSON log lines, so it's only a matter of output.
from rails.
Assuming it's all strings and only one level deep (that's how JSON log lines are usually structured), logfmt is 1:1 with JSON log lines, so it's only a matter of output.
It is not uncommon for JSON log lines to have multiple nested levels when using observability tools, so if logfmt is supported, I suggest making JSON the primary focus and gracefully degrading to logfmt.
Semantic Logger has a nice approach of allowing the user to choose among a list of formatters for each appender that receives the logs. In fact, if you take a look at their documentation for appenders (a concept that I think would be fantastic to have as part of this work), you'll find an example payload that shows a nested payload structure. 😁
from rails.
Related Issues (20)
- Error: "application.css" is not present in the asset pipeline. Fresh installation HOT 2
- ActiveRecord - MySQL adapter - Can't connect to local server through socket when `localhost` is specified on connection settings. HOT 2
- System tests not working on Rails 7.1.3 running on a remote machine/docker container. HOT 4
- Add support for `ActionMailer.*_delivery` callback `only` and `except` options HOT 2
- Rails logs error messages with huge stack trace that I can't silence HOT 2
- `ActiveRecord::Migration[7.0]`'s `rename_table` uses 7.1's new truncated index name format HOT 1
- ActiveStorage::FileNotFoundError (ActiveStorage::FileNotFoundError) HOT 1
- Segmentation Fault on Docker and ruby 3.3.0 HOT 4
- Credentials usage doesn't agree with the code HOT 1
- Add `jsonb` on sqlite connection adapter table definition HOT 1
- How to use Azure Managed Identity for authentication and authorization for Ruby On Rails Active Storage?
- `ActionView::Template::Error`: Missing Active Model partial when rendered from Controller declared in module HOT 2
- O(N^2) operation in `CollectionAssociation#replace_common_records_in_memory` and **another** O(N^2) operation in `ActiveStorage::Attached::Many#attach`
- belongs_to association doesn't work with composite `primary_key` option HOT 4
- Video analyzer does not detect rotation of HDR videos
- eager_load, includes load wrong data using composite primary keys and query_constraints HOT 2
- Comparing `Time` object with an integer doesn't throw an error HOT 2
- Running "bundle exec rake rdoc" more than once does not work HOT 2
- `ReferenceError: File is not defined` HOT 1
- Incorrectly raising `ReadonlyAttributeError` when autosaving `has_one` association with readonly foreign key HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rails.