使用 Log4Net 记录日志

第一步:下载Log4Net

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

           把下载的  log4net-1.2.11-bin-newkey解压后,如下图所示:

          

            双击bin文件夹

              

              双击net文件夹,选择针对.NET FramerWork的不同版本

              

             找到相应版本的log4net.dll

第二步:应用Log4Net

          

          1、在项目中添加Log4Net.DLL的引用

                开发环境:XP Professional Service Pack3

               开发工具:VS2010旗舰版

          新建个WinForm应用程序,效果图如下仅为了简单演示

            

           窗体命名为:FormMain

          把Log4Net.Dll复制到项目的根目录下,然后添加Log4Net的引用

          

 

      添加引用之后

    2、配置Log4Net

       (1)新建一个应用程序配置文件app.config

               

      (2)app.config的配置文件内容如下

       

 1 <?xml version="1.0"?>2 <configuration>3   <configSections>4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>5   </configSections>6   <log4net>7     <!--定义输出到文件中-->8     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">9       <!--定义文件存放位置-->
10       <file value="log\\"/>
11       <appendToFile value="true"/>
12       <rollingStyle value="Date"/>
13       <datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/>
14       <staticLogFileName value="false"/>
15       <param name="MaxSizeRollBackups" value="100"/>
16       <layout type="log4net.Layout.PatternLayout">
17         <!--每条日志末尾的文字说明-->
18         <!--输出格式-->
19         <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
20         <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
21       </layout>
22     </appender>
23     <root>
24       <level value="ERROR"/>
25       <!--文件形式记录日志-->
26       <appender-ref ref="RollingLogFileAppender"/>
27     </root>
28   </log4net>
29 </configuration>

 

      

    每个参数的含义请参考如下链接:

    Log4Net使用详解转载周公

    http://blog.csdn.net/zhoufoxcn/article/details/2220533

   Log4Net使用详解续转载周公

   http://www.cnblogs.com/zhoufoxcn/archive/2010/11/23/2515616.html

(3)新建一个LogHelper帮助类,为了在多个窗体中都进行调用,类内容如下:

  

 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 6 [assembly: log4net.Config.XmlConfigurator(Watch = true)]7 namespace TestLog4Net8 {9    public  class LogHelper
10     {
11         /// <summary>
12         /// 输出日志到Log4Net
13         /// </summary>
14         /// <param name="t"></param>
15         /// <param name="ex"></param>
16         #region static void WriteLog(Type t, Exception ex)
17 
18         public static void WriteLog(Type t, Exception ex)
19         {
20             log4net.ILog log = log4net.LogManager.GetLogger(t);
21             log.Error("Error", ex);
22         }
23 
24         #endregion
25 
26         /// <summary>
27         /// 输出日志到Log4Net
28         /// </summary>
29         /// <param name="t"></param>
30         /// <param name="msg"></param>
31         #region static void WriteLog(Type t, string msg)
32 
33         public static void WriteLog(Type t, string msg)
34         {
35             log4net.ILog log = log4net.LogManager.GetLogger(t);
36             log.Error(msg);
37         }
38 
39         #endregion
40 
41 
42     }
43 }

此时生成解决方案,可能会出现如下错误信息:

   未能找到类型或命名空间名称"log4net"(是否缺少using指令或程序集引用?)解决方法  

   当前上下文中不存在名称"log4net"解决方法

此时可能有的人很纳闷,明明添加了引用怎么还提示找不到命名空间呢。解决这个问题很简单,右键项目选择属性

 

 

 

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

 

第三步:测试Log4Net

 

           在按钮的事件中添加如下的代码

 

 1 using System;2 using System.Collections.Generic;3 using System.ComponentModel;4 using System.Data;5 using System.Drawing;6 using System.Linq;7 using System.Text;8 using System.Windows.Forms;9 
10 namespace TestLog4Net
11 {
12     public partial class FormMain : Form
13     {
14         public FormMain()
15         {
16             InitializeComponent();
17         }
18 
19         private void btnTest_Click(object sender, EventArgs e)
20         {
21             //第一种记录用法
22             //(1)FormMain是类名称
23             //(2)第二个参数是字符串信息
24             LogHelper.WriteLog(typeof(FormMain), "测试Log4Net日志是否写入");
25 
26 
27             //第二种记录用法
28             //(1)FormMain是类名称
29             //(2)第二个参数是需要捕捉的异常块
30             //try { 
31             
32             //}catch(Exception ex){
33 
34             //    LogHelper.WriteLog(typeof(FormMain), ex);
35 
36             //}
37           
38 
39         }
40     }
41 }

 

 

运行项目点击Button按钮,在项目的根目录下就会看到log文件夹

打开log文件夹就会看到里面以日期命名的文件夹一直打开可以看到如下图

看到这个文件就说明log4net.dll的应用已经成功了。

 

 

备注:文件夹的命名是根据你在app.config里面设置的file节点自动生成的,你可以根据自己的需要自己设置存放的路径和格式等。

       如果部分图片显示不出来,请用Chrome浏览器查看。

转载于:https://www.cnblogs.com/ShaYeBlog/p/5556742.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xcode常用快捷键

1. 文件CMD N: 新文件CMD SHIFT N: 新项目CMD O: 打开CMD S: 保存CMDOPtS&#xff1a;保存所有文件CMD SHIFT S: 另存为CMD W: 关闭窗口CMD Q :退出XcodeCMD SHIFT W: 关闭文件2. 编辑CMD [: 左缩进CMD ]: 右缩进CMDshiftF:项目中查找CMDG:查找下一个CMDshiftG:查…

学习笔记(16):Python网络编程并发编程-开启子进程的两种方式

立即学习:https://edu.csdn.net/course/play/24458/296424?utm_sourceblogtoedu #方式一&#xff1a;使用python内置模块multiprocessing下的process类 from multiprocessing import Process import time#定义进程函数 def task(name):print(%s is running&#xff01;%name)t…

ElasticSearch的API python调用

os json datetime datetime django.http HttpResponse reelasticsearch Elasticsearches Elasticsearch([])res8 es.search({:{:{:{::}}}} ) statistic():():hit res8[][]:a (%hit %hit[])a re.split(a);arow a:id row[] row[]idHttpResponse(a)转载于:https://blog.51cto…

HDU 1757 A Simple Math Problem (矩阵快速幂)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1757 在吴神的帮助下才明白如何构造矩阵&#xff0c;还是好弱啊。 此处盗一张图 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <cmath>5 #include <al…

Spring学习使用标签来标记资源(@Component、@Repository、 @Service和@Controller)和用法(包括如何jsp正在使用)...

首先&#xff0c;在xml其中新增部分标有下划线的文件&#xff0c;容器初始化的时候需要扫描包 注意&#xff1a; a. 包款扫描(下划线部分)一定要加&#xff0c;默认是不扫描整个包。与每一包之间’&#xff0c;’开。如过具有同样的父包&#xff0c;那么我们能够用父包来取…

python 判断字符串时是否是json格式方法

在实际工作中&#xff0c;有时候需要对判断字符串是否为合法的json格式 解决方法使用json.loads,这样更加符合‘Pythonic’写法 代码示例&#xff1a; Python import json def is_json(myjson):try:json_object json.loads(myjson)except ValueError, e:return Falsereturn Tr…

学习笔记(17):Python网络编程并发编程-Process对象的其他属性或方法

立即学习:https://edu.csdn.net/course/play/24458/296427?utm_sourceblogtoedu 1.pid与ppid&#xff1a;pid进程编码&#xff0c;ppid进程的父进程编码&#xff1b;os.getpid()查看正在运行的进程编码&#xff0c;os.getppid()查看正在运行进程的父进程编码 2.僵尸进程&…

用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 ;带注释!

//用弦截法求一元三次方程的根x^3-5x^216x-800 #include<stdio.h>#include<math.h> float f(float x) //定义子函数f(x) x^3-5x^216x-80&#xff0c;当f(x) →0时&#xff0c;则x即为所求的实数根&#xff1b; { float y; y((x-5.0)*x16.0)*x-80.0; …

