asp.net-mvc - Log4Net 未使用 UnityContainer 登录 .NET WebApi 项目
问题描述
我有一个非常基本的 C# .NET WebApi 项目,使用 Unity.AspNet.WebApi 和 Unity.Mvc 进行依赖注入,使用 Unity.log4net 进行日志记录。
注入我的控制器似乎工作正常。问题是记录器从不记录任何东西。永远不会创建预期的 .log 文件。当我在调试时检查记录器对象时,它禁用了所有级别(IsDebugEnable = false、IsErrorEnabled = false 等)
它正在运行,就好像忽略了我的 log4net.config 文件一样。在我的项目的根目录中,我有一个 log4net.config 文件,它定义了一个控制台和一个文件附加程序。
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="DemoWebApiUnityLog4Net.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
我已将此行添加到 AssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true)]
log4net 使用以下行注册到 UnityConfig.cs 中的 Unity 容器中:
container.AddNewExtension<Log4NetExtension>();
完整的演示项目可以在这里找到:https ://github.com/CarmonColvin/DemoWebApiUnityLog4Net
我尝试过的任何事情都没有导致成功的日志。任何帮助表示赞赏。
解决方案
根据 log4net常见问题解答:
如果您通过在程序集上指定程序集级别属性来配置 log4net,那么一旦第一次调用 LogManager.GetLogger,就会加载配置。在进程(或 AppDomain)期间对 LogManager.GetLogger 的第一次调用必须从具有配置属性的程序集进行。Log4net 只会在配置属性的第一个调用程序集上查找一次。
因此,在我看来,您应该在应用程序启动时调用以加载您的配置LogManager.GetLogger()
。Global.asax
就像是:
using log4net;
protected void Application_Start(object sender, EventArgs e)
{
var logger = LogManager.GetLogger(typeof(Global));
logger.Info("Application started.");
}
推荐阅读
- c# - 是否可以使用反射创建通用覆盖?
- swift - macOS Big Sur 上 Swift 命令行工具的 EventKit 权限问题
- reactjs - 如何使用 React 组件实例上的 onClick 侦听器更新 State Hook
- react-native - 使用 React Native 在应用程序内构建“Stripe-subscriptions-checkout”的推荐方法是什么?
- python - 在 python 中使用 selenium 仅获取特定链接
- reactjs - 无法使用令牌部署 create-react-app
- flutter - 颤振检查列表按项目包含
- r - flexdashboard ::renderValueBox 在闪亮的应用程序中不起作用
- python - python numpy:行向量转置
- javascript - 如何添加自定义标签标题