jeroenbourgois
Repo:
http://github.com/jackjoe/ex_activity
Docs:
This is our first stab at a Elixir library and our very first OSS contribution! We hope it can be of use to anyone, we are using it ourselves in production.
We created the lib because after 10 years of developing PHP apps we had settled with a structured way to gather logs from our apps, in a database. We really liked this setup, so we ported it to use in our Elixir/Phoenix apps.
Usage is pretty straightforward, where you want to log, say in an API UserController, you just write:
ExActivity.log(%ExActivity.Log{
type: "api_call",
action: "UserController/list" ,
result: "user_count: 10"
})
It will write the data to the database in a Task.start_link way so it interferes as little as possible with your our µ-second response times. That way, we can log enough data and still get max performance. The first update that is coming is to make the data attribute accept structs to the log entry.
Feedback is welcome!
Trending in Announcing
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #phoenix_html
- #iex
- #graphql
- #ai
- #genstage
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex










First 7 of 7 Posts
NobbZ
Hello @jeroenbourgois!
Its much easier to get feedback when you provide necessary links to sources and library
Also it might help to better explain what your app is meant to do and whom you are refering to by “we”.
Eiji
@jeroenbourgois: Here are my ideas:
Loggerbackend, see: “Custom backends” section.controllerfield.conn, see: Phoenix.Controller.action_name/1 and Phoenix.Controller.controller_module/1Note: You could save controller like:
Look at this case>
You could change it in to ways:
For more information see: Kernel.||/2
In this line - you should have full call, please see: Avoid needless pipelines like the plague. code style rule by @lexmag.
Funny, but you could add pipe to another line
Here you have credo style guide and here its library that will look at your code with simple mix task.
Let me know what do you think about it.
jeroenbourgois
@Eiji thanks for your input! We are very new to the Elixir game so your styleguide comments are very welcome. I will look into it to make the library better!
jeroenbourgois
Just a small reply, your proposals 2, 3 and 4 make a lot of sense. The first one, not so much to is. Here is why: we created the lib just for that specific reason: we did not want to use Logger, we had it at first (logging to a papertrail backend) but while this is great for all the out-of-the-box logs you get with Phoenix, we did not want that for ‘in controller’ logs.
That being said, after looking into the docs for custom backends, it might just be what we wanted in the first place
Do the logs you sent with Logger also happen in a different process, do you know that? If so, it might just be worthwhile to develop it as a custom backend which will make it much more portable and pluggable.
Again: thank you for your input!
PS: just because I am curious, if we were to get more info from the conn that is Phoenix specific, will we have Phoenix as a dependency? Not that it would be a big problem since we are using it in a Phoenix app to start from…
OvermindDL1
Uh, why not? You can conditionally log or not based on the metadata about the logging call pretty easily… o.O
connis fromPlug, notPhoenix, so you’d only need to depend onPlug(and that is only if you wanted to match theConndirectly, otherwise access it like a map and no dependency is needed).jeroenbourgois
@Eiji was also giving an example about getting more info from the controller with Phoenix.Controller.controller_module/1, hence my question about the dependency.
We will look into the logger backend
Eiji
@jeroenbourgois: You could add it as optional dependency.