在.net中用log4net记录日志信息,已经是很平常的事情了。

log4net下载:http://logging.apache.org/log4net/download_log4net.cgi

百度网盘下载:http://pan.baidu.com/s/1i3GM8ML

下载后。引用log4net.dll到项目中

添加引用:

using log4net.Config;
using log4net;

生成项目后。你会发现:

这是项目框架造成的:

将目标框架默认的.NET Framework4 Client Profile修改为.NET Framework4之后再重新生成解决方案就行了。

不知道为什么。创建项目默认会是.NET Framework4 Client Profile的。其实这个框架会出现很多问题

比如:不能引用system.web程序集。遇到的就应该知道。不过知道问题的来源就好解决了。

好了。log4net准备好了。现在当然是配置文件,没有app.config的话。可以手动添加一个app.config文件

日志文件一般是写在文本文件里面。或者记录在数据库。但大家都推荐记录在文本文件中。

先看怎么把日志文件写入文本文件,来看看app.config的配置,

 <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="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/>
<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="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
</layout>
</appender>
<root>
<level value="ERROR"/>
文件形式记录日志
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

提供一个LogHelper.cs类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; //在项目的程序集信息描述文件中,设置Log4net的可记录属性
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApplication1
{
class LogHelper
{
/// <summary>
/// 输出日志到Log4Net
/// </summary>
/// <param name="t">当前消息来自成员的类</param>
/// <param name="ex">异常信息</param>
#region static void WriteLog(Type t, Exception ex) public static void WriteLog(Type t, Exception ex)
{
log4net.ILog log = log4net.LogManager.GetLogger(t);
log.Error(ex.Message, ex);
//log.Info(ex.Message, ex);
} #endregion /// <summary>
/// 输出日志到Log4Net
/// </summary>
/// <param name="t">当前消息来自成员的类</param>
/// <param name="msg">错误消息</param>
#region static void WriteLog(Type t, string msg) public static void WriteLog(Type t, string msg)
{
log4net.ILog log = log4net.LogManager.GetLogger(t);
//log.Error(msg);
log.Info("dd");
} #endregion
}
}

配置文件有了,LogHelper帮助了也有了。现在当然是测试,模拟程序异常。写入文本文件中

 ////第一种方法。直接记录错误消息
//LogHelper.WriteLog(typeof(Program), "测试Log4Net日志是否写入"); ////第二种方法:捕获异常
try
{
//int c = 0;
// int i = 8 / c; //此处异常,将被cath捕获 Program c = null;
c.ToString();
}
catch (Exception ex)
{
//此处已经封装到LogHelper类
//log4net.ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//log.Error("Error", ex); //Program是该成员的类,可以这样获取,利用反射:MethodBase.GetCurrentMethod().DeclaringType
//LogHelper.WriteLog(typeof(Program), ex);
//所以也可以这样写
LogHelper.WriteLog(MethodBase.GetCurrentMethod().DeclaringType, ex); //一般错误
LogHelper.WriteLog(MethodBase.GetCurrentMethod().DeclaringType, "一般错误");
}

因为app.config中配置的日志路径是:<file value="log\\"/>

即在Debug目录下面会有一个log文件夹,并以当前年份生成了子文件夹,最里面才是文本文件

打开看日志。如愿是生成了错误信息,没有找到对象,程序员经常遇到的错误

如果写入文本文件已经满足不了你。那你可以尝试把错误信息写入数据库

首先创建在sql server中创建保存的表

