参照自:
1,apache官网 这个一定是你入门的最好教材 点击进入
2,C#使用log4net记录日志 https://www.cnblogs.com/kliine/p/10950859.html
3,非常完整的log4net详细说明 https://blog.csdn.net/binnygoal/article/details/79557746
4,C#一个完整的Log4net使用实例 https://blog.csdn.net/dnazhd/article/details/89555517
1,谈谈使用步骤和流程
log4net是.Net下一个非常优秀的开源日志记录组件。步骤如下:
1,visual studio中通过Nuget安装log4net。
2,CS程序,根目录的Program.cs的Main方法中添加log4net.Config.XmlConfigurator.Configure();
BS程序,根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加:
log4net.Config.XmlConfigurator.Configure();
无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句:
[assembly: log4net.Config .XmlConfigurator()]
代码中我在AssemblyInfo.cs文件中添加如下:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
3,创建log4net.config文件,并配置文件属性》复制到输出目录》如果较新则复制
4,在程序中使用语法
log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");//获取一个日志记录器
log.Info("hello,这是一条日志");
2,主要知识点
Filters
DenyAllFilter 阻止所有的日志事件被记录
LevelMatchFilter 只有指定等级的日志事件才被记录
LevelRangeFilter 日志等级在指定范围内的事件才被记录
LoggerMatchFilter 与Logger名称匹配,才记录
PropertyFilter 消息匹配指定的属性值时才被记录
StringMathFilter 消息匹配指定的字符串才被记录
日志级别
OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
输出样式总结
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
3,一个具体的winform例子
最好的干货就是最凝练的代码,如下,亲测可跑,.net4.5
form1窗体:
public partial class Form1 : Form
{
private static readonly log4net.ILog loginfoDb = LogFactory.GetLogger("loginfoDb");
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
string a = "FF";
int b = Convert.ToInt32(a);
}
catch (Exception ex)
{
LogHelper.WriteLog(ex.Message.ToString(), ex);
string tempmsg = ex.Message.ToString() + "/r/n" + ex.Source.ToString() + "/r/n" + ex.TargetSite.ToString() + "/r/n" + ex.StackTrace.ToString();
if (loginfoDb.IsInfoEnabled)
{
Task.Run(()=> { loginfoDb.Info(tempmsg, ex); });
}
}
}
}
LogHelper类
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp1.Helper
{
public class LogHelper
{
public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");//这里的 loginfo 和 log4net.config 里的名字要一样
//public static readonly log4net.ILog loginfoDb = log4net.LogManager.GetLogger("loginfoDb");//这里的 loginfoDb 和 log4net.config 里的名字要一样
public static readonly log4net.ILog logerror = log4net.LogManager