Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change the default ConsoleFormatter to Json when running in a container #2725

Closed
Tracked by #5929
shirhatti opened this issue Jan 22, 2021 · 45 comments
Closed
Tracked by #5929
Assignees
Labels
area-dockerfiles enhancement needs-announcement An announcement is needed to discuss customer impact

Comments

@shirhatti
Copy link

Currently, the console logger in CreateDefaultBuilder() defaults to a multiline human-readable output. This doesn’t work well in container environments where folks use tools like fluentd or Azure Monitor to collect those logs.

https://github.com/dotnet/runtime/blob/8a52f1e948b6f22f418817ec1068f07b8dae2aa5/src/libraries/Microsoft.Extensions.Hosting/src/Host.cs#L108

Some limitations of the current formatter:

  1. Individual log are split across multiple log entries
  2. Structure is no longer preserved
  3. Stack traces are torn across multiple lines
  4. Logs have color codes embedded in them

Untitled

What I would like to do is to switch the default ConsoleLoggerFormatter to output structured JSON logs instead of our current format when running in a container.

Old output:

warn: Microsoft.AspNetCore.Server.HttpSys.MessagePump[37]
      Overriding address(es) ''. Binding to endpoints added to UrlPrefixes instead.
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:7000/
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:7001/
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:7002/
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\Users\shirh\source\temp\web50

New output:

