Comments (10)
I tend to think that if you have a high traffic site you're probably
better off just logging errors to files, then using another monitoring
tool to graph errors and email you in case the error rate spikes or
something.
Achieving this feature in monolog would make logging stuff a lot slower
IMO (though granted this could only be done in case an error actually
triggers, so hopefully not happen on most requests). Now if someone has
a sane idea and wants to do it, as long as it's optional I am not really
against it, but I am not sure the "sane" requirement can be met :)
from monolog.
https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/DeduplicationHandler.php fixes it
from monolog.
related to #34
from monolog.
This isn't a trivial problem because those messages span multiple requests, so one needs to filter those across requests.
from monolog.
I second helix opinion.
Jordi, what do you think about the idea of some sort of "cache", with a key related to message, and value consisting on a count of occurrences, and the datetime when message was written first?
Such cachefile could be loaded at service startup and updated upon "cache expiration", accordingly to config settings (IE write to this handler only after N hours have passed since last written event). It would prevent much logging, and especially overwhelming situations (lots of file descriptors open, many e-mail connection attempts, ...) on high traffic websites.
What do you think?
from monolog.
couldn't this work, like the FingersCrossedHandler
works?
from monolog.
@staabm No, because the goal is to avoid repeating alert emails for separate web requests.
@Seldaek I also think using a tool like LogStash or LogEntries is a better way to achieve it than implementing this in Monolog
from monolog.
@Seldaek Good points indeed. What I like about Monolog is being flexible, so that it can be used both in dev and production env. Hor scaling helps w/ load, so that having a local logger is not a concern (for now). And there are no additional tools to add; it can be used both on complex (= high traffic) architectures, and small websites. That helps a lot internally, with maintenance.
Don't know if you'd consider my idea sane enough, though. ;-) I was thinking about having tuples MSG_ID => (time,msg,severity) with MSG_ID being a key generated from monolog_channel_id + handler_id + message_content, with the aim of being unique. Then, within abstractHandler there'd be a ignore_within_mins variable. If null (default value) it'd work as it is now. Otherwise it would load proper key from "cache" (json, sqlite, redis, memcache, ...) and evaluate time last same message was sent against ignore_within_mins variable. If not matched, process message. Else return.
The idea is to have a setIgnoreCache method, accepting the threshold (minutes) and a cacheWriterHanddler, which could deal like a key/value reader (through a simple getKey/putKey interface) with the aforementioned caching systems. So, if a cacheWriteHandler is set within an handler, the aforementioned is taken into account, before message is considered. Otherwise it is not, and thinkgs continue to work as they do now. What do you think?
@stof Thanks for the hint about logstash. Didn't know it, I will definitely give it a look!
from monolog.
@maraspin sounds more or less ok from what I understood. I'd be happy to have a PSR Cache interface before doing this though.
from monolog.
Thank you, @Seldaek
from monolog.
Related Issues (20)
- Monolog\Level (enum) against Constants HOT 6
- Uncaught Error: Class "Monolog\Logger" not found HOT 3
- Fatal error: method_exists(): The script tried to execute a method or access a property of an incomplete object. HOT 2
- Is it possible to indent the stacktrace?
- How should we catch exceptions with the SlackWebhookHandler cURL requests? HOT 2
- LogglyHandler - incorrect records comparison. HOT 2
- PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 102863464 bytes) *** monolog/src/Monolog/Formatter/HtmlFormatter.php on line 64 HOT 1
- OpenObserve Handler HOT 1
- Brevo mail api handler HOT 2
- Site Lacks a Favicon!!
- Rotating logs based on cron syntax HOT 3
- PHPDoc out of sync on StreamHandler HOT 1
- Is it possibile to log to the stream that is completely outside of the application environment? HOT 5
- Issue with Logging to stdout in Laravel 10.21 using Monolog v3 EXCEPTION#Cannot log request: fwrite(): Write of 378 bytes failed with errno=32 Broken pipe HOT 32
- The file does not close after writing HOT 5
- How do I use includeStacktraces? HOT 1
- Support more flexible normalizer HOT 2
- cannot access private method HOT 7
- Add support for Elasticsearch with Bulk API and data stream HOT 1
- Could a new release be considered to remove the 0.7MB logo from the package ? HOT 1
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 monolog.