vs2010 中使用 log4net

2023-11-11

*******************************************************************************
vs2010 中使用 log4net
环境:vs2010+framework4.0+log4net(1.2.10.0\framework 2.0)
参考:http://www.cnblogs.com/llhhll/archive/2011/03/01/1967741.html
      http://blog.csdn.net/lyjcn/article/details/4432833
      http://blog.csdn.net/maths_bai/article/details/6074125
      http://hi.baidu.com/zonecens/blog/item/506d805184b0fc878d54306a.html
*******************************************************************************

1.在项目中加入对 log4net 的引用

2.编译项目,如果已经加入了log4net 的引用
  但是编译时还出请添加对“log4net 的引用”的提示,
  这时你需要修改当前项目的“目标框架”版本,先将
  目标框架版本选择成“.NET Framework 2.0” ,然后
  再编译,等编译成功了,你再将“目标框架”版本修改
  为 4.0 就好了。(原因吗,我也不知道为什么!哈哈)

3.添加 log4net 以指定配置文件初始化实例
  [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
  你可以在两个地方写这行代码(我测试用的是 winform 程序)
  3.1 应用程序入口点,也就是 Main 函数所在的类(Program.cs),在那个类的命名空间上一行添加
  3.2 在 Properties/AssemblyInfo.cs 最后一行添加

4.修改应用程序配置文件 app.config 或者 web.config
  在 <configuration> 标签的下一行添加以下的标签及内容
  <configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-2.10"/>
  </configSections>

5.添加配置文件,看看第三步骤我们写的那行代码了吧
  5.1 其中的 ConfigFile = "log4net.config"
      其实就是自定义了一个配置文件,如果不写的话你要将 log4net 的那些配置写在 app.config 中,
      这样我觉得比较乱。
  5.2 其中的 Watch = true
      就是让 log4net 自动的去监视 log4net.config 文件的改动,如果内容有改动你也不用重新启动
      应用程序 log4net 就会自动按照新配置去执行了。
  5.3 添加 log4net 配置文件
      右键项目/添加/添加新项,选择 “应用程序配置文件”,将其命名为 log4net.config,点击【添加】
  注意:右键新建的 log4net.config 文件点击【属性】,在属性窗口中将‘复制到输出目录’改为‘如果较新则复制’
        或者你可以手动将 log4net.config 文件复制到你应用程序输出目录。如果不这样做 log4net 组件是找不到
        配置文件的,但是它本身不会报错就是不会出现日志信息(够你郁闷一会儿的了)。

一下是 log4net 的配置,可以直接使用

----------------------------------------log4net.config 内容开始---------------------------------------------------

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

<root>
  <level value="ALL"/>
  <appender-ref ref="RollingLogFileAppender"/>
</root>

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <!-- 将日志生成在应用程序根目录的 ExceptionLogFiles 文件夹中,文件以当前日志命名 -->
  <param name="File" value="ExceptionLogFiles/"/>
  <param name="Encoding" value="GB2312" />
  <param name="AppendToFile" value="true"/>
  <param name="RollingStyle" value="Date" />
  <param name="DatePattern" value="yyyyMMdd" />
  <param name="MaximumFileSize" value="2KB"/>
  <param name="MaxSizeRollBackups" value="10"/>
  <param name="StaticLogFileName" value="false"/>
  <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
  <param name="RollingStyle" value="Composite"/>
 
  <layout type="log4net.Layout.PatternLayout">
   <param name="ConversionPattern" value="异常时间:%date{yy-MM-dd HH:mm:ss,fff} %n线程编号:%t %n异常信息:%exception所在文件:%F%n所在行号:%L%n其它信息:%m%n********************************************%n"/>
  </layout>
 
  <filter type="log4net.Filter.LevelRangeFilter">
  </filter>
 
</appender>

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
   <param name="ConversionPattern" value="异常时间:%date{yy-MM-dd HH:mm:ss,fff} %n线程编号:%t %n异常信息:%exception所在文件:%F%n所在行号:%L%n其它信息:%m%n********************************************%n"/>
  </layout>
</appender>

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="dongxiaoning@tiantian.com"></to>
  <from value=">
  <subject value="Test Log Message"/>
  <smtpHost value="email.tiantian.com"/>
  <username value="dongxiaoning"/>
  <password value="123456"/>
  <bufferSize value="2048"/>
  <!--超长部分是否丢弃-->
  <lossy value="false"/>
  <!--输出级别在WARN和OFF之间的日志-->
  <filter type="log4net.Filter.LevelRangeFilter">
   <param name="LevelMin" value="WARN"/>
   <param name="LevelMax" value="OFF"/>
  </filter>

  <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="异常时间:%date{yy-MM-dd HH:mm:ss,fff} %n线程编号:%t %n异常信息:%exception所在文件:%F%n所在行号:%L%n其它信息:%m%n********************************************%n"/>
  </layout>
</appender>

<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
  <!--<bufferSize value="10" />-->
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <connectionString value="Server=localhost;UID=sa;PWD=123456;DataBase=log;Max Pool Size=1000"/>
  <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/>
  <parameter>
   <parameterName value="@log_date"/>
   <dbType value="DateTime"/>
   <!--
        <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
    </layout>
    -->
   <layout type="log4net.Layout.RawTimeStampLayout"/>
  </parameter>
  <parameter>
   <parameterName value="@thread"/>
   <dbType value="String"/>
   <size value="255"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%t"/>
   </layout>
  </parameter>
  <parameter>
   <parameterName value="@log_level"/>
   <dbType value="String"/>
   <size value="50"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%p"/>
   </layout>
  </parameter>
  <parameter>
   <parameterName value="@logger"/>
   <dbType value="String"/>
   <size value="255"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%c"/>
   </layout>
  </parameter>
  <parameter>
   <parameterName value="@message"/>
   <dbType value="String"/>
   <size value="4000"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%m"/>
   </layout>
  </parameter>
</appender>

</log4net>

----------------------------------------log4net.config 内容结束---------------------------------------------------

6.代码中的写法
  log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  log.Fatal("log.Fatal", new Exception("log.Fatal"));
  log.Error("log.Error", new Exception("log.Error"));
  log.Warn("log.Warn", new Exception("log.Warn"));
  log.Info("log.Info", new Exception("log.Info"));
  log.Debug("log.Debug", new Exception("log.Debug"));

7.生成的日志效果如下

********************************************
异常时间:11-08-28 18:34:13,203
线程编号:4412
异常信息:System.Exception: 测试异常
所在文件:D:\WorkTemp\TestSpace\Log4net\TestApp\Log4NetTest\Log4NetTest\Form1.cs
所在行号:38
其它信息:第一个参数
********************************************

8.总结
  这里也就不说那些乱七八糟的配置节都是什么意思了,我的目的只有一个“让log4net 能再在vs2010环境中正常使用”
  能用了之后你再去深究那些配置,配出你所需要的效果就OK了。
  这里只有将日志信息“写入文本文件”经过测试,其它的有待研究, 有更好的希望大家分享一下!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vs2010 中使用 log4net 的相关文章

随机推荐

  • 华为OD机试 C++ 【最佳的出牌方法】

    题目 想象一下 你有5张扑克牌 牌面数字是1 10 还有J Q K 计算五张牌的总分 如果这5张牌是连续的 比如5 6 7 8 9 每张牌的分数就是它数字的两倍 如果不连续 那每张牌的分数就是它的数字 但有个小技巧 如果你有2或3张一样的牌
  • ROS启动仿真环境编译源码时候经常遇到的问题以及对策

    move base msgs https github com ros planning navigation msgs git Could not find a package configuration file provided by
  • C++ string的大小写转换

    include
  • 一款红队的工具仓库

    Gui tools Gui tools 一款集成的图形化渗透工具 包含大量WebShell管理 信息收集 漏洞扫描 综合漏洞利用 中间价漏洞利用工具 是红队成员快速 批量打点利器 护网攻防演练必备工具 红队火眼系统 火眼安全系统 一个面向渗
  • 数据库查询常用关键字JOIN与LEFT JOIN/UNION与UNION ALL/GROUP BY

    今天来回顾一下数据库查询中 常用的几个关键字 关注这些细节 对于我们 写出高效的SQL语句 还是有帮助的 1 JOIN 与 LEFT JOIN JOIN 等价于INNER JOIN 是强关联 JOIN只查询出左表能够在右表中匹配到记录的行
  • RHCA--260 故障排除1 slow ops, oldest one blocked for 1844 sec, mon.clienta has slow ops

    RHCA 260 第二题看似是送分题 只要保证ceph环境正常不用做任何事就可以得分 但始终会有这样或者那样的情况会造成集群状态异常 现象 root serverc ceph s cluster id ab26a238 1643 11ee
  • Linux安装kafka-manager

    相关链接https github com yahoo kafka manager releases kafka manager 2 0 0 2下载地址 百度云链接 https pan baidu com s 1XinGcwpXU9YBF46
  • 红帽8配置yum源

    使用传输工具 上传文件到 etc yum repos d 或 wget O etc yum repos d CentOS Base repo http mirrors aliyun com repo Centos 8 repo 注 不能下载
  • 我的va_start和va_end学习

    va start和va end定义 1 va start和va end是两个宏 2 在c语言中 当我们无法列出传递函数的所有形参类型和数目时 可以用省略号指定参数表 相关知识 1 va list ap 是定义一个字符指针ap 2 va st
  • 做对这 10 点,让你的 Redis 性能更上一层楼

    阅读本文大约需要 19 分钟 Hello 大家好 我是虎珀 今天跟大家分享 提升 Redis 性能的 10 个手段 Redis 作为内存数据库 虽说已经足够快了 但是 做对这 10 点 可以让你的 Redis 性能更上一层楼 注 本文源码基
  • 线程同步(一)

    上篇文章讲述了什么是线程 以及在Linux系统下线程的相关操作 线程 Linux系统实现 小梁今天敲代码了吗的博客 CSDN博客 本文将继续讲述线程的相关知识 线程同步 目录 1 线程同步的概念 2 线程不同步可能会发生什么 3 线程同步方
  • 计算机毕业设计选题推荐 40个高质量计算机毕设项目分享【源码+论文】(三)

    文章目录 前言 题目1 基于SSM的汽车租赁系统 br 题目2 基于SSM的在线药品超市购物系统 br 题目3 基于SSM的在线药品超市购物系统 br 题目4 基于SSM的疫情防控物业管理系统 br 题目5 基于SSM的在线音乐网站设计与实
  • 小程序打开另一个小程序、分享另一个小程序、分享后返回上一个小程序

    小程序是无法直接分享另一个小程序的链接给微信好友的 它只能分享自身的链接 但是我们可以通过另一种方法去实现这个功能 首先 我们在自己的小程序里面打开要分享的另一个小程序 然后 我们可以在打开的小程序里面分享它的链接给微信好友 最后 跳转回我
  • 关于烂代码的那些事(中)

    作者 秦迪 发布时间 2015 08 13 22 36 阅读 10350 次 推荐 32 原文链接 收藏 1 摘要 这是烂代码系列的第二篇 在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣 在发布了关于烂代码的那些事 上 之后
  • 【面试官】深入了解session和cookie的区别

    目录 一 什么是session和cookie 1 什么是session 2 cookie的组成 二 session和cookie工作流程 1 session的工作原理 2 cookie的工作流程 三 session和cookie的区别 一
  • Ubuntu下安装Anaconda

    使用python做文本处理最讨厌遇到的问题就是编码错误的问题 在linux环境下开发能较好的避开这个问题 Anaconda整合了常用的python科学计算包 避免再去安装各种包的麻烦 1 到官网http continuum io downl
  • oracle 存储过程中调用truncate命令。

    数据库版本 SQL gt select from v version BANNER Oracle Database 10g Enterprise Edition Release 10 1 0 2 0 ProdPL SQL Release 1
  • AirBuddy让您优雅的在 Mac 上使用 AirPods

    AirBuddy 是macOS系统上将iOS上的AirPods体验带到了Mac上 使用AirBuddy 您可以打开Mac旁边的AirPods外壳并立即查看状态 就像在iPhone或iPad上一样 Airbuddy for mac是一款功能高
  • 分享网页版免费聊天机器人

    GPT是一种基于深度学习技术的自然语言处理模型 全称为Generative Pre trained Transformer 它由团队开发 旨在利用神经网络生成人类能够理解的自然语言文本 分享网址 https shdily com 效果颜演示
  • vs2010 中使用 log4net

    vs2010 中使用 log4net 环境 vs2010 framework4 0 log4net 1 2 10 0 framework 2 0 参考 http www cnblogs com llhhll archive 2011 03