首先接入NuGet包Log4Net

在项目中添加log4net.config文件

Log4Net的级别None>FATAL>ERROR>WARN>INFO>DEBUG>ALL

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <!-- This section contains the log4net configuration settings -->
  4. <log4net>
  5. <root>
  6. <level value="INFO" />
  7. <appender-ref ref="infoAppender" />
  8. <appender-ref ref="errorAppender" />
  9. </root>
  10. <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
  11. <file value="Logs/Error/" />
  12. <appendToFile value="true" />
  13. <rollingStyle value="Composite" />
  14. <staticLogFileName value="false" />
  15. <datePattern value="error-yyyyMMdd'.log'" />
  16. <maxSizeRollBackups value="" />
  17. <maximumFileSize value="1MB" />
  18. <threshold value="ERROR" />
  19. <layout type="log4net.Layout.PatternLayout">
  20. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  21. </layout>
  22. </appender>
  23. <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
  24. <file value="Logs/Info/" />
  25. <appendToFile value="true" />
  26. <rollingStyle value="Composite" />
  27. <staticLogFileName value="false" />
  28. <datePattern value="yyyyMMdd'.log'" />
  29. <maxSizeRollBackups value="" />
  30. <maximumFileSize value="1MB" />
  31. <layout type="log4net.Layout.PatternLayout">
  32. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  33. </layout>
  34. <filter type="log4net.Filter.LevelRangeFilter">
  35. <param name="LevelMin" value="Info" />
  36. <param name="LevelMax" value="Info" />
  37. </filter>
  38. </appender>
  39. <!-- Setup the root category, add the appenders and set the default level -->
  40. </log4net>
  41. </configuration>

若要控制显示的层级,可以在Appender中使用Threshold,当级别小于这个将会过滤,或者如下选择控制层级。

  1. <filter type="log4net.Filter.LevelRangeFilter">
  2. <param name="LevelMin" value="Info" />
  3. <param name="LevelMax" value="Info" />
  4. </filter>

在.NetFramework中可以使用LogManger获取相应的Loger,但是在.NetCore需要使用ILoggerRepository,贴一个简易的LogHelper,大家有更好的可以推荐给我!

  1. using log4net;
  2. using log4net.Config;
  3. using log4net.Repository;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Text;
  8.  
  9. [assembly: log4net.Config.XmlConfigurator(Watch = true)]
  10. namespace LwccWeightReduction.Helpers
  11. {
  12. class SimpleLogHelper
  13. {
  14. private static ILog logger = null;
  15. public static void LogInfo(string logstr)
  16. {
  17. if (InitLog4net())
  18. logger.Info(logstr);
  19. }
  20.  
  21. public static void LogInfo(string format, params object[] args)
  22. {
  23. if (InitLog4net())
  24. logger.InfoFormat(format, args);
  25. }
  26.  
  27. public static void LogError(string logstr)
  28. {
  29. if (InitLog4net())
  30. logger.Error(logstr);
  31. }
  32.  
  33. public static void LogError(string format, params object[] args)
  34. {
  35. if (InitLog4net())
  36. logger.ErrorFormat(format, args);
  37. }
  38.  
  39. private static object objlock = new object();//初始化log用的锁
  40. private static bool InitLog4net()
  41. {
  42. if (logger != null)
  43. return true;
  44. lock (objlock)
  45. {
  46. if (logger == null)
  47. {
  48. ILoggerRepository repository = LogManager.CreateRepository("NETCoreRepository");
  49. XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
  50. logger = LogManager.GetLogger(repository.Name, "NETCorelog4net");
  51. return true;
  52. }
  53. }
  54. return false;
  55. }
  56. }
  57. }

有三个小坑:

1.如果在Debug模式下可以生成日志,Release模式下生成不了,可以在LogHelper下的命名空间中添加如下语句:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

2..NetCore打包成exe发布到WinServer上,无法输出日志,但在本机上面可以。可以以管理员方式运行exe即可输出日志。

3.程序发布到LINUX上,使用.sh脚本在任一路径下运行的时候会出现无法记录日志问题。查询原因得知,.Net Core记录Log4的类,记录前会获取ILoggerRepository,读取Config文件的时候,使用的是相对路径,即启动的程序时候的路径—.sh脚本路径。这样就获取不到log4net.config文件,无法记录日志,需要调整路径。

