1.在nuget中引入下图的两个包
2.在项目中新增log4net.config文件
3.配置文件内容4
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!--错误日志-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="log\\LogError\\" />
<!--是否支持分割文件(追加日志)-->
<appendToFile value="true" />
<!--日志文件的记录形式-->
<rollingStyle value="Composite" />
<!--防止多线程时不能写log-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!-- 日志文件的命名规则 -->
<datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" />
<!--当日志文件达到MaxFileSize大小,就自动创建备份文件。-->
<param name="MaxSizeRollBackups" value="100" />
<!--日志文件的布局格式-->
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末尾的文字说明-->
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n错误描述:%message%newline %n" />
</layout>
</appender>
<!--Info日志-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\Info\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n日志描述:%message%newline %n" />
</layout>
</appender>
<!--Debug日志-->
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\Debug\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy\\yyyyMM\\yyyyMMdd HH'.txt'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n日志描述:%message%newline %n" />
</layout>
</appender>
<!--监控日志-->
<appender name="MonitorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\Monitor\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n跟踪描述:%message%newline %n" />
</layout>
</appender>
<!--Error日志-->
<logger name="LogError">
<level value="ERROR" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
<!--Info日志-->
<logger name="LogInfo">
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</logger>
<!--Info日志-->
<logger name="LogDebug">
<level value="DEBUG" />
<appender-ref ref="DebugAppender" />
</logger>
<!--监控日志-->
<logger name="LogMonitor">
<level value="Monitor" />
<appender-ref ref="MonitorAppender" />
</logger>
<!--root权限-->
<root>
<priority value="ALL"/>
<level value="ALL"/>
<appender ref="rollingAppender"/>
</root>
</log4net>
4.在startup中注入
或者在Program.cs中加入以下代码
program.cs
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
builder.Services.AddLogging(cfg =>
{
//cfg.AddLog4Net();
//默认的配置文件路径是在根目录,且文件名为log4net.config
//如果文件路径或名称有变化,需要重新设置其路径或名称
//比如在项目根目录下创建一个名为cfg的文件夹,将log4net.config文件移入其中,并改名为log.config
//则需要使用下面的代码来进行配置
cfg.AddLog4Net(new Log4NetProviderOptions()
{
Log4NetConfigFileName = "ConfigFile/log4net.config",
Watch = true
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
5.写一个log类
using System;
namespace CompoundingDevice.Common
{
public class LogHelper
{
private static readonly log4net.ILog LInfo = log4net.LogManager.GetLogger("LogInfo");
private static readonly log4net.ILog LError = log4net.LogManager.GetLogger("LogError");
private static readonly log4net.ILog LMonitor = log4net.LogManager.GetLogger("LogMonitor");
private static readonly log4net.ILog LDebug = log4net.LogManager.GetLogger("LogDebug");
/// <summary>
/// 记录Error日志
/// </summary>
/// <param name="errorMsg"></param>
/// <param name="ex"></param>
public static void Error(string errorMsg, Exception ex = null)
{
if (ex != null)
{
LError.Error(errorMsg, ex);
}
else
{
LError.Error(errorMsg);
}
}
/// <summary>
/// 记录Info日志
/// </summary>
/// <param name="msg"></param>
/// <param name="ex"></param>
public static void Info(string msg, Exception ex = null)
{
if (ex != null)
{
LInfo.Info(msg, ex);
}
else
{
LInfo.Info(msg);
}
}
/// <summary>
/// 记录Monitor日志
/// </summary>
/// <param name="msg"></param>
public static void Monitor(string msg)
{
LMonitor.Info(msg);
}
/// <summary>
/// 记录Debug日志
/// </summary>
/// <param name="msg"></param>
/// <param name="ex"></param>
public static void Debug(string msg, Exception ex = null)
{
if (ex != null)
{
LInfo.Debug(msg, ex);
}
else
{
LInfo.Debug(msg);
}
}
}
}
6.使用方法
LogHelper.Info($"发送数据 {cmd}");