自己试的一个log4net记录日志小demo,写到文本中,log4net记录日志的功能远比这个强大的多,先记录一下这个简单的demo
(1)一个配置文件
(2)一个日志帮助类
一、配置文件内容
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="ErrorFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\\error\\"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="100"/>
<param name="MaxFileSize" value="10240"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="'error_'yyyy_MM_dd'.log'"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
</layout>
</appender>
<appender name="FatalFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\\fatal\\"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="100"/>
<param name="MaxFileSize" value="10240"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="'fatal_'yyyy_MM_dd'.log'"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
</layout>
</appender>
<appender name="InfoFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\\info\\"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="100"/>
<param name="MaxFileSize" value="10240"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="'info_'yyyy_MM_dd'.log'"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
</layout>
</appender>
<appender name="WarnFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\\warn\\"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="100"/>
<param name="MaxFileSize" value="10240"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="'warn_'yyyy_MM_dd'.log'"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
</layout>
</appender>
<appender name="TraceFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\\trace\\"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="100"/>
<param name="MaxFileSize" value="10240"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="'trace_'yyyy_MM_dd'.log'"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
</layout>
</appender>
<logger name="error">
<level value="ERROR"/>
<appender-ref ref="ErrorFileAppender"/>
</logger>
<logger name="fatal">
<level value="FATAL"/>
<appender-ref ref="FatalFileAppender" />
</logger>
<logger name="info">
<level value="INFO"/>
<appender-ref ref="InfoFileAppender"/>
</logger>
<logger name="warn">
<level value="Warn"/>
<appender-ref ref="WarnFileAppender"/>
</logger>
<logger name="trace">
<level value="DEBUG"/>
<appender-ref ref="TraceFileAppender"/>
</logger>
</log4net>
</configuration>
配置文件结点含义详细说明链接:https://www.cnblogs.com/kissazi2/p/3392605.html
二、LogHelper.cs
using log4net;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teld.Base.MD.Business
{
public class LogHelper
{
private readonly static string _configFileName = "MD_log4net.config";
private readonly static ILog _errorLog;
private readonly static ILog _falatLog;
private readonly static ILog _infoLog;
private readonly static ILog _warnLog;
private readonly static ILog _traceLog;
private LogHelper() { }
static LogHelper()
{
var configFilePath = string.Format("{0}\\bin\\{1}", System.AppDomain.CurrentDomain.BaseDirectory, _configFileName);
//var str = System.AppDomain.CurrentDomain.BaseDirectory;
//var path = configFilePath;
//var file = new FileInfo(path);
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));
_errorLog = LogManager.GetLogger("error");
_falatLog = LogManager.GetLogger("fatal");
_infoLog = LogManager.GetLogger("info");
_warnLog = LogManager.GetLogger("warn");
_traceLog = LogManager.GetLogger("trace");
}
public static void Error(object message)
{
if (_errorLog.IsErrorEnabled)
{
_errorLog.Error(message);
}
}
public static void Error(Exception ex)
{
if (_errorLog.IsErrorEnabled)
{
var err = JsonConvert.SerializeObject(ex);
_errorLog.Error(err);
}
}
public static void Fatal(object message)
{
if (_errorLog.IsFatalEnabled)
{
_falatLog.Fatal(message);
}
}
public static void Info(object message)
{
if (_infoLog.IsInfoEnabled)
{
_infoLog.Info(message);
}
}
public static void Warn(object message)
{
if (_warnLog.IsWarnEnabled)
{
_warnLog.Warn(message);
}
}
public static void Trace(object message)
{
if (_traceLog.IsDebugEnabled)
{
_traceLog.Debug(message);
}
}
public static void Log(object message,LogLevel level)
{
if (level == LogLevel.Error) Error(message);
if (level == LogLevel.Fatal) Fatal(message);
if (level == LogLevel.Info) Info(message);
if (level == LogLevel.Warn) Warn(message);
}
public static void Log(Exception ex)
{
Error(ex);
}
public enum LogLevel
{
Error=1,
Fatal,
Info,
Warn,
Trace
}
}
}
然后在需要记日志的地方直接调用上面改方法即可
LogHelper.Trace("获取费用字典列表成功");
三、遇到的问题
(1)因为我是在测试程序里调用,在bin文件下的Debug文件夹下的bin文件夹,需要放上这个config文件,要不然
var configFilePath = string.Format("{0}\\bin\\{1}", System.AppDomain.CurrentDomain.BaseDirectory, _configFileName);
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));
这个路径下找不到该文件,会报错FileNotFound
(2)第一次配置文件里的命名少了一个单引号,'error_'yyyy_MM_dd'.log',导致报错