{"EventId":37,"LogLevel":"Warning","Category":"Microsoft.AspNetCore.Server.HttpSys.MessagePump","Message":"Overriding address(es) \u0027\u0027. Binding to endpoints added to UrlPrefixes instead.","State":{"Message":"Overriding address(es) \u0027\u0027. Binding to endpoints added to UrlPrefixes instead.","{OriginalFormat}":"Overriding address(es) \u0027\u0027. Binding to endpoints added to UrlPrefixes instead."}}
{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Now listening on: http://localhost:7000/","State":{"Message":"Now listening on: http://localhost:7000/","address":"http://localhost:7000/","{OriginalFormat}":"Now listening on: {address}"}}
{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Now listening on: http://localhost:7001/","State":{"Message":"Now listening on: http://localhost:7001/","address":"http://localhost:7001/","{OriginalFormat}":"Now listening on: {address}"}}
{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Now listening on: http://localhost:7002/","State":{"Message":"Now listening on: http://localhost:7002/","address":"http://localhost:7002/","{OriginalFormat}":"Now listening on: {address}"}}
{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Application started. Press Ctrl\u002BC to shut down.","State":{"Message":"Application started. Press Ctrl\u002BC to shut down.","{OriginalFormat}":"Application started. Press Ctrl\u002BC to shut down."}}
{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Hosting environment: Development","State":{"Message":"Hosting environment: Development","envName":"Development","{OriginalFormat}":"Hosting environment: {envName}"}}
{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Content root path: C:\\Users\\shirh\\source\\temp\\web50","State":{"Message":"Content root path: C:\\Users\\shirh\\source\\temp\\web50","contentRoot":"C:\\Users\\shirh\\source\\temp\\web50","{OriginalFormat}":"Content root path: {contentRoot}"}}

Proposal

Use the DOTNET_RUNNING_IN_CONTAINER environment variable to control which ConsoleFormatter we default to.

DOTNET_RUNNING_IN_CONTAINER ConsoleFormatter
True JsonConsoleFormatter
False SimpleConsoleFormatter

Questions

Should we make this change to all images or just aspnet? Just aspnet is very hard because we have to decide whether to adopt the aspnet or not aspnet behavior for the SDK. Maybe this is easier than I think, but I can imagine SDK scenarios where people use aspnet. Maybe that is easy to scope out.

Unless folks opt-in to using ILogger there’s no way to make this change to all images. We can do this for all hosted (ASP.NET/worker) app models.

If you chose to Console.WriteLine directly, there’s not much we can (or should) do.

Would this behavior be better as opt-in?

Possibly? That’s why I was hoping to solicit feedback before making the change.

Why is this behavior important for ASP.NET Core in containers and not elsewhere?
I am surprised we are limiting the change to only containers when I'd expect this problem is similarly impactful for non-container scenarios.

Looking at the common deployment targets for hosted app models:

  • Deploy on Windows with IIS
    • There is no Console attached and console format isn’t applicable
  • Deploy on Windows as a Windows Service
    • There is no Console attached and console format isn’t applicable
  • Deploy on Linux as a systemd service
    • Use the systemd console formatter
  • Deploy on Linux as a container
    • Use the json formatter

Of the top four most common deployment targets, it seems like Linux containers are the only scenario where defaulting to json makes sense.
However, given that the change is mostly inconsequential on Windows, I could be convinced that this change needs to made more broadly.

What do you think of the scenario w/rt SDK containers? Do you think users will want to use the json formatter in that container?

There’s no impact here to other processes in a container. The change we’re discussing only impacts the output of hosted applications. If you do happen to build and run in an SDK container, then yes I expect the console logging from your hosted application to be JSON formatted.

Does this change the behavior during development?

Yes, I propose we gate this change solely on running in a container. The hosting environment (IWebHostEnvironment) has no impact.

👀 @maryamariyan @richlander @davidfowl @noahfalk

@ghost
Copy link

ghost commented Jan 22, 2021

Tagging subscribers to this area: @maryamariyan
See info in area-owners.md if you want to be subscribed.

Issue Details

Currently, the console logger in CreateDefaultBuilder() defaults to a multiline human-readable output. This doesn’t work well in container environments where folks use tools like fluentd or Azure Monitor to collect those logs.

https://github.com/dotnet/runtime/blob/8a52f1e948b6f22f418817ec1068f07b8dae2aa5/src/libraries/Microsoft.Extensions.Hosting/src/Host.cs#L108

Some limitations of the current formatter:

  1. Individual log are split across multiple log entries
  2. Structure is no longer preserved
  3. Stack traces are torn across multiple lines
  4. Logs have color codes embedded in them

Untitled

What I would like to do is to switch the default ConsoleLoggerFormatter to output structured JSON logs instead of our current format when running in a container.

Proposal

Use the DOTNET_RUNNING_IN_CONTAINER environment variable to control which ConsoleFormatter we default to.

DOTNET_RUNNING_IN_CONTAINER ConsoleFormatter
True JsonConsoleFormatter
False SimpleConsoleFormatter

Questions

Should we make this change to all images or just aspnet? Just aspnet is very hard because we have to decide whether to adopt the aspnet or not aspnet behavior for the SDK. Maybe this is easier than I think, but I can imagine SDK scenarios where people use aspnet. Maybe that is easy to scope out.

Unless folks opt-in to using ILogger there’s no way to make this change to all images. We can do this for all hosted (ASP.NET/worker) app models.

If you chose to Console.WriteLine directly, there’s not much we can (or should) do.

Would this behavior be better as opt-in?

Possibly? That’s why I was hoping to solicit feedback before making the change.

Why is this behavior important for ASP.NET Core in containers and not elsewhere?
I am surprised we are limiting the change to only containers when I'd expect this problem is similarly impactful for non-container scenarios.

Looking at the common deployment targets for hosted app models:

  • Deploy on Windows with IIS
    • There is no Console attached and console format isn’t applicable
  • Deploy on Windows as a Windows Service
    • There is no Console attached and console format isn’t applicable
  • Deploy on Linux as a systemd service
    • Use the systemd console formatter
  • Deploy on Linux as a container
    • Use the json formatter

Of the top four most common deployment targets, it seems like Linux containers are the only scenario where defaulting to json makes sense.
However, given that the change is mostly inconsequential on Windows, I could be convinced that this change needs to made more broadly.

What do you think of the scenario w/rt SDK containers? Do you think users will want to use the json formatter in that container?

There’s no impact here to other processes in a container. The change we’re discussing only impacts the output of hosted applications. If you do happen to build and run in an SDK container, then yes I expect the console logging from your hosted application to be JSON formatted.

👀 @maryamariyan @richlander @davidfowl @noahfalk

Author: shirhatti
Assignees: -
Labels:

area-Extensions-Logging

Milestone: -

@ericstj
Copy link
Member

ericstj commented Feb 4, 2021

This doesn’t work well in container environments where folks use tools like fluentd or Azure Monitor to collect those logs.

Is this the only case where folks want a different default logger? Seems like correlation rather than causation. Would it make more sense to do this whenever the console is redirected?

Use the DOTNET_RUNNING_IN_CONTAINER environment variable to control which ConsoleFormatter we default to.

If they can set an environment variable, why not just set the logger this way? Goes back to the correlation question.

@shirhatti
Copy link
Author

shirhatti commented Feb 8, 2021

Would it make more sense to do this whenever the console is redirected?

It may not be possible to tell. If I'm writing to stdout in Docker, there's no way to tell what logging driver is used and whether it's being redirected. Console.IsOutputRedirected doesn't work in this case.

If they can set an environment variable, why not just set the logger this way?

This environment variable is already baked into all container images we (dotnet) produce. See- https://github.com/dotnet/dotnet-docker/blob/master/src/runtime-deps/3.1/alpine3.12/amd64/Dockerfile#L18

My less preferred option is to detect whether we're in a container using something like what we have below:

public static bool IsInDockerContainer
{
    get
    {
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            // Check if one of the control groups of this process is owned by docker
            if (File.ReadAllText("/proc/self/cgroup").Contains("/docker/"))
            {
                return true;
            }

            // Most of the control groups are owned by "kubepods" when running in kubernetes;
            // Check for docker environment file
            return File.Exists("/.dockerenv");
        }

        // TODO: Add detection for other platforms
        return false;
    }
}

@shirhatti
Copy link
Author

@maryamariyan I would rather we do this in an earlier preview since this is a breaking behavior change

@shirhatti
Copy link
Author

shirhatti commented Mar 5, 2021

As a third option, we could invent a new variable for this. There is some prior art for using a new variable- https://github.com/dotnet/runtime/blob/79ae74f5ca5c8a6fe3a48935e85bd7374959c570/src/libraries/Microsoft.Extensions.FileProviders.Physical/src/PhysicalFileProvider.cs#L24

@shirhatti
Copy link
Author

For sake of completeness, I should also mention that aspnetcore already uses the existing DOTNET_RUNNING_IN_CONTAINER variable- https://github.com/dotnet/aspnetcore/blob/c925f99cddac0df90ed0bc4a07ecda6b054a0b02/src/DataProtection/DataProtection/src/Internal/ContainerUtils.cs#L15

@ericstj
Copy link
Member

ericstj commented Mar 5, 2021

we could invent a new variable for this.

That's what I was getting at with

If they can set an environment variable, why not just set the logger this way

I'm fine either way, but trying to think about whether all customers who set DOTNET_RUNNING_IN_CONTAINER want the new behavior. If someone who's already setting DOTNET_RUNNING_IN_CONTAINER decides they don't want the new behavior, what should they do?

Are there any other customers who want this behavior but don't want to set DOTNET_RUNNING_IN_CONTAINER?

@shirhatti
Copy link
Author

If someone who's already setting DOTNET_RUNNING_IN_CONTAINER decides they don't want the new behavior, what should they do?

Be more explicit in their code about which logger formatter they want to use.

Are there any other customers who want this behavior but don't want to set DOTNET_RUNNING_IN_CONTAINER?

Possibly. I tried to answer that with the FAQ in my issue, but I'll repost it here 😄

Looking at the common deployment targets for hosted app models:

  • Deploy on Windows with IIS
    • There is no Console attached and console format isn’t applicable
  • Deploy on Windows as a Windows Service
    • There is no Console attached and console format isn’t applicable
  • Deploy on Linux as a systemd service
    • Use the systemd console formatter
  • Deploy on Linux as a container
    • Use the json formatter

Of the top four most common deployment targets, it seems like Linux containers are the only scenario where defaulting to json makes sense.
However, given that the change is mostly inconsequential on Windows, I could be convinced that this change needs to made more broadly.

@maryamariyan
Copy link
Member

maryamariyan commented Mar 29, 2021

we could invent a new variable for this.

Seems like there is agreement on taking this approach

maryamariyan referenced this issue in maryamariyan/runtime Apr 6, 2021
maryamariyan referenced this issue in maryamariyan/runtime Apr 6, 2021
@maryamariyan maryamariyan self-assigned this Apr 6, 2021
@maryamariyan
Copy link
Member

maryamariyan commented Apr 7, 2021

So the fix plan for this issue here is to have dotnet docker images take environment variable Logging__Console__FormatterName="Json" which will ensure console logs to have Json format by default.

@shirhatti @MichaelSimons

@MichaelSimons MichaelSimons transferred this issue from dotnet/runtime Apr 7, 2021
@dotnet-issue-labeler
Copy link

I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label.

@MichaelSimons
Copy link
Member

MichaelSimons commented Apr 14, 2021

[Triage] This was transferred to dotnet-docker as a result of the discussion in dotnet/runtime#50812.

To begin with we are proposing to set Logging__Console__FormatterName="Json" in the aspnet image and unset it in the sdk image.

This change should be made in 6.0 onward. It would be a breaking change to make in released versions.

@oskrabanek
Copy link

Is there a way how to unset the variable? Using ENV Logging__Console__FormatterName= nor RUN unset Logging__Console__FormatterName doesn't work and we don't want to set this value as environment variable as it overrides the setting we already have in appsettings.json.

@davidfowl
Copy link
Member

Seems like we should revert this change. It's causing more pain then good. We can document the switch to JSON so people can put it in their containers if they want to.

cc @richlander @MichaelSimons @noahfalk

@ghord
Copy link

ghord commented Jan 16, 2022

While not a big issue for me, it looks a little weird when every other container I'm using is outputting human readable logs (redis/postgres/haproxy etc) and AspNetCore app just dumps Json.

@dracan
Copy link

dracan commented Jan 16, 2022

While not a big issue for me, it looks a little weird when every other container I'm using is outputting human readable logs (redis/postgres/haproxy etc) and AspNetCore app just dumps Json.

This is what I thought too. If I open any of my k8s clusters and look at the logs of any of the system/plugin pods - none of them are outputting JSON. So it's making .NET quite inconsistent, even in the container/k8s world.

@noahfalk
Copy link
Member

Seems like we should revert this change

Agreed : )

I think #2748 is the relevant change to revert.
@richlander @MichaelSimons @mthalman @maryamariyan @ericstj - any concerns around reverting this?

@mthalman
Copy link
Member

mthalman commented Jan 19, 2022

I'm open to reverting for .NET 7 but not necessarily for .NET 6. This change in behavior was already announced as part of the .NET 6 release. Changing it in a servicing release will introduce another wave of feedback from people affected by the change.

There was a reason this change was made, right? What's the impact to the UX if the formatter is defaulted back to console? I'd like to see a thorough analysis from the diagnostics team explaining what the state of things should look like and how it impacts the UX.

@MichaelSimons
Copy link
Member

any concerns around reverting this?

Reverting this will impact customers who have taken a dependency on the JSON format. Does anyone have a sense of how many this is? Our stated policy is to not make breaking changes to the images during servicing releases. If we do decide to make an exception, we will need to broadcast this (e.g. post announcements, include in release notes, etc.). Adding an image variant with the human readable formatter is another option to consider. This has issues as well but is an option.

@sylvaingirardbe
Copy link

There was a reason this change was made, right?

IMHO this should never have been the case. This kind of configuration is part of the application and shouldn’t be altered by an implementation detail such as the infrastructure the application is running on. Problem is that people go looking in the docs for logging configuration and there’s no mentioning of this to be found, making it all the more confusing.

@oskrabanek
Copy link

I'm open to reverting for .NET 7 but not necessarily for .NET 6. This change in behavior was already announced as part of the .NET 6 release. Changing it in a servicing release will introduce another wave of feedback from people affected by the change.

There was a reason this change was made, right? What's the impact to the UX if the formatter is defaulted back to console? I'd like to see a thorough analysis from the diagnostics team explaining what the state of things should look like and how it impacts the UX.

The issue with this change is that it's overriding the behavior set in appsettings.json and causing a lot of confusion. For example we have a boilerplate based on this and we've spent a significant amount of time investigating why the logs are suddenly formatter as JSON although we have configuration set to Simple Console. This change is not cancelable in the image causing the setting to be ignored and thus more confusion for the developers. Anyone can set the configuration on appsettings.json or in the image, but unset it is quite complex.

@davidfowl
Copy link
Member

I feel like we should take the breaking change hit, but I'm not sure if we have prior art here. I think we revert the change and make an announcement.

@MichaelSimons
Copy link
Member

Who is the active PM for diagnostics? They should be chiming in.

@noahfalk
Copy link
Member

I'd like to see a thorough analysis from the diagnostics team explaining what the state of things should look like and how it impacts the UX.

The PM was @shirhatti, but he recently left Microsoft so I think the decision will fall to us. He did discuss it with me in the past and the rationale I recall is much the same as what he wrote above. I think it just came down to a belief (perhaps an inaccurate one given feedback) that people would value JSON input for its integration with automated log collectors more than they would miss the original format for human readability. We can replicate the analysis on how the logs appear under different human and automated log collection scenarios but I expect everyone will agree which scenarios look better and which look worse, and then it will still be a judgement call on picking which scenarios get the benefit of the default and which do not.

In terms of options to move forward various thoughts:

  1. We do the breaking change now. My educated guess is that the JSON behavior hasn't been available for long and doesn't seem to have been well advertised in advance so the number of people who created explicit dependencies on it is probably quite small. It also appears the way the change is constructed it would be easier for people to opt back into the Json if they wanted it than it is for folks to currently opt-out. But it is still entirely possible that if we change it back there will be a new group of people coming to this issue who like the JSON behavior and are now angry we broke them unexpectedly.

  2. Make the breaking change in .NET 7. Probably aggravates more people in the meantime + gives more time for people to take dependencies and be aggravated when it switches back.

  3. Leave the default as it is now, but make it easier to opt-out. One opt-out mechanism could be an alternate choice of image. Another opt-out could be letting people set something in their own dockerfiles that build upon our images that is less complex than the current workarounds.

  4. Do a better job advertising the change and advertising how to disable it for those who do not want it. For example we might want to put info on https://github.com/dotnet/announcements, https://hub.docker.com/_/microsoft-dotnet-aspnet/, and/or https://docs.microsoft.com/en-us/dotnet/core/compatibility/6.0. We could also potentially add a log message when the environment variable is active that helps people find the relevant announcements and workarounds if they don't like the new behavior.

  5. Change the order of precedence between appsettings.json and the environment variable. It appeared that many of the devs encountering this issue already have configured logging and it seems pretty reasonable that app developer configuration should have a higher precedence than image configuration. Technically this is also a breaking change, albeit at smaller scope.

I assume we should do (4) no matter what. None of the options are that satisfying and a lot of it comes down to what precedent/policy we've created for change in a servicing release on ASP.Net which I am not in the best position to judge. For example historically on .NET Framework I don't expect we would have ever taken a servicing behavior change this large unless it was for a security issue or huge negative feedback (far more than what we've seen so far). However I also know ASP.Net has been pioneering more lenient breaking change policy so I try not to lean on my past .NET Framework intuitions too much.

We could at least reduce this from big confusion to small annoyance with better notification + easy opt-out. The more I think on it maybe that is the right balance for now, followed by removal in .NET 7 if feedback continues to be negative.

@MichaelSimons
Copy link
Member

@noahfalk - Thanks for the writeup.

From lessons learned maintaining our .NET Docker offering, I am hesitant of #1. We have made breaking changes in the past to our Dockerfiles and it typically doesn't pan out well. While 6.0 is still in its lifecycle infancy, we have a lot of early adoption.

I believe better notification + easy opt-out is the right choice here w/the option to revert the behavior in 7.0.

Do you have thoughts on what the following would look like?

Another opt-out could be letting people set something in their own dockerfiles that build upon our images that is less complex than the current workarounds.

@davidfowl
Copy link
Member

I like 1, then 5, then 2

@noahfalk
Copy link
Member

Do you have thoughts on what the following would look like?

I was hand-waving solutions where the developer might add something like this in their app's docker file:

ENV Logging__Console__FormatterName = "unset"

This solution wouldn't work right now, but presumably a future servicing change could add code somewhere in .NET so that the setting got recognized as being an opt-out.

@YarekTyshchenko
Copy link

I appreciate doing development in the open, and discussing language features in github PRs and Issues. I Really like how connected with the community C# is, so props!

The way this change was handled is definitely not cool. It's important to realise that the ecosystem is used by developers as small building blocks to build large and complex solutions. When making breaking changes, you should always strive for simplicity of removing differences rather than adding more rules for specific cases.

Like everyone else we run dotnet in k8s in production, in containers on developers' machines, and out of containers. Whatever custom rules you create will not capture all the usecases. Logging configs / appsettings overrides are already complicated, and adding more custom rules that are very specific should not be attractive.

@maryamariyan
Copy link
Member

Who is the active PM for diagnostics? They should be chiming in.

/cc @ldillonel

@maryamariyan
Copy link
Member

maryamariyan commented Apr 6, 2022

updated comment

@YarekTyshchenko sorry to hear that this has caused churn on your end.

For those just arriving to this issue, I am aiming to summarize the conversation here:

Summary

So in this issue we introduced this breaking change behavior so that in a container the default console logger would be json, in other words it sets environment variable Logging__Console__FormatterName="Json".

Possible workaround:

Setting this in the Dockerfile should work:

ENV Logging__Console__FormatterName="simple"

Todo next

Given the incoming feedback we received there's a selection of next action options to choose from listed in #2725 (comment)

I like 1, then 5, then 2

My take would be to go for option number 5, also since we're already past the adoption period. This way if someone wanted this reverted I guess they also have the option to set FormatterName in the appsettings.json file

@YarekTyshchenko
Copy link

Thankyou, @maryamariyan. We've using the workaround because we build our own images in this case.

  1. Change the order of precedence between appsettings.json and the environment variable.

Definitely do not change the precedence between appsettings and env vars in general. We rely on env vars overriding appsettings files, I'm sure many do.

IMO its good to keep human readable format as the default logger, as when people move to JSON logging they can either update their appsettings, or add the formatter env var to their image builds, or deployed env. My preference is for opt in, because JSON logs are completely unreadable to me without extra tooling.

Alternatively you could play with the indenting in the JSON formatter to output multiline (possibly even highlighted, if dotnet binary is outputting to a real terminal) format that is easy to read, yet still parsable by JSON logging ingestion. I think then people wouldn't mind that being the default. Of course the change would have to be done in dotnet, not just the image to make it overridable in appsettinsg and environment, as expected.

@dracan
Copy link

dracan commented Apr 6, 2022

I definitely agree about the opt-in, not opt-out. The way my application behaves should not magically change just because I choose to host it in a container. Console logging is functionality and observable output. It is not an implementation detail. My choice to host my app in a container should have absolutely nothing to do with the format of the console logs.

Also, nothing else I know of that runs in containers defaults to JSON output in console. I use k8s a lot, and looking at any of the pod logs across any of my clusters (system pods or 3rd party pods) - none of them are JSON format. .NET is now suddenly completely inconsistent with everything else.

@richlander
Copy link
Member

richlander commented Apr 6, 2022

it seems pretty reasonable that app developer configuration should have a higher precedence than image configuration

This is conflating things. The fact that some ENVs comes with the image is irrelevant from a precedence standpoint. What isn't irrelevant is the fact that the ENV was added. That shouldn't have been done.

The order should be:

  • Static settings that are part of the app.
  • ENVs
  • CLI args

That's how version-selection and roll-forward work, for example.

@mthalman
Copy link
Member

Hey folks, an update to revert this change is on the way in May: #3642.

@a-a-k
Copy link

a-a-k commented Jul 21, 2022

Who can explain, why logging configuration is unexpectedly getting from appsettings.json at the same time as other configuration stuff is getting from secrets.json as it should be in Development environment? How is it being managed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-dockerfiles enhancement needs-announcement An announcement is needed to discuss customer impact
Projects
None yet
Development

No branches or pull requests