austinsmorris

austinsmorris

Does anybody know of a JSON backend for Logger that works with the updates in elixir 1.10? I had been using logger_json but that broke pretty bad with the erlang/otp logger integration introduced in elixir 1.10.0.

Thanks@

Showing Posts 1 to 6

chulkilee

chulkilee

I wrote a formatter (not logger backend) - metadata_logger
. it’s very conservative (e.g. it avoids own transformation - e.g. passing pid would lead to error message)

For Elixir 1.10 and OTP 22 - they introduced new metadata and I fixed the library at Handle metadata by chulkilee · Pull Request #12 · elixir-metadata-logger/metadata_logger · GitHub

fuelen

fuelen

we use ink at work.
Test with Elixir 1.10:

ex(4)> Logger.add_backend(Ink)     
{:ok, #PID<0.24432.0>}
iex(5)> Logger.remove_backend(:console)
:ok
iex(6)> require Logger
Logger 
iex(7)> Logger.info("test", %{current_user_id: "qweqe"})
{"current_user_id":"qweqe","domain":["elixir"],"erlang_pid":"#PID<0.24423.0>","file":"iex","gl":"#PID<0.65.0>","level":"info","message":"test","time":1580851293206227,"timestamp":"2020-02-04T23:21:33.206Z"}
:ok
hauleth

hauleth

How did it break? Do you have link? Maybe I will be able to help.

In general the plan is to shift away from Elixir’s Logger formatters and backends and instead make use of Erlang’s logger.

So the “simplest” way for “modern” handling would be to (unfortunately) write custom formatter (that implements one function format/2) and then use it together with whatever backend you like.

EDIT:
I will try to provide an example later.

chulkilee

chulkilee

I checked the failed CI job from test elixir 1.10 by austinsmorris · Pull Request #30 · Nebo15/logger_json · GitHub

(Protocol.UndefinedError) protocol Jason.Encoder not implemented for pid<0.63.0> of type PID, Jason.Encoder protocol must always be explicitly implemented.

It seems like the same problem I had with - Handle metadata by chulkilee · Pull Request #12 · elixir-metadata-logger/metadata_logger · GitHub

Basically, Jason does not transform pid value - and the new erlang logger integration introduces new default metadata gl which is pid.

See logger — OTP 29.0.2 (kernel 11.0.2) for the list of metadata set by erlang

josevalim

josevalim

Creator of Elixir

Luckily the fix should be easy: just remove the fields with process information from the metadata. It probably already keeps a list of fields to remove, we just need to update it.

chulkilee

chulkilee

As erlang and elixir logger sees the same logger message.. new metadata field may be added by either erlang or elixir. I believe previously Elixir.Logger would transform or fill metadata… but now I guess it does not (or will not) transform metadata, as a log message can be from erlang.

Anyway, metadata_loggerI converts metadata to map (dropping duplicated metadata!) and convert “known” values (e.g. gl).

Instead of doing converting “known” values - I may make it iterate all metadata (recursively or not) and transform values not implementing Jason protocol… but I want to avoid for performance reason. Or I may just implement Jason protocol to pid… but should I? I don’t want to “pollute” module not defined by my library..

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
ryanwinchester
apply_graft/2 doesn’t rewrite an add_many sub-workflow’s deps on an add step. Grafted jobs cancel with “upstream job was deleted” Version...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews