1.引用log4net.dll动态链接库文件,点击引用-》右键-》管理NuGet程序包,点击搜索log4,出现如图的安装程序后,点击安装,即引用log4net.dll成功
2.添加Log4net.config配置文件,名字可以根据自己需要命名,如app.config,ddd.config等
3.设置新建的配置文件Log4net.config的属性,复制到输出目录为:始终复制或如果较新则复制,这样设置可以程序能够识别自定义命名的配置文件
4.配置新建的配置文件,具体的说明请自行百度
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!-- 控制台输出日志,第一种方式-->
<!--
<logger name="Info_Console">
<level value="INFO"></level>
<appender-ref ref="InfoLog_Console" />
</logger>
<logger name="Warn_Console">
<level value="WARN"></level>
<appender-ref ref="WarnLog_Console" />
</logger>
<logger name="Error_Console">
<level value="ERROR"></level>
<appender-ref ref="ErrorLog_Console" />
</logger>
<logger name="Debug_Console">
<level value="DEBUG"></level>
<appender-ref ref="DebugLog_Console" />
</logger>
<logger name="Fatal_Console" >
<level value="FATAL"></level>
<appender-ref ref="FatalLog_Console" />
</logger>
-->
<!-- 控制台输出日志,第二种方式-->
<logger name="Console_Log">
<level value="ALL"></level>
<appender-ref ref="InfoLog_Console" />
<appender-ref ref="WarnLog_Console" />
<appender-ref ref="ErrorLog_Console" />
<appender-ref ref="DebugLog_Console" />
<appender-ref ref="FatalLog_Console" />
</logger>
<appender name="InfoLog_Console" type="log4net.Appender.ColoredConsoleAppender">
<!-- 设置不同级别控制台显示的不同颜色 -->
<mapping>
<level value="INFO" />
<!--<foreColor value="Red, HighIntensity" />-->
<!--<backColor value="Red,HighIntensity"/>-->
</mapping>
<!-- 记录的格式。 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<!-- 控制输出日志的级别范围 -->
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<appender name="WarnLog_Console" type="log4net.Appender.ColoredConsoleAppender">
<!-- 设置不同级别控制台显示的不同颜色 -->
<mapping>
<level value="WARN" />
<!--<foreColor value="Red, HighIntensity" />-->
<!--<backColor value="Red,HighIntensity"/>-->
</mapping>
<!-- 记录的格式。 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<!-- 控制输出日志的级别范围 -->
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<appender name="ErrorLog_Console" type="log4net.Appender.ColoredConsoleAppender">
<!-- 设置不同级别控制台显示的不同颜色 -->
<mapping>
<level value="ERROR" />
<!--<foreColor value="Red, HighIntensity" />-->
<!--<backColor value="Red,HighIntensity"/>-->
</mapping>
<!-- 记录的格式。 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<!-- 控制输出日志的级别范围 -->
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<appender name="DebugLog_Console" type="log4net.Appender.ColoredConsoleAppender">
<!-- 设置不同级别控制台显示的不同颜色 -->
<mapping>
<level value="DEBUG" />
<!--<foreColor value="Red, HighIntensity" />-->
<!--<backColor value="Red,HighIntensity"/>-->
</mapping>
<!-- 记录的格式。 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<!-- 控制输出日志的级别范围 -->
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
<appender name="FatalLog_Console" type="log4net.Appender.ColoredConsoleAppender">
<!-- 设置不同级别控制台显示的不同颜色 -->
<mapping>
<level value="FATAL" />
<!--<foreColor value="Red, HighIntensity" />-->
<!--<backColor value="Red,HighIntensity"/>-->
</mapping>
<!-- 记录的格式。 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<!-- 控制输出日志的级别范围 -->
<param name="LevelMin" value="FATAL" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<!--写入日志文件配置,第一种方式-->
<!--
<logger name="Info_Write">
<level value="INFO"></level>
<appender-ref ref="InfoLog_Write" />
</logger>
<logger name="Warn_Write">
<level value="WARN"></level>
<appender-ref ref="WarnLog_Write" />
</logger>
<logger name="Error_Write">
<level value="ERROR"></level>
<appender-ref ref="ErrorLog_Write" />
</logger>
<logger name="Debug_Write">
<level value="DEBUG"></level>
<appender-ref ref="DebugLog_Write" />
</logger>
<logger name="Fatal_Write">
<level value="FATAL"></level>
<appender-ref ref="FatalLog_Write" />
</logger>
<logger name="Fatal_Write">
<level value="Fatal"></level>
<appender-ref ref="FatalLog_Write" />
</logger>
-->
<!--写入日志文件配置,第二种方式-->
<logger name="RollingFileAppender">
<level value="ALL"></level>
<appender-ref ref="InfoLog_Write" />
<appender-ref ref="WarnLog_Write" />
<appender-ref ref="ErrorLog_Write" />
<appender-ref ref="DebugLog_Write" />
<appender-ref ref="FatalLog_Write" />
</logger>
<!--Info_Write日志配置-->
<appender name="InfoLog_Write" type="log4net.Appender.RollingFileAppender">
<!--Info保存路径-->
<param name="File" value="Logs\\Info\\" />
<!--是否追加到文件-->
<param name="AppendToFile" value="true" />
<!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<Encoding value="UTF-8" />
<!--是否只写到一个文件中-->
<param name="StaticLogFileName" value="false" />
<!--Info日志名-->
<param name="DatePattern" value="yyyyMMdd_HHmmss_"Info"".log"" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<!--Log内容-->
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<!--本文件记录日志 级别区间-->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="INFO" />
</filter>
</appender>
<!--Warn_Write日志配置-->
<appender name="WarnLog_Write" type="log4net.Appender.RollingFileAppender">
<!--Warn保存路径-->
<param name="File" value="Logs\\Warn\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<Encoding value="UTF-8" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<!--Warn日志名-->
<param name="DatePattern" value="yyyyMMdd_HHmmss_"Warn"".log"" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<!--Log内容-->
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<!--本文件记录日志 级别区间-->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="WARN" />
</filter>
</appender>
<!--Error_Write日志配置-->
<appender name="ErrorLog_Write" type="log4net.Appender.RollingFileAppender">
<!--Error保存路径-->
<param name="File" value="Logs\\Error\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<Encoding value="UTF-8" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<!--Error日志名-->
<param name="DatePattern" value="yyyyMMdd_HHmmss_"Error"".log"" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<!--Log内容-->
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<!--本文件记录日志 级别区间-->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ERROR" />
</filter>
</appender>
<!--Debug_Write日志配置-->
<appender name="DebugLog_Write" type="log4net.Appender.RollingFileAppender">
<!--Debug保存路径-->
<param name="File" value="Logs\\Debug\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<Encoding value="UTF-8" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<!--Debug日志名-->
<param name="DatePattern" value="yyyyMMdd_HHmmss_"Debug"".log"" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<!--Log内容-->
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<!--本文件记录日志 级别区间-->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="DEBUG" />
</filter>
</appender>
<!--Fatal_Write日志配置-->
<appender name="FatalLog_Write" type="log4net.Appender.RollingFileAppender">
<!--Fatal保存路径-->
<param name="File" value="Logs\\Fatal\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<Encoding value="UTF-8" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<!--Fatal日志名-->
<param name="DatePattern" value="yyyyMMdd_HHmmss_"Fatal"".log"" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<!--Log内容-->
<conversionPattern value="%n================
%n日志时间:%d
%n执行时间:%r
%n日志级别:%-5p
%n日志对象:%c
%n日志行号:%L
%n日志线程:%t
%n日志内容:%m
%n==============="/>
</layout>
<!--本文件记录日志 级别区间-->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="FATAL" />
<levelMax value="FATAL" />
</filter>
</appender>
</log4net>
</configuration>
5.在AssemblyInfo.cs文件中添加一行
//自定义配置文件 ConfigFile :配置名;Watch:监听
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net.config", Watch = true)]
其中,CofigFile属性值为自己命名的配置文件
6.添加日志操作类
/// ***********************************************************************
///
/// =================================
/// 创 建 者 :congz
/// 创建日期 :2019/7/15 9:52:17
/// 邮箱 :335134701@qq.com
/// =================================
/// 项目名称 :test
/// 项目描述 :
/// 文件名称 :LogHelper.cs
/// 类 名 称 :LogHelper
/// 类 描 述 :
/// 所在的域 :ZC-PC
/// 命名空间 :test
/// 机器名称 :ZC-PC
/// CLR 版本 :4.0.30319.42000
/// 版 本 号 :v1.0.0.0
/// =================================
/// 修改者 :
/// 修改日期 :
/// 修改内容 :
/// 修改版本 :v1.0.0.0
/// =================================
///
/// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
namespace test
{
class LogHelper
{
/*控制台输出日志,第一种方式*/
//public static readonly ILog infoLog_Console = LogManager.GetLogger("Info_Console");
/*控制台输出日志,第二种方式*/
public static readonly ILog console_Log = LogManager.GetLogger("Console_Log");
/*写入日志文件配置,第一种方式*/
/*
public static readonly ILog infoLog_Write = LogManager.GetLogger("Info_Write");
public static readonly ILog warnLog_Write = LogManager.GetLogger("Warn_Write");
public static readonly ILog errorLog_Write = LogManager.GetLogger("Error_Write");
public static readonly ILog debugLog_Write = LogManager.GetLogger("Debug_Write");
public static readonly ILog fatalLog_Write = LogManager.GetLogger("Fatal_Write");
/// <summary>
/// 正常日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteInfoLog(string message, params object[] args)
{
if (infoLog_Write.IsInfoEnabled)
{
infoLog_Write.InfoFormat(message, args);
}
}
/// <summary>
/// 警告日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteWarnLog(string message, params object[] args)
{
if (warnLog_Write.IsWarnEnabled)
{
warnLog_Write.WarnFormat(message, args);
}
}
/// <summary>
/// 错误日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteErrorLog(string message, params object[] args)
{
if (errorLog_Write.IsErrorEnabled)
{
errorLog_Write.ErrorFormat(message, args);
}
}
/// <summary>
/// 调试日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteDebugLog(string message, params object[] args)
{
if (debugLog_Write.IsDebugEnabled)
{
debugLog_Write.DebugFormat(message, args);
}
}
/// <summary>
/// 严重错误日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteFatalLog(string message, params object[] args)
{
if (fatalLog_Write.IsFatalEnabled)
{
fatalLog_Write.FatalFormat(message, args);
}
}
*/
/*写入日志文件配置,第二种方式*/
public static readonly ILog rollingFileAppender = LogManager.GetLogger("RollingFileAppender");
/// <summary>
/// 正常日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteInfoLog(string message, params object[] args)
{
if (rollingFileAppender.IsInfoEnabled)
{
rollingFileAppender.InfoFormat(message, args);
}
}
/// <summary>
/// 警告日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteWarnLog(string message, params object[] args)
{
if (rollingFileAppender.IsWarnEnabled)
{
rollingFileAppender.WarnFormat(message, args);
}
}
/// <summary>
/// 错误日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteErrorLog(string message, params object[] args)
{
if (rollingFileAppender.IsErrorEnabled)
{
rollingFileAppender.ErrorFormat(message, args);
}
}
/// <summary>
/// 调试日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteDebugLog(string message, params object[] args)
{
if (rollingFileAppender.IsDebugEnabled)
{
rollingFileAppender.DebugFormat(message, args);
}
}
/// <summary>
/// 严重错误日志输出写入文本方法
/// </summary>
/// <param name="message"></param>
/// <param name="args"></param>
public static void WriteFatalLog(string message, params object[] args)
{
if (rollingFileAppender.IsFatalEnabled)
{
rollingFileAppender.FatalFormat(message, args);
}
}
}
}
7.使用及测试效果
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace test
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LogHelper.WriteInfoLog("11111111111111");
LogHelper.WriteWarnLog("11111111111111");
LogHelper.WriteDebugLog("11111111111111");
LogHelper.WriteErrorLog("11111111111111");
LogHelper.WriteFatalLog("11111111111111");
/*控制台输出日志,第一种方式*/
//LogHelper.infoLog_Console.InfoFormat("11111111111111111");
/*控制台输出日志,第二种方式*/
LogHelper.console_Log.InfoFormat("11111111111111");
Application.Run(new Form1());
}
}
}