两个很有用的进程间通信函数popen,pclose

两个很有用的进程间通信函数popen,pclose 今天起的比较晚&#xff0c;然后来了也不想复习&#xff0c;还是看书学习--写代码--写博客有意思&#xff0c;不敢说有多精通&#xff0c;至少每天都在学习新知识&#xff0c;不求立刻完全消化&#xff0c;但求每天有进步。 现在就看看…

c++中指针箭头的用法

1、c中指针用箭头来引用类或者结构体的成员&#xff0c;箭头操作符“->”用来引用指针对象。这是是用于类&#xff0c;或者是结构体的指针变量用的。 如struct Point {int x,y;};Point *ptnew Point;pt->x1; 举例子说明一下&#xff1a;比如&#xff0c;我有一个对象dark…

化零为整WCF(14) - 事务(Transaction)

[索引页][源码下载] 化零为整WCF(14) - 事务(Transaction)作者&#xff1a;webabcd介绍WCF(Windows Communication Foundation) - 事务(Transaction)&#xff1a; 对契约方法使用TransactionFlowAttribute声明&#xff08;设置TransactionFlowOption参数&#xff09;&#x…

有限元分析笔记01-平面应力和平面应变

https://www.zhihu.com/question/30439292 http://blog.sina.cn/dpool/blog/s/blog_c4c804690102vqqs.html plate stress plate strain

MQTT-SN协议乱翻之实现要点

前言 本篇是MQTT-SN 1.2协议最后一篇翻译了&#xff0c;主要涉及实现要点&#xff0c;很简短。 需要支持QoS 值为 -1 QoS虽默认设置有0,1,2三个值&#xff0c;但还有一种情况其值为-1。来自客户端的PUBLISH消息中若QoS为-1的情况下&#xff0c;此刻客户端不会关心和网关有没有建…

oracle-REDO日志文件分析(insert)

1:记录当前scnselect dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------11595722:创建表CREATE TABLE team (team_code VARCHAR2(3),team_name VARCHAR2(30),country_code VARCHAR2(3) );INSERT INTO team VALUES (M…

删除修改bond

参考地址&#xff1a;http://www.111cn.net/sys/linux/79301.htm 四、删除bonding设备 如由于最初配置的bonding设备取名为bond0&#xff0c;而后改名为了bond1&#xff0c;造成了两个bonding设备的存在&#xff0c;现在需删除bond0 。先查看下网络设备&#xff1a; # ls /sys/…

学习笔记(18):Python网络编程并发编程-守护进程

立即学习:https://edu.csdn.net/course/play/24458/296429?utm_sourceblogtoedu 守护进程&#xff08;了解&#xff09; 1.概念&#xff1a;守护进程是主进程在创建子进程的时候&#xff0c;将子进程设置成守护自己的进程&#xff0c;等主进程结束后&#xff0c;不管子进程的…

静态页面之间的转发与json与ajax做到动态数据

我们见过很多使用jsp ,php,asp的动态网页技术的网站了,我们知道如果一个网站内容更新频率极低,而内容量不是十分庞大时,这样的网站(一次开发完成后不会需要较多的维护成本)的完全可以使用全部使用静态页面来做,此时其实反而可以得到更好的效果(更快的响应时间(省掉了服务器各种…

数组的最后一位的下一位为什么是0?

以下是我做的两个实验&#xff0c;加证实了数组的最后一位的后一位是0&#xff0c;只应该是系统自动添加的标志位 1、比如 int a[5] 则a[5]0,这个是什么原因我还没有搞懂 #include<iostream> using namespace std;int main() {int a[5];int *pa;for(int i0;i<5;i){a[i…

iOS开发网络篇—NSURLConnection基本使用

iOS开发网络篇—NSURLConnection基本使用 一、NSURLConnection的常用类 &#xff08;1&#xff09;NSURL&#xff1a;请求地址 &#xff08;2&#xff09;NSURLRequest&#xff1a;封装一个请求&#xff0c;保存发给服务器的全部数据&#xff0c;包括一个NSURL对象&#xff0c;…