在launchSettings.json中使用自定义主机名,如何让日志显示该主机名?
让ASP.NET Core启动日志显示自定义域名的方案
当你在launchSettings.json里配置自定义域名(比如mysite.local)时,启动日志会显示[::]:端口而非你设置的域名,但用localhost就能正常显示——这是因为ASP.NET Core默认绑定非环回域名时,会用IPv6通配符地址[::]监听,日志输出的是实际绑定的网络地址,不是配置里的域名。
下面是几种能让自定义域名出现在日志里的方法:
方法1:显式配置Kestrel绑定自定义域名
直接在Program.cs里指定Kestrel要绑定的域名,这样日志就会输出你设置的域名:
var builder = WebApplication.CreateBuilder(args); // 配置Kestrel监听规则 builder.WebHost.ConfigureKestrel(options => { // 绑定HTTPS端口6200到mysite.local options.ListenAnyIP(6200, listenOptions => { listenOptions.UseHttps(); listenOptions.UseHostname("mysite.local"); }); // 绑定HTTP端口5200到mysite.local options.ListenAnyIP(5200, listenOptions => { listenOptions.UseHostname("mysite.local"); }); }); var app = builder.Build(); app.Run();
配置完成后,启动日志就会显示https://mysite.local:6200和http://mysite.local:5200。
方法2:读取配置URL直接输出日志
先确保本地hosts文件已经把mysite.local映射到环回地址:
- Windows路径:
C:\Windows\System32\drivers\etc\hosts - Linux/macOS路径:
/etc/hosts
添加以下内容:
127.0.0.1 mysite.local ::1 mysite.local
然后在Program.cs里添加自定义日志输出,直接读取launchSettings.json里配置的applicationUrl:
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); // 自定义输出监听地址日志 var appUrls = app.Configuration["ASPNETCORE_URLS"] ?? string.Join("; ", app.Urls); app.Logger.LogInformation("Now listening on: {Urls}", appUrls); app.Run();
这样启动时会直接输出你配置的自定义域名地址,替代默认的监听日志。
方法3:自定义控制台日志格式化器(进阶)
如果需要统一日志格式,可以自定义控制台日志格式化器,把默认输出的[::]:端口替换成配置的域名。不过这种方式步骤较多,适合有统一日志需求的场景。
以上几种方法都能实现需求,推荐第一种,因为它直接控制Kestrel的绑定逻辑,日志输出更准确。
内容的提问来源于stack exchange,提问作者Phill
相关产品推荐
相关产品推荐

