net5 站点log4net日志处理-file、mongodb
net5站点添加log4net日志处理,记录到txt和mongodb
1、新建站点,修改为net5
2、nuget上搜索log4net,或者使用集成的扩展Microsoft.Extensions.Logging.Log4Net.AspNetCore。这里使用了log4net。后续把log4日志集成保存到mongodb
3、站点配增加log4net.config文件,并且再startup中增加加载配置文件的代码
log4net.Config.XmlConfigurator.Configure进行加载
4、统一增加loghelper类,用于方便调用,定义log对象
5、代码中直接使用loghelper.info进行日志记录
6、log4net.config配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <log4net> <!--<appender name="DebugAppender2" type="log4net.Appender.DebugAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender>--> <!--指定日记记录方式,以滚动文件的方式(文件记录)--> <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <file value="log\logDebug\" /> <!--是否是向文件中追加日志--> <appendToFile value="true" /> <!--log保留天数--> <param name= "MaxSizeRollBackups" value= "10"/> <!--每个文件最大1M--> <param name="maximumFileSize" value="1MB" /> <!--日志根据日期滚动--> <param name="RollingStyle" value="Date" /> <!--日志文件名格式为:logs_20080831.log--> <param name="DatePattern" value=""logs_"yyyyMMdd".log"" /> <!--日志文件名是否是固定不变的--> <param name="StaticLogFileName" value="false" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL--> <levelMin value="DEBUG" /> <levelMax value="DEBUG" /> </filter> </appender> <!--指定日记记录方式,以滚动文件的方式(文件记录)--> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <file value="log\logInfo\" /> <!--是否是向文件中追加日志--> <appendToFile value="true" /> <!--log保留天数--> <param name= "MaxSizeRollBackups" value= "10"/> <!--每个文件最大1M--> <param name="maximumFileSize" value="1MB" /> <!--日志根据日期滚动--> <param name="RollingStyle" value="Date" /> <!--日志文件名格式为:logs_20080831.log--> <param name="DatePattern" value=""logs_"yyyyMMdd".log"" /> <!--日志文件名是否是固定不变的--> <param name="StaticLogFileName" value="false" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL--> <levelMin value="INFO" /> <levelMax value="INFO" /> </filter> </appender> <!--指定日记记录方式,以滚动文件的方式(文件记录)--> <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <file value="log\logWarn\" /> <!--是否是向文件中追加日志--> <appendToFile value="true" /> <!--log保留天数--> <param name= "MaxSizeRollBackups" value= "10"/> <!--每个文件最大1M--> <param name="maximumFileSize" value="1MB" /> <!--日志根据日期滚动--> <param name="RollingStyle" value="Date" /> <!--日志文件名格式为:logs_20080831.log--> <param name="DatePattern" value=""logs_"yyyyMMdd".log"" /> <!--日志文件名是否是固定不变的--> <param name="StaticLogFileName" value="false" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL--> <levelMin value="WARN" /> <levelMax value="WARN" /> </filter> </appender> <!--指定日记记录方式,以滚动文件的方式(文件记录)--> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <file value="log\logError\" /> <!--是否是向文件中追加日志--> <appendToFile value="true" /> <!--log保留天数--> <param name= "MaxSizeRollBackups" value= "10"/> <!--每个文件最大1M--> <param name="maximumFileSize" value="1MB" /> <!--日志根据日期滚动--> <param name="RollingStyle" value="Date" /> <!--日志文件名格式为:logs_20080831.log--> <param name="DatePattern" value=""logs_"yyyyMMdd".log"" /> <!--日志文件名是否是固定不变的--> <param name="StaticLogFileName" value="false" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL--> <levelMin value="ERROR" /> <levelMax value="ERROR" /> </filter> </appender> <root> <level value="ALL"/> <appender-ref ref="DebugAppender" /> <appender-ref ref="InfoAppender" /> <appender-ref ref="WarnAppender" /> <appender-ref ref="ErrorAppender" /> </root> </log4net>
7、记录到文本文件的则到此结束
8、配置记录到mongodb
引用nuget:log4mongo-net。项目配置相对简单一些,可以直接github查找源代码进行自己的配置修改等
引用完后,loghelper的logName对应改成配置文件定义的名称,不然会记录不到
9、配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--声明一个名为“log4net”的自定义配置节--> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <!--log4net配置信息--> <log4net> <logger name="MongoDBLogger"> <level value="ALL"/> <appender-ref ref="MongoDBAppender" /> </logger> <appender name="MongoDBAppender" type="By56.Services.Common.Log.Mongo.MongoDBAppender, By56.Services.Common"> <connectionString value="mongodb://root:123@192.168.1.14:27017/ByLog?authSource=admin" /> <CollectionName value="logs_demo"/> </appender> </log4net> </configuration>
这里CollectionName只能定义一个名字,不能按日期拆分等。如果需要,需要下载源码,自己编译处理。
源码就四个文件。想自定义格式,可以找到MongoDBAppender.cs文件
找到这个方法。这里定义了如果没有名字,则使用默认的logs
可以自己在这个基础上进行修改,如添加{yyyyMMdd}格式,判断名称带有这个的,那么直接把这串替换成年月日方式,或者定义{yyyy}按年拆分格式,{yyyyMm}按月拆分格式
具体解析这个格式的代码很简单,这里不再列出,直接在这个变量后面加上自己的逻辑就ok了
注意:loghelper里面logName必须使用配置文件里面的MongoDBAppender,否则记录不成功