1、下载log4net并添加引用或通过NuGet安装程序包
2、配置文件中添加配置
在配置文件web.config或App.config中的Configuration节点下增加以下配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<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) - %message%newline"/>
</layout>
</appender>
<!--定义输出到文件中-->
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="App_Log\\log"/>
<!--是否追加到文件-->
<appendToFile value="true"/>
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
<maxSizeRollBackups value="-1"/>
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Composite"/>
<datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/>
<!--是否只写到一个文件中-->
<staticLogFileName value="false"/>
<!--每个文件的大小。只在混合方式与文件大小方式下使用。
超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。
可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="100MB"/>
<!--计数类型为1,2,3…-->
<param name="CountDirection" value="1"/>
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-样例:
记录时间:2022-08-24 17:59:31,172 线程ID:[4] 日志级别:INFO
出错类:Log4NetDemo.MainClass 属性:[UserName:John]
日志描述:创建连接失败。-->
<conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level %n出错类:%logger 属性:[UserName:%property{UserName}] %n日志描述:%message%newline %n"/>
</layout>
</appender>
<root>
<!--日志等级:OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->
<level value="ALL"/>
<!--<appender-ref ref="Console"/>-->
<appender-ref ref="RollingFile"/>
</root>
</log4net>
3、编写日志写入帮助类
注意,在命名空间上方要加代码:[assembly: log4net.Config.XmlConfigurator(Watch = true)],才能正确读取配置文件中的内容。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Demo.Helper
{
/// <summary>
/// 日志帮助类
/// </summary>
public class LogHelper
{
#region 输出日志到Log4Net
/// <summary>
/// 输出日志到Log4Net
/// </summary>
/// <param name="t"></param>
/// <param name="ex">异常对象</param>
/// <param name="level">日志等级,默认为:1 Debug 级</param>
public static void WriteLog(Type t, Exception ex, LogLevel level = LogLevel.DEBUG)
{
WriteLog(t, ex.Message, level);
}
#endregion
#region 输出日志到Log4Net
/// <summary>
/// 输出日志到Log4Net
/// </summary>
/// <param name="t"></param>
/// <param name="msg">错误信息</param>
/// <param name="level">日志等级,默认为:1 Debug 级</param>
public static void WriteLog(Type t, string msg, LogLevel level = LogLevel.DEBUG)
{
// 对应日志信息中的“%property{UserName}”
//log4net.ThreadContext.Properties["UserName"] = "Test";
log4net.ILog log = log4net.LogManager.GetLogger(t);
switch (level)
{
// 日志等级:OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
case LogLevel.DEBUG:
log.Debug(msg);
break;
case LogLevel.INFO:
log.Info(msg);
break;
case LogLevel.WARN:
log.Warn(msg);
break;
case LogLevel.ERROR:
log.Error(msg);
break;
case LogLevel.FATAL:
log.Fatal(msg);
break;
default:
log.Debug(msg);
break;
}
}
#endregion
}
/// <summary>
/// 日志等级:
/// OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
/// </summary>
public enum LogLevel
{
/// <summary>
/// ALL
/// </summary>
ALL = 0,
/// <summary>
/// DEBUG
/// </summary>
DEBUG = 1,
/// <summary>
/// INFO
/// </summary>
INFO = 2,
/// <summary>
/// WARN
/// </summary>
WARN = 3,
/// <summary>
/// ERROR
/// </summary>
ERROR = 4,
/// <summary>
/// FATAL
/// </summary>
FATAL = 5,
/// <summary>
/// OFF
/// </summary>
OFF = 6
}
}
4、通过日志帮助类调用方法写入日志信息
using System;
namespace Demo
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
LogHelper.WriteLog(typeof(Demo), "输出日志信息。", LogLevel.INFO);
}
}
}
5、日志样式
记录时间:2022-08-24 17:58:48,881 线程ID:[4] 日志级别:INFO
出错类:Demo 属性:[UserName:John]
日志描述:监听启动中...
记录时间:2022-08-24 17:58:48,912 线程ID:[4] 日志级别:DEBUG
出错类:Demo 属性:[UserName:John]
日志描述:创建连接。
记录时间:2022-08-24 17:59:10,167 线程ID:[4] 日志级别:ERROR
出错类:Demo 属性:[UserName:John]
日志描述:连接失败。
版权声明:本文为yinshengchen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。