log4net的使用并不复杂,三步走就可以了:

1,引用log4net.dll;

2,新建配置文件log4net.config;

3,使用log4net;

附件是dll文件和config文件样例,可以参考使用。

实际使用中,通常写一个类负责初始化log4net和返回log4net实例:

public static class Log4Net
{
/// <summary>
/// Log4Net初始化
/// </summary>
public static void Log4NetInit()
{
    log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath("../Log4Net.config")));
}
/// <summary>
/// 返回日志对象
/// </summary>
public static log4net.ILog Log()
{
    return log4net.LogManager.GetLogger("KangarooLog");
}
}

在Global.asax中,初始化Log4Net配置:

void Application_Start(object sender, EventArgs e)
    {
        //在应用程序启动时运行的代码
        //初始化Log4Net配置
        Log4Net.Log4NetInit();
    }

页面上的使用:

Log4Net.Log().Error("Error");
Log4Net.Log().Warn("Warn");
Log4Net.Log().Info("Info");
 
Log4net.config配置文件的内容:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <logger name="KangarooLog">
    <!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
    <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
    <level value="ALL" />
    <!--<appender-ref ref="SmtpAppenderKangaroo"></appender-ref>-->
    <appender-ref ref="FileAppenderKangaroo"></appender-ref>
  </logger>
  <appender name="SmtpAppenderKangaroo" type="log4net.Appender.SmtpAppender">
    <to value="Kangaroo@800best.com"></to>
    <from value="Kangaroo@800best.com" />
    <subject value="Kangaroo Log Message" />
    <smtpHost value="smtp.800best.com" />
    <username value="Kangaroo" />
    <password value="Kangaroo" />
    <bufferSize value="2048" />
    <!--超长部分是否丢弃-->
    <lossy value="false" />
    <!--evaluator时好时坏,靠不住,还是用filter实在-->
    <!--<evaluator type="log4net.Core.LevelEvaluator">
      <threshold value="ERROR"/>
    </evaluator>-->
    <!--<evaluator type="log4net.Core.LevelEvaluator,log4net">
      <threshold value="WARN" />
    </evaluator>-->
    <!--将导致不能写日志-->
    <!--<filter type="log4net.Filter.DenyAllFilter" />-->
    <!--输出级别在定义之间的日志-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ALL" />
      <param name="LevelMax" value="OFF" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] : %newline%message%newline" />
    </layout>
  </appender>
 
 <appender name="FileAppenderKangaroo" type="log4net.Appender.RollingFileAppender">
    <!--绝对路径-->
    <!--<file value="D:\KangarooLog.txt"></file>-->
    <param name="File" value="./Log/KangarooLog.log" />
    <param name="AppendToFile" value="true" />
    <!--相对路径,在项目的根目录下-->
    <!--以最后一个路径为准,所以上面的绝对路径下不会写日志-->
    <!--<file value="./Log/Kangaroo.txt"></file>-->
    <!--防止多线程时不能写Log,官方说线程非安全-->
    <!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <appendToFile value="true" />
    <!--可以为:Once|Size|Date|Composite-->
    <!--Composite为Size和Date的组合-->
    <rollingStyle value="composite" />
    <!--日志最大个数,都是最新的-->
    <!--rollingStyle节点为Date时,该节点不起作用-->
    <!--rollingStyle节点为Size时,只能有value个日志-->
    <!--rollingStyle节点为Composite时,每天有value个日志-->
    <maxSizeRollBackups value="10" />
    <!--当备份文件时,为文件名加的后缀-->
    <!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP  应该是程序上的一个bug-->
    <!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->
    <datePattern value="_yyyy-MM-dd.TXT" />
    <!--可用的单位:KB|MB|GB-->
    <!--不要使用小数,否则会一直写入当前日志-->
    <maximumFileSize value="2MB" />
    <!--置为true,当前最新日志文件名永远为file节中的名字-->
    <staticLogFileName value="true" />
    <!--输出级别在INFO和ERROR之间的日志-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="ERROR" />
    </filter>
    <!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->
    <filter type="log4net.Filter.LevelMatchFilter">
      <param name="LevelToMatch" value="WARN" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  </appender>
