主頁 > .NET開發 > .Net Core(.NET6)中接入Log4net和NLog進行日志記錄

.Net Core(.NET6)中接入Log4net和NLog進行日志記錄

2022-03-17 06:06:33 .NET開發

一、接入Log4net

1.按日期和大小混合分割日志

nuget包安裝

log4net
Microsoft.Extensions.Logging.Log4Net.AspNetCore

組態檔

 

 

 組態檔內容為

<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <!-- Define some output appenders -->
    <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
    <!--    value="https://www.cnblogs.com/wei325/p/logs/log.log"-->
        <file value="logs/" />
        <!--追加日志內容-->
        <appendToFile value="true" />

        <!--防止多執行緒時不能寫Log,官方說執行緒非安全-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

        <!--可以為:Once|Size|Date|Composite-->
        <!--Composite為Size和Date的組合-->
        <rollingStyle value="Composite" />

        <!--當備份檔案時,為檔案名加的后綴-->
        <datePattern value="yyyyMMdd/&quot;log.log&quot;" />

        <!--日志最大個數,都是最新的-->
        <!--rollingStyle節點為Size時,只能有value個日志-->
        <!--rollingStyle節點為Composite時,每天有value個日志-->
        <maxSizeRollBackups value="20" />

        <!--可用的單位:KB|MB|GB-->
        <maximumFileSize value="3MB" />

        <!--置為true,當前最新日志檔案名永遠為file節中的名字-->
        <staticLogFileName value="false" />

        <!--輸出級別在INFO和ERROR之間的日志-->
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <root>

        <!--控制級別,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
        <!--OFF:0-->
        <!--FATAL:FATAL-->
        <!--ERROR: ERROR,FATAL-->
        <!--WARN: WARN,ERROR,FATAL-->
        <!--INFO: INFO,WARN,ERROR,FATAL-->
        <!--DEBUG: INFO,WARN,ERROR,FATAL-->
        <!--ALL: DEBUG,INFO,WARN,ERROR,FATAL--> 
        <priority value="ALL"/>
        
        <level value="INFO"/>
        <!--使用上面配置的那個規則,ref指定上面的規則名稱-->
        <appender-ref ref="rollingAppender" />
    </root>
</log4net>

程式引入,Program.cs檔案增加

 

 

 

builder.Logging.AddLog4Net("Configs/log4net.Config");

//Nuget引入:
//1.Log4Net
//2.Microsoft.Extensions.Logging.Log4Net.AspNetCore
builder.Services.AddControllersWithViews();

程式使用

 public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            _logger.LogInformation($"{this.GetType()},info,介面訪問");
            _logger.LogError($"{this.GetType()},error,介面訪問錯誤");
            return View();
        }
}

效果:

 

 

 

 

 

2.日志分級獨立檔案夾顯示

上面全部等級的日志資訊都顯示在同一個檔案夾,如果想找error資訊,如果日志量大并不好查找,所以把error的獨立出來,

增加配置資訊

 

 完整組態檔

<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <!-- Define some output appenders -->
    <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
    <!--    value="https://www.cnblogs.com/wei325/p/logs/log.log"-->
        <file value="logs/" />
        <!--追加日志內容-->
        <appendToFile value="true" />

        <!--防止多執行緒時不能寫Log,官方說執行緒非安全-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

        <!--可以為:Once|Size|Date|Composite-->
        <!--Composite為Size和Date的組合-->
        <rollingStyle value="Composite" />

        <!--當備份檔案時,為檔案名加的后綴-->
        <datePattern value="yyyyMMdd/&quot;log.log&quot;" />

        <!--日志最大個數,都是最新的-->
        <!--rollingStyle節點為Size時,只能有value個日志-->
        <!--rollingStyle節點為Composite時,每天有value個日志-->
        <maxSizeRollBackups value="20" />

        <!--可用的單位:KB|MB|GB-->
        <maximumFileSize value="3MB" />

        <!--置為true,當前最新日志檔案名永遠為file節中的名字-->
        <staticLogFileName value="false" />

        <!--輸出級別在INFO和ERROR之間的日志-->
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <!-- error日志 -->
    <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs/" />
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <rollingStyle value="Composite" />
        <datePattern value="yyyyMMdd/&quot;error.log&quot;" />
        <maxSizeRollBackups value="20" />
        <maximumFileSize value="3MB" />
        <staticLogFileName value="false" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="ERROR" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <root>

        <!--控制級別,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
        <!--OFF:0-->
        <!--FATAL:FATAL-->
        <!--ERROR: ERROR,FATAL-->
        <!--WARN: WARN,ERROR,FATAL-->
        <!--INFO: INFO,WARN,ERROR,FATAL-->
        <!--DEBUG: INFO,WARN,ERROR,FATAL-->
        <!--ALL: DEBUG,INFO,WARN,ERROR,FATAL--> 
        <priority value="ALL"/>
        
        <level value="INFO"/>
        <!--使用上面配置的那個規則,ref指定上面的規則名稱-->
        <appender-ref ref="rollingAppender" />
        <appender-ref ref="errorAppender" />
    </root>
