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".log"" /> <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(); } }
浏览页面后,可以看到日志目录如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)