• AspNetCore配置多环境log4net配置文件


    前言

    在之前的文章中有讲到AspNetCore多环境配置文件的应用,我们根据自己多种环境分别配置多个appsettings.$EnvironmentName.json文件。
    在实际的开发中我们可能会遇到不只一个配置文件,如当我们使用log4net日志库时,喜欢使用单独的log4net.config配置文件。并且我们还遇到不同环境下的配置文件还存在差异。这时我们可能可以效仿appsettings.json多环境配置的风格实现多环境配置文件。

    配置log4net

    新建Web项目
    image.png
    安装Microsoft.Extensions.Logging.Log4Net.AspNetCore
    image.png

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

    两个配置文件内容如下,例如我们这里生产环境的配置文件多增加一个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配置===============
    

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


    __EOF__

  • 本文作者: Gui.H
  • 本文链接: https://www.cnblogs.com/springhgui/p/16163431.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    JMeter的基本使用
    ARP欺骗
    讲座回顾丨基于 OpenYurt 和 EdgeX 的云边端协同新可能
    网络相关知识
    python经典百题之字符反转
    从零搭建一个vue项目
    java-php-python-ssm网上商城系统计算机毕业设计
    网页css+html实现登录界面的分步奏操作详解+完整代码后期会完备python后端教程
    tsp可视化python
    vue手搓悬浮在线客服按钮
  • 原文地址:https://www.cnblogs.com/springhgui/p/16163431.html