csuriano23

csuriano23

Hi there,
I have a phoenix controller from which I spawn a Task with Task.Supervisor.start_child for some async processing.
I’d like to propagate all the metadata I have in the logger of the parent process to the task logger, in order to have a continuous tracing; is there a better/standard way of doing this rather than setting a parameter on the function

Task.Supervisor.start_child(fn -> my_task(Logger.metadata()) end)

def my_task(metadata) do
  IO.puts(metadata)
end

or setting a variable to be seen from the closure:

my_logger_metadata = Logger.metadata()
Task.Supervisor.start_child(fn -> IO.puts(my_logger_metadata) end)

Thank you

Showing Posts 1 to 4

hauleth

hauleth

Not really. All approaches will effectively need the same approach. However I would do it like that:

metadata = :logger.get_process_metadata()

Task.Supervisor.start_child(fn ->
  :logger.set_process_metadata(metadata)
  my_task()
end)

So the my_task/0 will not need to know anything about logger metadata.

The reason why I use :logger API instead of Logger API is that using :logger directly do not require to change map to list and then list to map and instead just uses map directly.

csuriano23

csuriano23 OP

Thanks for the feedback!

tfwright

tfwright

I recently observed a strange error in some code using this pattern:

** (ArgumentError) argument error
logger.erl:621 :logger.set_process_metadata(:undefined)

I’m not familiar with Erlang but looking at the docs, it looks like it might not be technically safe because get_process_metadata can return :undefined whereas set_process_metadata only accepts a metadata map?

PragTob

PragTob

I mean it returns that if no process meta data is set, so if you always make sure to set it you should be save - which of course is more complex in a bigger data.

As an alternative you can use Logger.metadata/0 - which seems to return [] in this case and hence shouldn’t break.

iex(1)> :logger.get_process_metadata()
:undefined
iex(2)> Logger.metadata()
[]
— 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
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
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

Other Trending Topics Top

pckrishnadas88
In the previous part of this series, we built a Worker Pool from scratch, exploring point-to-point communication where a coordinator assi...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
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
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
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
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

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews