using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Qin.Tools
{
public static class LogHelper
{
/// <summary>
/// 记录一般错误
/// </summary>
/// <param name="t"></param>
/// <param name="ex"></param>
public static void Error(this Type t, object message, Exception ex = null)
{
Console.BackgroundColor = ConsoleColor.Yellow;
Console.ForegroundColor = ConsoleColor.Red;
log4net.ILog log = log4net.LogManager.GetLogger(t);
if (ex == null)
{
log.Error(message);
}
else
{
log.Error(message, ex);
}
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
}
/// <summary>
/// 记录警告
/// </summary>
/// <param name="t"></param>
/// <param name="msg"></param>
public static void Warn(this Type t, object msg, Exception ex = null)
{
Console.BackgroundColor = ConsoleColor.DarkMagenta;
Console.ForegroundColor = ConsoleColor.White;
log4net.ILog log = log4net.LogManager.GetLogger(t);
if (ex == null)
{
log.Warn(msg);
}
else
{
log.Warn(msg, ex);
}
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
}
/// <summary>
/// 记录信息
/// </summary>
/// <param name="t"></param>
/// <param name="msg"></param>
/// <param name="ex"></param>
public static void Info(this Type t, object msg, Exception ex = null)
{
Console.BackgroundColor = ConsoleColor.DarkGreen;
Console.ForegroundColor = ConsoleColor.Yellow;
log4net.ILog log = log4net.LogManager.GetLogger(t);
if (ex == null)
{
log.Info(msg);
}
else
{
log.Info(msg, ex);
}
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
}
/// <summary>
/// 记录一个调试信息
/// </summary>
/// <param name="t"></param>
/// <param name="msg"></param>
/// <param name="ex"></param>
public static void DeBug(this Type t, object msg,Exception ex=null)
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Cyan;
log4net.ILog log = log4net.LogManager.GetLogger(t);
if (ex == null)
{
log.Debug(msg);
}
else
{
log.Debug(msg, ex);
}
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
}
/// <summary>
/// 记录一个致命错误
/// </summary>
/// <param name="t"></param>
/// <param name="msg"></param>
/// <param name="ex"></param>
public static void Fatal(this Type t, object msg, Exception ex = null)
{
Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
log4net.ILog log = log4net.LogManager.GetLogger(t);
if (ex == null)
{
log.Fatal(msg);
}
else
{
log.Fatal(msg, ex);
}
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
}
}
}
在控制台输入如下代码(确保引入LogHelper的命名空间)
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
Type t = typeof(Program);
t.DeBug("调试记录");
t.Info("info信息", new Exception("ex"));
t.Warn("警告警告");
t.Error("执行出错");
t.Fatal("致命错误");
Console.ReadKey();
}
}
效果如下图所示
配置文件中在configuration节点下添加如下配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!--定义输出到文件中-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="log\\"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value='yyyyMM\\yyyy-MM-dd"_Infom.log.md"'/>
<staticLogFileName value="false"/>
<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="**`%-5level`** ***%date*** - *%logger [%property{NDC}]* %newline```c#%n%message%n```%n%n%n-----%n%n%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="WARN" />
</filter>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[时间]:%d%n[级别]:%p%n[内容]:%m%n%n"></conversionPattern>
</layout>
</appender>
<!-- 异常输出 -->
<appender name="FatalLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log\" />
<rollingStyle value="Composite" />
<datePattern value='yyyyMM\\yyyy-MM-dd"_Fatal.log.md"' />
<staticLogFileName value="false" />
<maximumFileSize value="30MB" />
<countDirection value="-1" />
<maxSizeRollBackups value="-1" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="**`%-5level`** ***%date*** - *%logger [%property{NDC}]* %newline```c#%n%message%n```%n%n%n-----%n%n%n" />
</layout>
<!--控制输出日志的级别范围-->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<level value="ALL"/>
<!--文件形式记录日志-->
<appender-ref ref="RollingLogFileAppender"/>
<appender-ref ref="FatalLogFileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</root>
</log4net>
在上面配置文件中,生成的日志文件会分为两个文件保存,分别是fatal
和info
,两个文件分别保存不同级别的错误文件!