WebService中使用log4net日志记录

步骤:以VS2015为例,

第一步,右键解决方案后 点击【管理解决方案的NuGet程序包(N)...】,找到【log4net】下载安装,如下图:

 

 

第二步:安装完成后,在AssemblyInfo.cs代码中 加入以下代码:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]

如下图:

 

 第三步:新建log4net.config,内容如下:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="./Logs/" />
      <!--file可以指定具体的路径 eg : d:\\test.log。不指定的话log被生成在项目的bin/Debug 或者 bin/Release目录下 (web的项目 默认生成在根目录下)-->
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyy-MM-dd&quot;.log&quot;" />
      <maxSizeRollBackups value="10" />
      <!--备份log文件的个数最多10个-->
      <maximumFileSize value="3MB" />
      <!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <!--指定log的格式-->
        <conversionPattern value="[%date]  %thread -- %-5level -- %logger [%M] -- %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <!--指定将此级别及以上的log打印到log文件中-->
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>
复制代码

 

第四步:新建公共辅助方法进行日志写入:

复制代码
/// <summary>
        /// log4net错误信息写入
        /// </summary>
        /// <param name="T"></param>
        /// <param name="ex"></param>
        public static void WriteErrorLog(Type T, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(T);
            log.Error(ex);
        }

        /// <summary>
        /// log4net日志信息写入
        /// </summary>
        /// <param name="T"></param>
        /// <param name="info"></param>
        public static void WriteInfoLog(Type T, string info)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(T);
            log.Info(info);
        }

最后在需要进行日志处理的地方进行日志处理即可。
复制代码

 


附多路径日志如下:
某些业务需要根据不同的功能将日志记录到不同的位置,以便于区分。
复制代码
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="Console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <!-- Pattern to output the caller's file name and line number -->
      <conversionPattern value="%5level [%thread] (%file:%line) - %date - %message%newline" />
    </layout>
  </appender>

  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="Logs\\Common\\%date{yyyy-MM-dd}.log" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1KB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <appender name="EventLoggerAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="Logs\\Events\\%date{yyyy-MM-dd}.log" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1KB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <logger name="FileLogger">
    <level value="ALL" />
    <appender-ref ref="RollingLogFileAppender" />
  </logger>

  <logger name="EventLogger">
    <level value="ALL" />
    <appender-ref ref="EventLoggerAppender" />
  </logger>
  <!-- <root> -->
  <!--   <level value="DEBUG" /> -->
  <!--   <appender-ref ref="RollingLogFileAppender" /> -->
  <!--   <appender-ref ref="Console" /> -->
  <!-- </root> -->
</log4net>
复制代码

 日志工具类(这里只是简单的封装):

 

复制代码
public static class LogHelper
{
    private static readonly ILog logger = LogManager.GetLogger("FileLogger");
    private static readonly ILog eventLogger = LogManager.GetLogger("EventLogger");
    static LogHelper()
    {
        log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/log4net.config")));
    }

    public static void Error(string errMessage)
    {
        logger.Error(errMessage);
    }

    public static void LogEvent(string errMessage)
    {
        eventLogger.Error(errMessage);
    }
}
复制代码

 

复制代码
public class HomeController : Controller
{
    public ActionResult Index()
    {
        LogHelper.Error("出错啦");
        LogHelper.LogEvent("fafdsafdsaff");
        ViewBag.Title = "Home Page";

        return View();
    }
}
复制代码

浏览页面后,可以看到日志目录如下:

 

posted @   violety  阅读(1564)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示