.net core 中已经集成了log的方法, 但是只能控制台输出不能写入文件等等. 常见第三方的的日志工具包括log4net, nlog等等, 本文介绍nlog

具体的配置说明 可以参考 https://www.cjavapy.com/article/183/ 

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. autoReload="true"
  5. internalLogLevel="Off"
  6. internalLogFile="c:\temp\internal-nlog.txt">
  7.  
  8. <!-- enable asp.net core layout renderers -->
  9. <extensions>
  10. <add assembly="NLog.Web.AspNetCore"/>
  11. </extensions>
  12.  
  13. <!-- the targets to write to -->
  14. <targets>
  15. <!-- write logs to file -->
  16. <target xsi:type="File" name="allfile" fileName="${basedir}/logs/${logger}/${shortdate}.log"
  17. layout="${longdate} ${level:uppercase=true} ${event-context:item=Action} ${message} ${event-context:item=Amount} ${stacktrace} ${newline} ${exception:format=tostring} ${newline}" />
  18.  
  19. <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
  20. <target xsi:type="Debugger" name="debugger" layout="${date:format=HH\:mm\:ss.fff}: ${message}" />
  21. </targets>
  22.  
  23. <!-- rules to map from logger name to target -->
  24. <rules>
  25. <!--Skip non-critical Microsoft logs and so log only own logs-->
  26. <logger name="Microsoft.*" maxlevel="Error" final="true" />
  27. <logger name="*" minlevel="Debug" writeTo="debugger" />
  28. <logger name="*" minlevel="Info" writeTo="allfile" />
  29. </rules>
  30. </nlog>

View Code

  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2. Host.CreateDefaultBuilder(args)
  3. .ConfigureWebHostDefaults(webBuilder =>
  4. {
  5. webBuilder.UseStartup<Startup>();
  6. })
  7. .UseNLog();// 添加这句 注入nlog
  1. /// <summary>
  2. /// 日志
  3. /// </summary>
  4. private readonly ILogger<DemoController> _logger;
  5. /// <summary>
  6. /// 构造函数
  7. /// </summary>
  8. /// <param name="logger"></param>
  9. public DemoController(ILogger<DemoController> logger)
  10. {
  11. _logger = logger;
  12. }
  13. public IActionResult Test()
  14. {
  15. _logger.LogError("我是日志内容");
  16. return Ok("ok");
  17. }

结果

我会在输入看见

 

 也可以在日志文件里看见

 

 

虽然.net core 推荐依赖注入, 但是这种使用方式还是会不方便, 所以我可以封装成一个类, 需要的时候直接用. 代码如下:

  1. /// <summary>
  2. /// Nlog日志帮助类
  3. /// Trace 包含大量的信息,例如 protocol payloads。一般仅在开发环境中启用, 仅输出不存文件。
  4. /// Debug 比 Trance 级别稍微粗略,一般仅在开发环境中启用, 仅输出不存文件。
  5. /// Info 一般在生产环境中启用。
  6. /// Warn 一般用于可恢复或临时性错误的非关键问题。
  7. /// Error 一般是异常信息。
  8. /// Fatal - 非常严重的错误!
  9. /// </summary>
  10. public class NLogHelper
  11. {
  12. readonly Logger logger;
  13. private NLogHelper(Logger logger)
  14. {
  15. this.logger = logger;
  16. }
  17. /// <summary>
  18. /// 自定义 ${logger} (我用于区分文件夹)
  19. /// </summary>
  20. /// <param name="name"></param>
  21. public NLogHelper(string name) : this(NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetLogger(name))
  22. {
  23. }
  24. /// <summary>
  25. /// 默认 ${logger} (Default 文件夹下)
  26. /// </summary>
  27. public static NLogHelper Default { get; private set; }
  28. static NLogHelper()
  29. {
  30. Default = new NLogHelper(NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetLogger("Default"));
  31. }
  32. public void Debug(string msg, params object[] args)
  33. {
  34. logger.Debug(msg, args);
  35. }
  36. public void Debug(string msg, Exception err)
  37. {
  38. logger.Debug(err, msg);
  39. }
  40. public void Info(string msg, params object[] args)
  41. {
  42. logger.Info(msg, args);
  43. }
  44. public void Info(string msg, Exception err)
  45. {
  46. logger.Info(err, msg);
  47. }
  48. public void Trace(string msg, params object[] args)
  49. {
  50. logger.Trace(msg, args);
  51. }
  52. public void Trace(string msg, Exception err)
  53. {
  54. logger.Trace(err, msg);
  55. }
  56. public void Error(string msg, params object[] args)
  57. {
  58. logger.Error(msg, args);
  59. }
  60. public void Error(string msg, Exception err)
  61. {
  62. logger.Error(err, msg);
  63. }
  64. public void Fatal(string msg, params object[] args)
  65. {
  66. logger.Fatal(msg, args);
  67. }
  68. public void Fatal(string msg, Exception err)
  69. {
  70. logger.Fatal(err, msg);
  71. }
  72. }

View Code

使用方式

  1. public IActionResult Test()
  2. {
  3. NLogHelper.Default.Fatal("默认logger");
  4. new NLogHelper("Diy").Error("自定义logger");
  5. return Ok("ok");
  6. }

 

参考文献: https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3

 

版权声明:本文为fancyblogs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fancyblogs/p/12924263.html