USE log4net
GO /****** Object: Table [dbo].[Log]******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO SET ANSI_PADDING ON
GO CREATE TABLE [dbo].[Log](
[Id] [int] IDENTITY(1,1) NOT NULL, --id
[LevelName] [varchar](50) NULL, --级别名称
--[UserID] [int] NULL,
[Message] [varchar](4000) NULL, --错误描述
--[Exception] [varchar](2000) NULL,
[RecordTime] [varchar](50) NULL, --记录时间
CONSTRAINT [PK_Log_1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO SET ANSI_PADDING OFF
GO

修改app.config文件:

 <configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections> <log4net>
<!--<root>
<level value="INFO"></level>
<appender-ref ref="AdoNetAppender_SQL"/>
</root>--> <logger name="WebLogger">
<level value="INFO"/>
<appender-ref ref="ADONetAppender" /> </logger> <!--SQL数据库-->
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="1"/> <!-- SQL数据源 ,本地安装SQL客户端-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> <!-- SQL连接字符串-->
<connectionString value="data source=.;initial catalog=log4net;integrated security=False;persist security info=True;User ID=sa;Password=123" /> <commandText value="INSERT INTO Log ([RecordTime],[LevelName],[Message]) VALUES (@log_date, @log_level, @message)"/> <parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter> <parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter> <!--<parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.ExceptionLayout"/>
</parameter>--> <parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter> <!--自定义成员 -->
<!--<parameter>
<parameterName value="@UserID" />
<dbType value="Int32" /> <layout type="JJ.Data.LogCommon.CustomLayout">
<conversionPattern value="%UserID" />
</layout> </parameter>--> </appender> <!--<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" /> </root>--> </log4net> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup> </configuration>

这里编写一个测试类。代码有些荣誉,暂时没考虑封装

  public class LogHelper1
{
public LogHelper1()
{ } public static string LoggerName = string.Empty; private static LogMessage message = null; private static ILog _log; public static ILog log
{
get
{
string path = @"D:\Project\ConsoleApplication1\ConsoleApplication1\App5.config";
//ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
log4net.Config.XmlConfigurator.Configure(new FileInfo(path)); //根据路径直接读取app.config
//log4net.Config.XmlConfigurator.Configure(); //加载app.config,这里名字必须是app.config if (_log == null)
{
//从配置文件中读取Logger对象
//WebLogger 里面的配置信息是用来将日志录入到数据库的
//做为扩展 做判断来确定日志的记录形式,数据库也好,txt文档也好,控制台程序也好。
_log = log4net.LogManager.GetLogger(LoggerName);
}
else
{
if (_log.Logger.Name != LoggerName)
{
_log = log4net.LogManager.GetLogger(LoggerName);
}
} return _log;
}
} /// <summary>
/// 调试
/// </summary>
public static void debug()
{
if (log.IsDebugEnabled)
{
log.Debug(message);
}
} /// <summary>
/// 错误
/// </summary>
public static void error()
{
if (log.IsErrorEnabled)
{
log.Error(message);
}
} /// <summary>
/// 严重错误
/// </summary>
public static void fatal()
{
if (log.IsFatalEnabled)
{
log.Fatal(message);
}
} /// <summary>
/// 记录一般日志
/// </summary>
public static void info()
{
if (log.IsInfoEnabled)
{
log.Info(message.message);
}
} /// <summary>
/// 记录警告
/// </summary>
public static void warn()
{
if (log.IsWarnEnabled)
{
log.Warn(message);
}
} /// <summary>
/// 需要写日志的地方调用此方法
/// </summary>
/// <param name="level">自定义级别</param>
public static void SaveMessage(LogMessage logMessage, int level)
{
message = logMessage; switch (level)
{
case :
info();
break; case :
warn();
break; case :
error();
break; case :
fatal();
break; default: break;
}
} } /// <summary>
/// 错误提示类
/// </summary>
public class LogMessage
{
public object message { get; set; } }

测试代码

    try
{
int c = ;
int i = / c; }
catch (Exception ex)
{ //LogHelper1.LoggerName = "WebLogger";
LogMessage logMessage = new LogMessage();
logMessage.message = ex; //logMessage.UserID = 123456;
LogHelper1.SaveMessage(logMessage, ); }

查看数据库,也如你所愿记录了信息

看博客永远是别人的。只有在看了后自己动手操作一次,两次。。。。才是自己的。

现在怕就怕你不努力。不要怕没有东西学!!

参考资料:

http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html

http://www.cnblogs.com/Lhuatao/p/4431023.html#3164867

http://www.cnblogs.com/mbailing/archive/2012/08/28/2660002.html

用log4net记录日志信息的更多相关文章

  1. [转]C#使用Log4Net记录日志

    第一步:下载Log4Net 下载地址:http://logging.apache.org/log4net/download_log4net.cgi 把下载的  log4net-1.2.11-bin-n ...

  2. 使用Log4net记录日志

    首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志系统所记录的信息为系统进行排错, ...

  3. C# 使用 log4net 记录日志

    Ø  前言 在一般的开发应用中,都会涉及到日志记录,用于排查错误 或 记录程序运行时的日志信息.log4net 库是 Apache log4j 框架在 Microsoft .NET 平台的实现,是一个 ...

  4. ASP.NET Core使用log4net记录日志

    .NET常用的日志组件有NLog.Log4net等,.NET CORE下微软也自带了日志组件,到目前为止还没用过,而我本人常用的是log4net,下面简单讲讲.NET CORE下怎么使用log4net ...

  5. 使用Log4net记录日志(非常重要)

    使用Log4net记录日志   首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志 ...

  6. 基于Log4Net记录日志到SQLServer(自定义字段)

    本文记录通过log4net将日志信息记录到SQLServer数据库中. 1.新建控制台应用程序 Log4NetDemo: 2.通过NuGet安装Log4Net (项目版本2.0.8): 3.项目根目录 ...

  7. 在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息

    在我们常规的调试或者测试的时候,喜欢把一些测试信息打印在控制台或者记录在文件中,对于.netframework项目来说,我们输出控制台的日志信息习惯的用Console.WriteLine来输出查看,不 ...

  8. 将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库

    最近做了一个sharePoint项目,需要实现的功能是,第三方网站访问我们sharePoint中的数据,通过Webservice方式实现文件的上传和下载. 于是代码工作完成了之后,本地调试没什么问题, ...

  9. Windows服务使用log4net记录日志

    该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇. 比较流行的日志组件有以下四种,Topshelf都有相应的组件提供 log4net NL ...

随机推荐

  1. pl-svo代码解读

    pl-svo是在svo的基础上结合点和线特征的半直接法视觉里程计 程序启动通过app文件夹下的run_pipeline.cpp主程序启动,其它的函数文件统一放在src文件夹下,我们先从run_pipe ...

  2. 游标SQL Cursor 基本用法

    http://www.cnblogs.com/Gavinzhao/archive/2010/07/14/1777644.html 1 table1结构如下 2 id    int 3 name  va ...

  3. block diagonal matrix 直和 块对角矩阵 不完美 有缺陷 缩放 射影几何

    小结: 1.block diagonal matrix  直和 块对角矩阵 A block diagonal matrix is a block matrix that is a square mat ...

  4. day0315 迭代器

    一. 迭代器 1.什么是可迭代器? 除了数字和布尔值之外,其他数据类型都是可迭代对象.(字符串,列表,元组,字典,集合) 2.可迭代协议 2.1 可以被迭代要满足的要求就叫可迭代协议,可迭代的定义非常 ...

  5. [others] 一个酷酷的站

    https://xkcd.com/ https://xkcd.com/1080/

  6. Nessus离线安装及升级插件

    最近做客户的内网主机漏洞扫描,申请了一台内网主机做扫描服务器,安装Nessus.由于客户严格限制内网主机不能开通外网访问权限,折腾了一下Nessus离线激活和离线更新漏洞插件,详细过程截图记录. 一. ...

  7. 下载JDK和Jmeter并设置系统环境变量

    一.JDK下载并设置系统环境变量 1.JDK官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 点左边的 ...

  8. jszip 前端生成zip文件下载

    [文档地址] export const ZipFileCreate = () => { Promise.all([ // 下面是引入依赖包 require('jszip'), import('f ...

  9. 【Loadrunner】Loadrnner 参数化策略

    Loadrnner 参数化策略 参数化策略 关键:类型+数据+策略 1.Select next row ( 如何取) 选择下一行 1)Sequential:顺序的 每个VU都从第一行开始,顺序依次向下 ...

  10. Linux上跑MySQL优化技巧

    1.禁止操作系统更新文件的atime属性 atime是Linux/UNIX系统下的一个文件属性,每当读取文件时,操作系统都会将读操作时间回写到磁盘上.对于读写频繁的数据库文件来说,记录文件的访问时间一 ...