文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Asp.Net Core配置多环境log4net配置文件的全过程

2024-04-02 19:55

关注

前言

在之前的文章中有讲到AspNetCore多环境配置文件的应用,我们根据自己多种环境分别配置多个appsettings.$EnvironmentName.json文件。

在实际的开发中我们可能会遇到不只一个配置文件,如当我们使用log4net日志库时,喜欢使用单独的log4net.config配置文件。并且我们还遇到不同环境下的配置文件还存在差异。这时我们可能可以效仿appsettings.json多环境配置的风格实现多环境配置文件。

配置log4net

新建Web项目

安装Microsoft.Extensions.Logging.Log4Net.AspNetCore

创建两个环境的配置文件分别如图,并设置文件属性使其在发布时能够复制到根目录

两个配置文件内容如下,例如我们这里生产环境的配置文件多增加一个KafkaAppender使日志发送至kafka消息丢列中,然后kafka的消费者将日志消费至ES集群,而本地开发的日志则没必要进行上传ES。

<!--log4net.config-->
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!-- If you are looking here and want more output, first thing to do is change root/priority/@value to "INFO" or "ALL". -->
  <root>
    Value of priority may be ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF.
    <priority value="ALL" />
    <appender-ref ref="error-file" />
    <appender-ref ref="debug-file" />
    <appender-ref ref="KafkaAppender" />
  </root>

  <!-- Example of turning on the output from a component or namespace. -->
  <logger name="Common">
    <appender-ref ref="debugger"/>
    <priority value="DEBUG" />
  </logger>
  
  <appender name="KafkaAppender" type="log4net.Kafka.Appender.KafkaAppender, log4net.Kafka.Appender">
    <KafkaSettings>
      <brokers>
        <add value="127.0.0.1:9092" />
      </brokers>
      <topic type="log4net.Layout.PatternLayout">
        <conversionPattern value="kafka.logstash" />
      </topic>
    </KafkaSettings>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level% [%t] %logger - %message" />
    </layout>
  </appender>
  
  <appender name="debugger" type="log4net.Appender.DebugAppender">
    <!-- Sends log messages to Visual Studio if attached. -->
    <immediateFlush value="true" />
    <layout type="log4net.Layout.SimpleLayout" />
  </appender>

  <appender name="debug-file" type="log4net.Appender.RollingFileAppender">
    <param name="Encoding" value="utf-8" />
    <file value="Logs/debug" />
    <appendToFile value="true" />
    <!-- Immediate flush on error log, to avoid data loss with sudden termination. -->
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datepattern value="-yyyy.MM.dd'.log'" />
    <!-- Prevents Orchard.exe from displaying locking debug messages. -->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level% [%property{trace}] %logger - %message%newline" />
    </layout>
  </appender>

  <appender name="error-file" type="log4net.Appender.RollingFileAppender">
    <param name="Encoding" value="utf-8" />
    <file value="Logs/error" />
    <appendToFile value="true" />
    <!-- Immediate flush on error log, to avoid data loss with sudden termination. -->
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datepattern value="-yyyy.MM.dd'.log'" />
    <!-- Prevents Orchard.exe from displaying locking debug messages. -->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <!-- Only ERROR and FATAL log messages end up in this target, even if child loggers accept lower priority. -->
      <levelMin value="ERROR" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%t] %logger - %message [%P{Url}]%newline" />
    </layout>
  </appender>
</log4net>
<!--log4net.Development.config-->
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!-- If you are looking here and want more output, first thing to do is change root/priority/@value to "INFO" or "ALL". -->
  <root>
    Value of priority may be ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF.
    <priority value="ALL" />
    <appender-ref ref="error-file" />
    <appender-ref ref="debug-file" />
  </root>

  <!-- Example of turning on the output from a component or namespace. -->
  <logger name="Common">
    <appender-ref ref="debugger"/>
    <priority value="DEBUG" />
  </logger>
  
  <appender name="debugger" type="log4net.Appender.DebugAppender">
    <!-- Sends log messages to Visual Studio if attached. -->
    <immediateFlush value="true" />
    <layout type="log4net.Layout.SimpleLayout" />
  </appender>

  <appender name="debug-file" type="log4net.Appender.RollingFileAppender">
    <param name="Encoding" value="utf-8" />
    <file value="Logs/debug" />
    <appendToFile value="true" />
    <!-- Immediate flush on error log, to avoid data loss with sudden termination. -->
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datepattern value="-yyyy.MM.dd'.log'" />
    <!-- Prevents Orchard.exe from displaying locking debug messages. -->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level% [%property{trace}] %logger - %message%newline" />
    </layout>
  </appender>

  <appender name="error-file" type="log4net.Appender.RollingFileAppender">
    <param name="Encoding" value="utf-8" />
    <file value="Logs/error" />
    <appendToFile value="true" />
    <!-- Immediate flush on error log, to avoid data loss with sudden termination. -->
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datepattern value="-yyyy.MM.dd'.log'" />
    <!-- Prevents Orchard.exe from displaying locking debug messages. -->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <!-- Only ERROR and FATAL log messages end up in this target, even if child loggers accept lower priority. -->
      <levelMin value="ERROR" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%t] %logger - %message [%P{Url}]%newline" />
    </layout>
  </appender>
</log4net>

在Program.cs中添加log4net配置如下图

// ===============多环境log4net配置===============
IWebHostEnvironment environment = builder.Environment;
var configName = "log4net" + (environment.IsProduction() ? string.Empty : environment.EnvironmentName) + ".config";
builder.Logging.AddLog4Net(configName, watch: true);
// ===============多环境log4net配置===============

现在所有的配置都完成了。

总结

到此这篇关于Asp.Net Core配置多环境log4net配置文件的文章就介绍到这了,更多相关AspNetCore多环境log4net配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