log4net配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!--log4net配置-->
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<!--log4net配置-->
<log4net>
<!--定义输出到文件中-->
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<!--file可以指定具体的路径 D://logfile.txt。-->
<file value="log\\logfile.txt"/>
<level value="All"></level>
<!--如果放在Debug下,当然名字你可以改 -->
<!--<file value="log//logfile.txt"/>-->
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<!--备份log文件的个数最多10个-->
<maxSizeRollBackups value="10" />
<!--每个log文件最大是10M,如果超过10M将重新创建一个新的log文件,并将原来的log文件备份。-->
<maximumFileSize value="10MB" />
<datePattern value="yyyy-MM-dd'.txt'"/>
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="记录时间:%date %n线程ID:[%thread] %n日志级别:%-5level %n所在类:%logger property:[%property{NDC}] - %n信息描述:%message%newline"/>
</layout>
</appender>
<!--定义日志的输出媒介-->
<root>
<!--指定将此级别及以上的log打印到log文件中-->
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
<!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ALL"/>
<!--文件形式记录日志-->
<appender-ref ref="LogFileAppender"/>
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
设置配置文件属性
实现日志类
using log4net;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
//关联配置文件
[assembly:log4net.Config.XmlConfigurator(ConfigFile ="log.config",Watch =true)]
namespace SSmart_RD2021_09_Logger
{
public class Logger
{
ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
#region Debug
public virtual void DebugLog(string msg)
{
AddLogMessage($"{LoggerTypeEnum.Debug}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Debug(msg);
}
public virtual void DebugLog(string msg, Exception ex)
{
AddLogMessage($"{LoggerTypeEnum.Debug}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Debug(msg, ex);
}
#endregion
#region Info
public virtual void InfoLog(string msg)
{
AddLogMessage($"{LoggerTypeEnum.Info}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Info(msg);
}
#endregion
#region Warn
public virtual void WarnLog(string msg)
{
AddLogMessage($"{LoggerTypeEnum.Warn}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Warn(msg);
}
public virtual void WarnLog(string msg, Exception ex)
{
AddLogMessage($"{LoggerTypeEnum.Warn}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Warn(msg, ex);
}
#endregion
#region Error
/// <summary>
/// 添加Error级别日志
/// </summary>
/// <param name="sender">错误源</param>
/// <param name="msg">错误说明</param>
public virtual void ErrorLog(object sender,string msg)
{
//AddLogMessage($"{LoggerTypeEnum.Error}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Error($"{msg}|{sender}");
}
/// <summary>
/// 添加Error级别日志
/// </summary>
/// <param name="msgToView">要在界面日志框中显示的消息</param>
/// <param name="ex">错误信息</param>
public virtual void ErrorLog(string msgToView, Exception ex)
{
//LogMsgToView = $"{DateTime.Now.ToString("HH:mm:ss")} | {msg}";
AddLogMessage($"{LoggerTypeEnum.Error}:{DateTime.Now.ToString("HH:mm:ss")}|{msgToView}");
_log.Error(msgToView, ex);
}
public virtual void ErrorLog(Exception ex)
{
_log.Error(ex);
}
#endregion
#region Fatal
public virtual void FatalLog(string msg)
{
AddLogMessage($"{LoggerTypeEnum.Fatal}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Fatal(msg);
}
public virtual void FatalLog(string msg, Exception ex)
{
AddLogMessage($"{LoggerTypeEnum.Fatal}:{DateTime.Now.ToString("HH:mm:ss")}|{msg}");
_log.Fatal(msg, ex);
}
public virtual void FatalLog(Exception ex)
{
_log.Fatal(ex);
}
#endregion
/// <summary>
/// 向界面绑定的日志信息集合中添加日志(界面最多显示30条日志信息)
/// </summary>
/// <param name="logMsg"></param>
private void AddLogMessage(string logMsg)
{
if (LogMessages==null)
{
LogMessages = new ObservableCollection<string>();
}
if (LogMessages.Count<=30)
{
LogMessages.Add(logMsg);
}
else
{
LogMessages.RemoveAt(0);
LogMessages.Add(logMsg);
}
}
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
private static ObservableCollection<string> _logMessages;
/// <summary>
/// 用于向界面显示时绑定的日志信息源
/// </summary>
public static ObservableCollection<string> LogMessages
{
get { return _logMessages; }
set
{
_logMessages = value;
StaticPropertyChanged?.Invoke(null,new PropertyChangedEventArgs(nameof(LogMessages)));
}
}
}
}