How to add colours to Logger

Can anyone provide please an example how to add, lets say purple color, to console logger backend?
I tried to redo the same what I’ve found in Ecto’s source code, but unfortunately it didn’t give any result.

1 Like

Can you please show an example of what you have tried and provide a better description of what you got (or even provide a screenshot) and also try to explain or mock what you had expected instead?

Thanks for your response.

I misunderstood documentation and was passing color parameter instead of ansi_color
So here is how to specify a color

Logger.debug("Elixir is awesome", ansi_color: :blue)
4 Likes

I could not get this to work.

I’m using conEmu on windows.
Any help please?

1 Like

It is ‘just working’ in ConEmu here in Windows 10 when I run the above code? Do you have the console set up right?

1 Like

I guess so, I applied this scheme to my .iex.exs file and i have a purple IEx> prompt, so I know i have colors enabled…

Application.put_env(:elixir, :ansi_enabled, true)
IEx.configure(
  inspect: [limit: :infinity, pretty: true, structs: true, width: 210],
  colors: [enabled: true],
  default_prompt: [
    "\e[G",    # ANSI CHA, move cursor to column 1
    :magenta,
    "%prefix", # IEx prompt variable
    ">",       # plain string
    :reset
  ] |> IO.ANSI.format |> IO.chardata_to_string
 )

but still, I cannot get Logger to emit colored logs…strange

2 Likes

To get colors in logger, add :colors to config

config :logger, :console, format: "[$date $time] $message\n", colors: [enabled: true]

To get IEx style colours in Logger:

  @syntax_colors [number: :yellow, atom: :cyan, string: :green, boolean: :magenta, nil: :magenta]
  @format [
    pretty: true,
    structs: true,
    syntax_colors: @syntax_colors
  ]

Then write logs like so:

Logger.debug(inspect(%{status: 2, message: "Done", rows: 100}, @format))
3 Likes

Is this really the only way?

I realized something dumb that I forgot to mention, the syntax color for info is white… So the reason I never saw the color in my dumb tests was my fault. If you 're looking for something like rust’s env_logger or any nodejs logging library. The level isn’t the color that changes, it’s the entire log. I hope randos from the other programming language worlds find this to be helpful in a latenight configuration hackathon.

A simple example is Logger.info will return an all white output and Logger.warn will return an all yellow result.

3 Likes