.NetCore接入Log4Net的更多相关文章

  1. .Net Core(.NET6)中接入Log4net和NLog进行日志记录

    一.接入Log4net 1.按日期和大小混合分割日志 nuget包安装 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 配置文件 配置文 ...

  2. SkyWalking Liunx 环境搭建&NetCore接入

    背景 前两天看见有小哥介绍windows下安装skywalking的介绍地址在这. 正好最近也在搭建linux环境的SkyWalking,顺便把linux环境搭建的经验分享下,帮助下使用linux部署 ...

  3. .netcore 整合 log4net

    1.背景 前两天,曾经的一个同事咨询我,怎样将log4net以中间件的形式整合到core里边去.我不假思索的回答,这种问题应该有人做过吧,他说没有.于是,我去博客园搜了下,发现还真没有,全部都是传统. ...

  4. netcore 使用log4net

    1.Install Install-Package log4net 2. conifg 創建文件:log4net.config <?xml version="1.0" enc ...

  5. .Netcore之日志组件Log4net、Nlog性能比较

    转载请注明出处http://www.cnblogs.com/supernebula/p/7506993.html .Netcore之Log4net.Nlog性能比较 最近在写一个开源.netcore ...

  6. netcore中使用log4net日志

    第一.控制台程序中使用log4net  static void Main(string[] args) { ILoggerRepository repository = LoggerManager.C ...

  7. NetCore log4net 集成以及配置日志信息不重复显示或者记录

    NetCore log4net 集成,这是一个很常见而且网上大批大批的博文了,我写这个博文主要是为了记录我在使用过程中的一点小收获,以前在使用的过程中一直没有注意但是其实网上说的不清不楚的问题. 官方 ...

  8. .netcore 急速接入第三方登录,不看后悔

    新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢. 如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下: https://oauthlogin.net/ 前言 此次带来得这个小 ...

  9. .NetCore WebApi 添加 Log4Net

    一 .配置 1.vs2019 创建一个.net core web程序,选择webapi 2.项目中添加一个配置文件:添加--新建项--XML文件,命名为log4net.config 我使用的是log4 ...

随机推荐

  1. 3.java并发包

    1.java并发包介绍 JDK5.0 以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程并发编程的,充分利用了现代多处理器 和多核心系统的功 ...

  2. TF_RNNCell

    参考:链接. RNNCell BasicRNNCell GRUCell BasicLSTMCell LSTMCell MultiRNNCell 抽象类RNNCell 所有的rnncell均继承于RNN ...

  3. zencart后台管理中选项名称和选项内容和属性控制页面出错解决办法 WARNING: An Error occurred, please refresh the page and try again

    后台管理中选项名称和选项内容和属性控制出现以下错误的解决办法WARNING: An Error occurred, please refresh the page and try again zen ...

  4. memset初始化数组的坑

    memset函数常被我们用来初始化数组,然而有个坑可能会被我们踩到. 静态数组初始化 一般情形是这样的: #include <cstring> int main() { // 静态数组ar ...

  5. hexo个人博客添加宠物/鼠标点击效果/博客管理

    1.添加宠物 博客宠物模型:https://github.com/xiazeyu/live2d-widget-models 模型对应的动画效果:https://huaji8.top/post/live ...

  6. HDU - 6435 Problem J. CSGO (曼哈顿距离变换)

    题目大意:有两类武器(主武器和副武器),每类有若干把,每把武器都有一个基础属性S,以及k个附加属性,让你选一把主武器M和一把副武器S,使得最大. 显然后面的和式是一个k维的曼哈顿距离,带绝对值符号不好 ...

  7. JAVA解压ZIP文件

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...

  8. 基于c++回顾

    c++类 特别的构造函数 默认参数: 几乎所有函数都可以使用默认参数,但在构造函数中最为普遍 初始化列表 用来直接初始化数据成员;与列表顺序无关,与成员申明顺序有关;如果一个成员是const的,那么, ...

  9. sh_15_字符串统计操作

    sh_15_字符串统计操作 hello_str = "hello hello" # 1. 统计字符串长度 print(len(hello_str)) # 2. 统计某一个小(子)字 ...

  10. 【译】XMLHttpRequest和Fetch, 谁最适合AJAX?

    原文地址:https://www.sitepoint.com/xmlhttprequest-vs-the-fetch-api-whats-best-for-ajax-in-2019/ 目录 从AJAX ...