在.NET|在.NET 6中使用日志组件log4net的方法
本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例。
1.首先新建一个ASP.NET Core空项目
文章图片
2.通过Nuget包管理器安装下面两个包
log4net
Microsoft.Extensions.Logging.Log4Net.AspNetCore
文章图片
3.在项目根目录下新建log4net的配置文件
log4net.config
,并将其设置为始终复制
。 log4net配置参数此处不多赘述,只针对日志的输出格式参数conversionPattern配置做简要说明。
%M输出日志方法名%m输出日志消息内容%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL%r输出自应用启动到输出该log信息耗费的毫秒数%c输出所属的类目,通常就是所在类的全名%t输出产生该日志事件的线程名%n输出一个换行符%l或%L输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。%c输出日志信息所属的类的全名%d输出完整的日志时间点的日期时间,支持自定义格式。比如:%d{HH:mm:ss},输出类似:22:10:28%f输出日志信息所属的类的类名
4.在Program中使用log4net输出自定义日志内容
using log4net; var builder = WebApplication.CreateBuilder(args); //注入Log4Netbuilder.Services.AddLogging(cfg =>{cfg.AddLog4Net(); //默认的配置文件路径是在根目录,且文件名为log4net.config//如果文件路径或名称有变化,需要重新设置其路径或名称//比如在项目根目录下创建一个名为cfg的文件夹,将log4net.config文件移入其中,并改名为log.config//则需要使用下面的代码来进行配置//cfg.AddLog4Net(new Log4NetProviderOptions()//{//Log4NetConfigFileName = "cfg/log.config",//Watch = true//}); }); var app = builder.Build(); //访问根页面时app.MapGet("/", (ILogger logger) =>{logger.LogInformation("logger:测试一下Log4Net=》Info"); return "Hello World!"; }); //访问test页面时app.MapGet("/test", () =>{var log = LogManager.GetLogger(typeof(Program)); log.Info("log:这是一条普通日志信息"); }); app.Run();
5.将项目运行起来,即可发现日志文件已生成
文章图片
文章图片
6.扩展使用:使用简单工厂模式IOC注入到自定义类中使用 新建一个
ITestLog4Net
接口文件,并为其定义一个Log
方法。并且新建一个
TestLog4Net
的自定义类,继承于ITestLog4Net
,并实现该Log
方法。在Program中注入我们的自定义类
TestLog4Net
builder.Services.AddTransient();
testLog4Net.Log();
使用方法
var testLog4Net = app.Services.GetService或者()!;
var services = new ServiceCollection()!;
var provider = services.BuildServiceProvider()!;
var testLog4Net = provider.GetService
testLog4Net.Log();
其中,使用下面这种写法,将会收到一个编译警告信息。
warning ASP0000: Calling 'BuildServiceProvider' from application code results in an additional copy of singleton services being created. Consider alternatives such as dependency injecting services as parameters to 'Configure'.
文章图片
推荐使用上面的写法,百度之后,得到的答案是:不要通过调用BuildServiceProvider()这个方法应该只被 Host 调用一次。重复的服务提供者可能会导致一些意想不到的错误。如果有哪位大佬知道具体原因,请告知一下,谢谢!
Tips:代码中的感叹号!表示该对象不会为空,一定要确保该对象不会为空才能这样写,这是C#10中的新特性。
【在.NET|在.NET 6中使用日志组件log4net的方法】到此这篇关于在.NET 6中使用日志组件log4net的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 热闹中的孤独
- 你到家了吗
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 闲杂“细雨”
- 杜月笙的口才
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 赢在人生六项精进二阶Day3复盘
- 祖母走了