</log4net>
<!--==================================layout节点的配置说明==================================-->
<!--                                                                        Made By AX      -->
<!--        %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息                          -->
<!--        %n(new line):换行                                                                   -->
<!--        %d(datetime):输出当前语句运行的时刻                                                 -->
<!--        %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数                           -->
<!--        %t(thread id):当前语句所在的线程ID                                                  -->
<!--        %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等                           -->
<!--        %c(class):当前日志对象的名称,例如:                                                -->
<!--               模式字符串为:%-10c -%m%n                                                    -->
<!--               代码为:                                                                     -->
<!--        ILog log=LogManager.GetLogger(“Exam.Log”);                                        -->
<!--        log.Debug(“Hello”);                                                               -->
<!--            则输出为下面的形式:                                                            -->
<!--        Exam.Log       - Hello                                                              -->
<!--        %L:输出语句所在的行号                                                              -->
<!--        %F:输出语句所在的文件名                                                            -->
<!--        %-数字:表示该项的最小长度,如果不够,则用空格填充                                  -->
<!--        例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出: -->
<!--        176 [main] INFO  org.foo.Bar - Located nearest gas station.                         -->
posted @ 2009-08-07 11:16 A&Qiang 阅读(2841) 评论(3) 推荐(0) 编辑
摘要: 查了些文档,发现两者区别还是很明显的。根本上,Response是叫浏览器去重新转向到指定的网页,而Server自然是发生在服务器端为主了,因此会有以下区别:1. Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;2. Server.Transfer可以将页面参数方便传递到指定页面;3. 使用时,Server.Transfer跳到别的页... 阅读全文
posted @ 2009-01-15 10:24 A&Qiang 阅读(401) 评论(1) 推荐(0) 编辑
摘要: 1:服务契约的操作符重载诸如C++和C#等编程语言都支持方法重载,但是,基于WSDL的操作不支持操作重载,如果在WCF中定义重载函数,在启动服务时就会抛出异常InvalidOperationException,异常信息如下:“同一个协定中不能存在两个名称相同的操作,类型为 ServiceContractSample.IServiceContracOverload 的方法 Add 和 A... 阅读全文
posted @ 2008-12-14 23:16 A&Qiang 阅读(864) 评论(0) 推荐(0) 编辑
摘要: 如果出现以下错误信息,极有可能是连接数过多,WCF配置文件默认为10个连接数,如果连接服务的客户端超过10个后,将访问不到服务.信息如下:System.TimeoutException: 请求通道在等待 00:01:00 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能是更长超时的一部分。 ---> System.Timeout... 阅读全文
posted @ 2008-12-12 16:03 A&Qiang 阅读(2634) 评论(1) 推荐(0) 编辑
摘要: 在使用WCF服务时,如果客户端调用服务时出现如下错误:System.ServiceModel.Security.MessageSecurityException: 从另一方收到未进行安全处理或安全处理不正确的错误。有关错误代码和详细信息,请参阅内部 FaultException。 ---> System.ServiceModel.FaultException: 消息中至少有一个安全令牌无法验... 阅读全文
posted @ 2008-12-12 15:58 A&Qiang 阅读(943) 评论(0) 推荐(0) 编辑
摘要: 一、如何在IE右键菜单中添加菜单项 如果使用过Netants的朋友可能都知道,NetAnts在IE中添加了右键菜单功能,只要在页面的一个链接 或者图片上点击右键后在菜单中选择 Down By Netants 就可以调用Netants下载该链接指向的文件。在本 文中作者将介绍如何通过VB来实现这样的功能。 要实现在IE右键菜单中添加菜单项的功能,要依次实现以下步骤: 1、在注册表HKEY_C... 阅读全文
posted @ 2008-11-14 13:54 A&Qiang 阅读(599) 评论(0) 推荐(0) 编辑
摘要: 任何一个使用.NET的人1) 描述线程与进程的区别?线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一... 阅读全文
posted @ 2008-06-11 13:04 A&Qiang 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 每次来到博客园都心潮澎湃,因为每次都能看到各位大师的杰作,也总想将自己所知道的知识和大家共享,可基于文章的编写水平有限,一直没有实施,今天,再一次来到这里,又激起心中的那份渴望。万事开头难,为了锻炼一下自己的写作水平,也为了能够和大家一起走进.Net的海洋,探讨.Net的知识,和大家做朋友,从今天开始就用自己笨拙的笔来勾画自己的思想和见解,同时也肯请园子里的朋友给我鼓励和支持。在你们的支持下,我相... 阅读全文
posted @ 2008-05-07 22:36 A&Qiang 阅读(179) 评论(0) 推荐(0) 编辑

                                                                                   站长:强子    建站时间:2008-03-19   lingchenyidian@live.cn    站长统计:

点击右上角即可分享
微信分享提示