</log4net>
View Code

運行,日志列印效果

 

 

 

 

3.log4net日志寫入資料庫

這里以log4net寫入Mysql為示例

引入Nuget包

MySql.Data

資料庫日志表腳本

CREATE TABLE `logs` (
  `log_id` bigint NOT NULL AUTO_INCREMENT,
  `app_name` varchar(100) NOT NULL,
  `log_date` datetime NOT NULL,
  `thread` varchar(100) NOT NULL,
  `level` varchar(50) NOT NULL,
  `logger` varchar(255) NOT NULL,
  `message` varchar(1000) NOT NULL,
  `exception` varchar(2000) NOT NULL,
  PRIMARY KEY (`log_id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

 

增加配置資訊

 

 

 

 

完整組態檔

 

<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <!-- Define some output appenders -->
    <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
    <!--    value="https://www.cnblogs.com/wei325/p/logs/log.log"-->
        <file value="logs/" />
        <!--追加日志內容-->
        <appendToFile value="true" />

        <!--防止多執行緒時不能寫Log,官方說執行緒非安全-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

        <!--可以為:Once|Size|Date|Composite-->
        <!--Composite為Size和Date的組合-->
        <rollingStyle value="Composite" />

        <!--當備份檔案時,為檔案名加的后綴-->
        <datePattern value="yyyyMMdd/&quot;log.log&quot;" />

        <!--日志最大個數,都是最新的-->
        <!--rollingStyle節點為Size時,只能有value個日志-->
        <!--rollingStyle節點為Composite時,每天有value個日志-->
        <maxSizeRollBackups value="20" />

        <!--可用的單位:KB|MB|GB-->
        <maximumFileSize value="3MB" />

        <!--置為true,當前最新日志檔案名永遠為file節中的名字-->
        <staticLogFileName value="false" />

        <!--輸出級別在INFO和ERROR之間的日志-->
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <!-- error日志 -->
    <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs/" />
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <rollingStyle value="Composite" />
        <datePattern value="yyyyMMdd/&quot;error.log&quot;" />
        <maxSizeRollBackups value="20" />
        <maximumFileSize value="3MB" />
        <staticLogFileName value="false" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="ERROR" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <!--SqlServer形式-->
    <!--log4net日志配置:http://logging.apache.org/log4net/release/config-examples.html -->
    <appender name="mysqlAppender" type="log4net.Appender.AdoNetAppender">
        <!--日志快取寫入條數 設定為0時只要有一條就立刻寫到資料庫-->
        <bufferSize value="0" />
        <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
        <connectionString value="server=127.0.0.1;database=test_db;user=root;pwd=123456;SslMode=none" />
        <commandText value="INSERT INTO logs(app_name,log_date, thread, `level`, logger, message, `exception`)VALUES(@app_name,@log_date, @thread,@log_level, @logger, @message, @exception);" />
        <parameter>
            <parameterName value="@app_name" />
            <dbType value="String" />
            <size value="100" />
            <layout type="log4net.Layout.PatternLayout" >
                <conversionPattern value="api" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@log_date" />
            <dbType value="DateTime" />
            <layout type="log4net.Layout.RawTimeStampLayout" />
        </parameter>
        <parameter>
            <parameterName value="@thread" />
            <dbType value="String" />
            <size value="100" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%thread" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@log_level" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@logger" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@message" />
            <dbType value="String" />
            <size value="1000" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@exception" />
            <dbType value="String" />
            <size value="2000" />
            <layout type="log4net.Layout.ExceptionLayout" />
        </parameter>
    </appender>
    <root>

        <!--控制級別,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
        <!--OFF:0-->
        <!--FATAL:FATAL-->
        <!--ERROR: ERROR,FATAL-->
        <!--WARN: WARN,ERROR,FATAL-->
        <!--INFO: INFO,WARN,ERROR,FATAL-->
        <!--DEBUG: INFO,WARN,ERROR,FATAL-->
        <!--ALL: DEBUG,INFO,WARN,ERROR,FATAL--> 
        <priority value="ALL"/>
        
        <level value="INFO"/>
        <!--使用上面配置的那個規則,ref指定上面的規則名稱-->
        <appender-ref ref="rollingAppender" />
        <appender-ref ref="errorAppender" />
        <appender-ref ref="mysqlAppender" />
    </root>
</log4net>
View Code

 

效果

 

 

 

如果是SqlServer

引入Nuget包

System.Data.SqlClient

 connectionType寫上SqlServer的連接型別

<connectionType value="System.Data.SqlClient.SqlConnection,System.Data.SqlClient, Version=4.6.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

連接字串處改成SqlServer的連接字串即可,

二、接入NLog

1.寫文本日志

引入Nuget包

NLog.Web.AspNetCore

組態檔內容

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="NLog\all_log.log">

  <targets>
      <!--檔案日志,archive相關引數:檔案拆分,每100M拆分一個新檔案-->
      <target xsi:type="File" 
            name="all_log"
            fileName="NLog\${shortdate}\${uppercase:${level}}.log"
            layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"
            archiveFileName="NLog\${shortdate}\${uppercase:${level}}${shortdate}.{####}.log"
            archiveNumbering="Rolling"
            archiveAboveSize="10485760"
            concurrentwrites="true"
            maxArchiveFiles="100"
              />

  </targets>
    

  <rules> 
    <!-- add your logging rules here -->
      <!--路由順序會對日志列印產生影響,路由匹配邏輯為順序匹配,-->
      <logger name="*" minlevel="Trace" writeTo="all_log" />
  </rules>
</nlog>

 

 程式引入NLog

 

 

程式使用:

 

結果:

 

 

 

2.過濾日志

有一些組件自帶了日志的,像上面的Microsoft.*開頭就是.Net Core自帶的,我們想屏蔽掉一些dll的日志怎么弄呢

修改配置規則

 

 

 

 效果:

 

 

 

 

3.自定義日志檔案名

很多時候我們想把比較重要的功能的日志單獨寫到一個日志檔案方便排查,NLog提供了單獨打日志檔案的功能

修改組態檔,用一個屬性接收,屬性由程式端傳來:${event-properties:filename}

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="NLog\all_log.log">

  <targets>
      <!--檔案日志,archive相關引數:檔案拆分,每100M拆分一個新檔案-->
      <target xsi:type="File" 
            name="all_log"
            fileName="NLog\${shortdate}\${event-properties:filename}${shortdate}.log"
            layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"
            archiveFileName="NLog\${shortdate}\${event-properties:filename}${shortdate}.{####}.log"
            archiveNumbering="Rolling"
            archiveAboveSize="10485760"
            concurrentwrites="true"
            maxArchiveFiles="100"
              />
  </targets>

  <rules> 
    <!-- add your logging rules here -->
      <!--路由順序會對日志列印產生影響,路由匹配邏輯為順序匹配,-->
      
      <!--Skip Microsoft logs and so log only own logs-->
      <!--以Microsoft打頭的日志將進入此路由,由于此路由沒有writeTo屬性,所有會被忽略-->
      <!--且此路由設定了final,所以當此路由被匹配到時,不會再匹配此路由下面的路由,未匹配到此路由時才會繼續匹配下一個路由-->
      <logger name="Microsoft.*" minlevel="Trace"  final="true" />
      <logger name="*" minlevel="Trace" writeTo="all_log" />
  </rules>
</nlog>

封裝一個LogHelper.cs

 public class LogHelper
    {
        private static Logger logger= LogManager.GetCurrentClassLogger();
        public static void Info(string message,string fileName="INFO")
        {
            //把檔案名通過屬性傳輸
            logger.WithProperty("filename", fileName).Info(message);
        }
        public static void Debug(string message, string fileName = "DEBUG")
        {
            logger.WithProperty("filename", fileName).Debug(message);
        }
        public static void Error(string message, string fileName = "Error")
        {
            logger.WithProperty("filename", fileName).Error(message);
        }
        public static void Warn(string message, string fileName = "Warn")
        {
            logger.WithProperty("filename", fileName).Warn(message);
        }

    }

程式呼叫:

效果:

 

 

 

 

4.NLog寫入資料庫

這里以Mysql為例

 引入Nuget包

MySql.Data

sql表腳本還是上面Log4net一樣,

配置

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="NLog\all_log.log">

  <targets>
      <!--檔案日志,archive相關引數:檔案拆分,每100M拆分一個新檔案-->
      <target xsi:type="File" 
            name="all_log"
            fileName="NLog\${shortdate}\${event-properties:filename}${shortdate}.log"
            layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"
            archiveFileName="NLog\${shortdate}\${event-properties:filename}${shortdate}.{####}.log"
            archiveNumbering="Rolling"
            archiveAboveSize="10485760"
            concurrentwrites="true"
            maxArchiveFiles="100"
              />
      
      <target name="mysql_log" xsi:type="Database"
   dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
   connectionString="server=127.0.0.1;database=test_db;user=root;pwd=123456;SslMode=none"
   commandText="INSERT INTO logs(app_name,log_date, thread, `level`, logger, message, `exception`)VALUES(@app_name,@log_date, @thread,@log_level, @logger, @message, @exception);">
           <parameter name="@app_name" layout="AspNetCoreNlog" />
          <parameter name="@log_date" layout="${date}" />
          <parameter name="@thread" layout="${threadid}" />
          <parameter name="@log_level" layout="${level}" />
          <parameter name="@logger" layout="${logger}" />
          <parameter name="@message" layout="${message}" />
          <parameter name="@exception" layout="${exception:tostring}" />
      </target>
     
  </targets>
    

  <rules> 
    <!-- add your logging rules here -->
      <!--路由順序會對日志列印產生影響,路由匹配邏輯為順序匹配,-->
      
      <!--Skip Microsoft logs and so log only own logs-->
      <!--以Microsoft打頭的日志將進入此路由,由于此路由沒有writeTo屬性,所有會被忽略-->
      <!--且此路由設定了final,所以當此路由被匹配到時,不會再匹配此路由下面的路由,未匹配到此路由時才會繼續匹配下一個路由-->
      <logger name="Microsoft.*" minlevel="Trace"  final="true" />
      <logger name="*" minlevel="Trace" writeTo="all_log" />
      <logger name="*" minlevel="Trace" writeTo="mysql_log" />
  </rules>
</nlog>

 

效果:

 

 

 

如果寫SqlServer

引入Nuget包

System.Data.SqlClient
dbProvider="System.Data.SqlClient.SqlConnection, System.Data.SqlClient"
connectionString改為SqlServer的連接字串即可

5.Log4Net對比NLog

Log4Net對比NLog來說性能相差無幾

但是個人推薦用NLog,原因有

1.配置簡單

2.可以很方便的自定義日志檔案名,這個對于核心模塊單獨打日志太方便了,

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/445247.html

標籤:.NET Core

上一篇:ASP.NET Core框架探索之Authentication

下一篇:LazyCaptcha自定義隨機驗證碼和字體

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more