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 4 to 1

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()
[]
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?

csuriano23

csuriano23 OP

Thanks for the feedback!

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.

— 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
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
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
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
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
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