• C# Log4Net 日志


    C#使用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

                  

          2app.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 TestLog4Net

    8 {

    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 //1FormMain是类名称

    23 //2)第二个参数是字符串信息

    24 LogHelper.WriteLog(typeof(FormMain), "测试Log4Net日志是否写入");

    25

    26

    27 //第二种记录用法

    28 //1FormMain是类名称

    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浏览器查看。

          下载log4net测试源码

    LOG4NET用法(个人比较喜欢的用法)

     

    log 4net组件下载:log4net.dll

     

    web.config配置如下:

     

    <?xml version="1.0" encoding="utf-8" ?>

    <configuration>

    <configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

    </configSections>

    <log4net>

    <logger name="logerror">

    <level value="ERROR" />

    <appender-ref ref="ErrorAppender" />

    </logger>

    <logger name="loginfo">

    <level value="INFO" />

    <appender-ref ref="InfoAppender" />

    </logger>

    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">

    <param name="File" value="Log\LogError\" />

    <param name="AppendToFile" value="true" />

    <param name="MaxSizeRollBackups" value="100" />

    <param name="MaxFileSize" value="10240" />

    <param name="StaticLogFileName" value="false" />

    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />

    <param name="RollingStyle" value="Date" />

    <layout type="log4net.Layout.PatternLayout">

    <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p

    &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />

    </layout>

    </appender>

    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">

    <param name="File" value="Log\LogInfo\" />

    <param name="AppendToFile" value="true" />

    <param name="MaxFileSize" value="10240" />

    <param name="MaxSizeRollBackups" value="100" />

    <param name="StaticLogFileName" value="false" />

    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />

    <param name="RollingStyle" value="Date" />

    <layout type="log4net.Layout.PatternLayout">

    <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p

    &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />

    </layout>

    </appender>

    </log4net>

    <system.web>

    <compilation defaultLanguage="c#" debug="true" />

    <customErrors mode="RemoteOnly" />

    <authentication mode="Windows" />

    <authorization>

    <allow users="*" />

    </authorization>

    <trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />

    <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

    cookieless="false" timeout="20" />

    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />

    </system.web>

    </configuration>

     

    LOG操作类

     

    using System;

    using System.IO;

     

    namespace TankAction.SystemLog

    {

    /// <summary>

    /// LogHelper的摘要说明。

    /// </summary>

    public class LogHelper

    {

    private SystemLog()

    {

    }

     

    public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");

     

    public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");

     

    public static void SetConfig()

    {

    log4net.Config.DOMConfigurator.Configure();

    }

     

    public static void SetConfig(FileInfo configFile)

    {

    log4net.Config.DOMConfigurator.Configure(configFile);

    }

     

    public static void WriteLog(string info)

    {

    if(loginfo.IsInfoEnabled)

    {

    loginfo.Info(info);

    }

    }

     

    public static void WriteLog(string info,Exception se)

    {

    if(logerror.IsErrorEnabled)

    {

    logerror.Error(info,se);

    }

    }

    }

    }

     

     

    Global.asax.cs文件配置如下:

     

     

    protected void Application_Start(Object sender, EventArgs e)

    {

    SystemLog.SetConfig();

    }

    protected void Application_Error(Object sender, EventArgs e)

    {

    Exception objExp = HttpContext.Current.Server.GetLastError();

    LogHelper.WriteLog(" 客户机IP:"+ Request.UserHostAddress +" 错误地址:"+ Request.Url +" 异常信息:"+ Server.GetLastError().Message,objExp);

    }

     

    eg:

    try

    {}

    catch(Exception ex)

    {

    LogHelper.WriteLog("ErrorInfo"ex);

    }

    -------------------------------------对大家有所帮助,是我最大的快乐。。。。。。

  • 相关阅读:
    JS pop push unshift shift的作用与区别
    白话js this指向问题
    JS作用域,作用域,作用链详解
    angular $q promise详解
    白话$resource,$resource中的增删改查
    ng-app与ng-app='myApp'的区别
    详解 高效字节流
    详解 字节输出流 与 字节输入流
    阶段性复习与应用——复制多级文件夹
    详解 字节流
  • 原文地址:https://www.cnblogs.com/qq260250932/p/5444042.html
Copyright © 2020-2023  润新知