You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC5+Unity依赖注入下Microsoft.Extensions.Logging无控制台日志问题

问题分析与解决方案

核心问题

你的代码存在三个关键问题导致日志无法输出:

  1. 未注册日志输出提供者:初始化LoggerFactory时传入空的ILoggerProvider数组,没有配置任何日志输出渠道(比如控制台)。
  2. LoggingService实现冗余:每次调用CreateLog都重复创建LoggerFactory,既浪费资源,也未配置有效输出逻辑。
  3. 依赖注入未配置日志服务:未将ILogger、LoggerFactory等核心日志服务注册到Unity容器,无法实现日志服务的复用与注入。

解决步骤

1. 安装控制台日志提供者包

先通过NuGet安装控制台输出所需的包:

Install-Package Microsoft.Extensions.Logging.Console

2. 修改Global.asax.vb,正确配置并注册日志服务

Sub Application_Start()
    ' 初始化Unity容器
    Dim container = New UnityContainer()
    
    ' 配置日志工厂,添加控制台输出支持
    Dim loggerFactory = LoggerFactory.Create(Function(builder)
                                                builder.AddConsole()
                                                builder.SetMinimumLevel(LogLevel.Information)
                                            End Function)
    
    ' 将日志服务注册到Unity容器
    container.RegisterInstance(Of ILoggerFactory)(loggerFactory)
    container.RegisterType(GetType(ILogger(Of )), GetType(Logger(Of )))
    ' 注册自定义日志服务
    container.RegisterType(Of ILoggingService, LoggingService)()
    
    ' 设置MVC的依赖解析器
    DependencyResolver.SetResolver(New UnityDependencyResolver(container))
    
    ' 测试全局日志输出
    Dim logger = loggerFactory.CreateLogger(Of MvcApplication)
    logger.LogWarning("Logging Initialized at Global level.")
End Sub

3. 重构LoggingService,通过依赖注入获取ILogger

去掉重复创建LoggerFactory的逻辑,改为构造函数注入日志实例:

Imports Microsoft.Extensions.Logging

Public Class LoggingService
    Implements ILoggingService

    Private ReadOnly _logger As ILogger(Of LoggingService)

    ' 构造函数注入ILogger实例
    Public Sub New(logger As ILogger(Of LoggingService))
        _logger = logger
    End Sub

    Private Sub CreateLog(strLogText As String) Implements ILoggingService.CreateLog
        _logger.LogWarning(strLogText)
    End Sub
End Class

4. 验证AccountController逻辑

你的AccountController已正确注入ILoggingService,无需修改。只要Unity容器配置正确,访问LogOn方法时就能正常输出日志。

效果验证

启动项目后,控制台会输出以下内容:

  • Logging Initialized at Global level.
  • Logon controller has been called.

内容的提问来源于stack exchange,提问作者Ris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:27:26