相信很多人都不习惯这个操作,因为一贯的传统和一直以来的版本都是双击打开项目中的文件。
既然以前是这样,现在改了那么一定有设置的地方,作为微软这样人性化设计的公司一定有回旋和适应的操作。没错,花了几分钟确实找到了:
from:http://hi.baidu.com/jiang_yy_jiang/item/d960411afb71bc3ab83180f1
完全卸载oracle11g步骤: 1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。 2、 开始->程序->Oracle – OraHome81->Oracle Installation Products-> Universal Installer,单击“卸载产品”-“全部展开”,选中除“OraDb11g_home1”外的全部目录,删除。 5、 运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。 6、 运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle入口(以oracle或OraWeb开头的键)。 7、 运行refedit,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口。 8、 删除HKEY_CLASSES_ROOT目录下所有以Ora、Oracle、Orcl或EnumOra为前缀的键。 9、 删除HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs中所有以oracle开头的键。 10、删除HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI中除Microsoft ODBC for Oracle注册表键以外的所有含有Oracle的键。 11、我的电脑-->属性-->高级-->环境变量,删除环境变量CLASSPATH和PATH中有关Oracle的设定。 12、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标。 13、删除所有与Oracle相关的目录(如果删不掉,重启计算机后再删就可以了)包括: 1.C:\Program file\Oracle目录。 2.ORACLE_BASE目录(oracle的安装目录)。 3.C:\WINDOWS\system32\config\systemprofile\Oracle目录。 4.C:\Users\Administrator\Oracle或C:\Documents and Settings\Administrator\Oracle目录。 5.C:\WINDOWS下删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。 6.C:\WINDOWS下的WIN.INI文件中若有[ORACLE]的标记段,删除该段。 14、如有必要,删除所有Oracle相关的ODBC的DSN 15、到事件查看器中,删除Oracle相关的日志 说明: 如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了。 from:http://blog.csdn.net/machinecat0898/article/details/7792471
View Details相信很多人都不习惯这个操作,因为一贯的传统和一直以来的版本都是双击打开项目中的文件。
既然以前是这样,现在改了那么一定有设置的地方,作为微软这样人性化设计的公司一定有回旋和适应的操作。没错,花了几分钟确实找到了:
from:http://hi.baidu.com/jiang_yy_jiang/item/d960411afb71bc3ab83180f1
1 2 3 4 5 |
1.打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如3309; 2.再打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro1Set\Control\Tenninal Server\WinStations\RDP-Tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如3309 注意:修改完后需要重启生效,别忘记在防火墙里加例外。 |
出现下面这就话:
1 2 3 |
<span style="color: #ed1c24;">Strict Standards: Only variables should be passed by reference in D:\wamp\ecshop\includes\cls_template.php on line 406</span> <wbr /> 第406行:<span style="color: #fd1856;">$tag_sel = array_shift(explode(' ', $tag));</span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span style="color: #0a07ff;">解决办法 1 </span> 5.3以上版本的问题,应该也和配置有关 只要406行把这一句拆成两句就没有问题了 $tag_sel = array_shift(explode(' ', $tag)); 改成: $tag_arr = explode(' ', $tag); $tag_sel = array_shift($tag_arr); <wbr /> <span style="color: #ed1c24;">(实验过,绝对可行) </span>因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值 <span style="color: #0a07ff;">解决办法 2 :</span> 或则如果这样配置的话: error_reporting = E_ALL | E_STRICT from:<a href="http://blog.sina.com.cn/s/blog_7dc986fc01013acp.html">http://blog.sina.com.cn/s/blog_7dc986fc01013acp.html</a> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
第一级别:5000万人口以上的特大省份,共9个 1 河南 9613万 2 山东 9082万 3 四川 8673万 4 广东 7859万 5 江苏 7381万 6 河北 6735万 7 湖南 6629万 8 安徽 6338万 9 湖北 5988万 第二级别:3000万到5000万人口的大省:共11个 10 广西 4822万 11 浙江 4647万 12 云南 4333万 13 江西 4222万 14 辽宁 4203万 15 贵州 3837万 16 黑龙江 3813万 17 陕西 3674万 18 福建 3466万 19 山西 3294万 20 重庆 3107万 第三级别:人口在1000万到3000万的中等省份共8个 21 吉林 2699万 22 甘肃 2593万 23 内蒙古 2379万 24 台湾 2227万 25 新疆 1905万 26 上海 1625万 27 北京 1423万 28 天津 1007万 第四级别:人口低于1000万的小省共6个 29 海南 803万 30 香港 686万 31 宁夏 572万 32 青海 529万 33 西藏 267万 34 澳门 44万 |
干了将近7年的软件开发,我开发实现了很多有趣的东西。最近,我开始投身销售,研究营销技术——为了我的新应用。 我感到发现客户并理解他们的消费行为是一件非常有挑战性的事情,同时也有很多的乐趣。程序员对销售的典型态度要么认为它不重要——这是最好的情况,最坏的 情况是根本不知道何为销售。在这里我要讲的是非常不同的另一面,希望能带来一些能让大家兴奋的建议。如果你喜欢这些建议,我将会再写一篇。 下面的这些忠告都是来自我经营一个B2B服务软件的经验。也许并不是每个人都能接受,但至少从趣味性和知识性方面还是值得一读的。 销售很重要。现在就拥抱它,从长期看,掌握它会带给你好处多多,你会理解销售有多难。 如果你不愿意投入时间、投入精力去理解销售,你又如何能期望别人去施展销售技术。 掌握一些统计学知识 你已经掌握了计算机、编程、软件工程等方面的众多知识,为什么不学点新玩意? 量化所有东西。这方面我还会说到好几次。 理解你的客户,因为你是在为他们做软件。 你做的所有事情都是为客户服务,即使有些东西他们是看不到的。 犹豫的客户是已经感兴趣的客户。 接上条,犹豫的客户在你上前提供帮助时不会觉得你讨厌。 接上条,你需要做的是,帮助他们明白这款产品很适合他。 产品的价值是体现在客户眼里的。 如果你不确信你的产品是否值这个价格,要么不要卖,要么换个价格。 和人们打交道进行营销是一个终极的分布式系统。 程序员做销售有优势,因为你对产品的理解有特殊的方式。 程序员做销售有优势,因为你能穿透表象看到数据。 程序员做销售有劣势,因为你对软件的理解是一种特殊的方式。 程序员做销售有劣势,因为你能穿透表象看到数据。 用数据分析出谁应该是你交流的对象。 多交流。 多打电话。 真的,多打电话。 站在客户的立场上想问题。 用数据说话。 用图表,95%的数据都要有图表。 目前有多少试用用户?你应该知道。 有多少客户到了他们试用的最后一天?你应该知道。 明白我的意思吗?你需要十分了解你的试用用户。尽可能多的了解。 你的软件的试用期是多久?为什么是这么久? 定价非常难,你至少会能弄错一次。 听取客户对价格的议论,但对产品的价值你必须有信心。 便宜没好货。 有很多关于销售的学问,学一点。 Bruce Hardie很出色。学学他。 你的竞争对手是如何买产品的? 尝试别人的试用产品,看看别人是如何做的。 下次如果接到销售的电话,多说说。学学电话的另一端是如何工作的。 包年价效果很好,有机会就提供这样的套餐。 争取一个新客户的开销是多少? 一个新客户能给你带来多少收入? 一个客户能给你带来的经常性收入是多少? 销售很有趣。喜欢上它。 [英文原文:Sales For Engineers, 1-50 ] from:http://www.oschina.net/news/50074/sales-for-engineers
View Details对于那些不知道程序员/开发者的时间都去哪了的人,本文可能会提供一些线索。我记录了这份日志不仅是为了看看时间都花费在哪了,也是为了看看我都做了些什么,检视下自己是否偷懒了。当回顾之后,我发现花这些时间都是值得的。 作为开始,下面是我在前一阶段追踪的bug,(假设)你应该可以看到其中的错误。仅仅拿出这10行JavaScript并找到错误在哪里并不难,但要在茫茫的代码中定位这10行并证明那些就是bug,这就有一定的难度了。 如此宁静的一天。通常情况下,有三个人可能打断我工作的连贯性,因为11:30之前,我要不时的与他们通过语音或文字信息交流和讨论。把这些过程以log记录下来,实际上是对我工作的推进是有帮助的。这使得我能端坐在键盘前专注于我的工作,以免被别的问题分心。 09:50 收到了一封来自团队成员的邮件,内容是关于一些可能会产生问题的代码。我看了一下,并把目前解决不了部分整理起来。 10:10 继续昨天IE7虚拟机的下载(4gb)。 10:15 由于IE7下载的时间比较长,我趁着下载的时候,申请了TestingBot的账号。 10:20 与一名开发者Skype语音,讨论关于他新添加的功能。 10:21 由于设计师没有正确的把图片上传到网站,产生了大量的报错邮件。我花费了两天的时间让设计师掌握源代码控制软件。由于有些设计师没有Visual Studio,我也建立了一些用来存储特定内容的文件夹,这些文件夹可以自动发布问题给这些设计师。我有没有提到,无论是在测试中,镜像模拟阶段还是已发 布的产品中出现的每一个错误我都会记录下来。我认为这些设计师都应该看一看。 10:22 一名开发者要与我进行Skype语音。为了防止下载软件占据网速,而影响通信,我不得不暂停下载IE7。 10:45 完成与那名开发者的语音通信。 10:50 由于持续的退信错误,250个报错邮件不能够正常工作。我继续了IE7的下载。放弃删除报错邮件,手动连接Azune并刷新那些设计师之前没有正确上传的图片。 10:55 通过网络服务器继续测试IE7浏览器。查看日志中IE7报错的部分并找到错误发生的原因。 11:00 测试位置出现了新的错误。我发现是由于某一名开发者的原因,如果他能修复错误,测试将会继续进行。我发现缺失图片错误的原因是设计师仍然没有图片添加 到源码中。由于仍然报出大量的错误,Will不得不提醒那名设计师。查看进度服务器(设计师的乐园)上的图片,我发现设计师还是没有上传。我为设计师收集 了一份错误列表,其内容是由于缺少图片而产生的错误。我提取了这些错误,记录在一份Excel中,这里提取的仅仅是关于图片的报告。我创建了一个支持工单 (译者注:support ticket 支持工单系统),并发邮件给设计师。 11:11 回到IE7的错误上。通过查看日志,我找到了错误的原因。 11:16 在日志中找到IE7的错误并下载下来。由于文件比较大,下载花费了一点时间。 11:21 从日志中提取50个IE7的JavaScript代码错误。追踪Excel中的错误并试图减少这50行代码的错误。 11:23 发现错误出现在日志的起始处,而不是最近的记录。我对日志进行时间倒序排序并找到更多的错误。 11:26 不再查找Excel中新加入的错误,仅仅查看现在已经记录下来的。 11:30 第一个错误是无法加载谷歌的网站分析服务。原来又是那可恶的百度搜索引擎。 11:31 在开发过程中修复了下一个错误。 11:32 下一个问题发生在Mac中的FireFox浏览器。我想在上Mac需要建立一个完全单独的测试计划,因此我创建了一个支持工单。 11:35 余下的50个错误都是由于同一个Mac系统的问题,我不得不去找一些较早时间发生的错误。 11:37 在错误搜索中,用“或”取代“与”,并试着取消搜索过程,但无反应。 11:42 一封报错邮件提醒我,测试位置发现字体缺失的问题,我将此问题发邮件给设计师。 11:43 之前的搜索过程被取消,开始重新搜索。 11:45 设计师回邮件说,那些文件出现缺失并非偶然,现在问题已经解决了。 11:46 在等待下一批错误的时候,已发布产品又出现了一个不可思议的IE7错误。我用支持工单记录下了这个错误。如果当初我能有时间(5分钟),我绝不会去考虑其他错误细节。 11:50 最后,通过使用textingbot.com网站去查看IE7的错误,我现在知道为什么IE7不得不被淘汰了。除了提示一个模糊的行数、字符位置信息 和“期望一个标识符,字符串或数字”这类日志中已经有的信息,再也没有什么可用的开发工具可以帮助提供更多的错误信息了。 11:52 借助IE7测试浏览器的“查看源码(View source)”功能和之前记录错误的行数,我发现少了几行。再试一次,提示超时。我想我并没有少了那几行,因为IE7报告有一行没有 JavaScript代码,这个功能一定被行数和空白符(空格、Tab和回车)干扰了。 11:57 我刚注意到某页的中间几段JavaScript时,再次被设计师打断。通过查看这段代码,我发现它们主要负责处理移动端显示的问题。我试着直接在测试服务器上编辑这段代码,看看能不能注释掉这些错误。 12:04 不能直接编辑。由于测试服务器需要密码,网络蜘蛛程序禁止我建立索引。这意味着测试浏览器服务无法进入测试服务器。 12:06 哦!!!我进入测试服务器发现错误还在那里。哦不,测试服务器崩溃了。 12:08 重启IE7的测试并再次执行测试,日志上没有出现任何JavaScript错误。 12:09 删除那些可能有问题的代码的注释,我发现错误再次出现在日志中。接下来要缩小范围查找错误。 12:10 测试服务器又开始无反应,无法刷新页面。启动另一个服务器,并登入,我发现依然会出现错误。注释掉一些代码后,我发现错误是由于最后10行代码。为了 确定,我们将这10行代码页注释掉,发现可以运行了。我们再缩小一下范围,加一些alert函数。IE7再次崩溃。 12:26 一些尝试之后,我重启了IE7测试服务器,我发现了错误的原因。由于一段脚本代码使得IE7崩溃,我想这段代码也可以造成其他浏览器崩溃。这些代码不 算很糟糕,我也不会(太)责备设计师。但是,这些代码本来不应该在任何浏览器上运行,更确切的说,进入到产品运行的环境中。它被嵌入到那页代码的中间部 分。这属于JavaScript代码的问题,设计师用它们做一些黑客行为的事情,比如隐藏移动设备的菜单,而且这些JavaScript代码被藏在一页中 的中间部分。这些代码附近并没有放置测试代码,没人会在最初的快速浏览中发现它们。但它们带来的后果显而易见。 12:30 我在源代码中修复了这个bug,并记录下这个过程。接着,我开始解决其他IE7的bug。它们是。。。 12:34 我意识到,我必须将这段经历告诉开发团队,因为他们都可能会写上面那种代码(除了IE7,哪里都可以运行),而且仍然有相当多的用户在使用着这个功能。 […]
View Details声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4)。 请在这里下载示例代码 1 简介 1.1 Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。 经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。 Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。 1.2 Log4net的安装: 用户可以从http://logging.apache.org/log4net/下载log4net的源代码。解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。 2 Log4net的结构 log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局). 2.1 Logger 2.1.1 Logger接口 Logger是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。 Logger提供了多种方式来记录一个日志消息,你可以在你的应用程序里创建多个Logger,每个实例化的Logger对象都被log4net框架作为命名实体(named entity)来维护。这意味着为了重用Logger对象,你不必将它在不同的类或对象间传递,只需要用它的名字为参数调用就可以了。log4net框架使用继承体系,继承体系类似于.NET中的名字空间。也就是说,如果有两个logger,分别被定义为a.b.c和a.b,那么我们说a.b是a.b.c的祖先。每一个logger都继承了祖先的属性 Log4net框架定义了一个ILog接口,所有的logger类都必须实现这个接口。如果你想实现一个自定义的logger,你必须首先实现这个接口。你可以参考在/extension目录下的几个例子。 ILog接口的定义如下: public interface ILog { void Debug(object message); void Info(object message); void Warn(object message); void Error(object message); void Fatal(object message); //以上的每一个方法都有一个重载的方法,用来支持异常处理。 //每一个重载方法都如下所示,有一个异常类型的附加参数。 void Debug(object message, Exception ex); // … //Boolean 属性用来检查Logger的日志级别 //(我们马上会在后面看到日志级别) bool isDebugEnabled; bool isInfoEnabled; //… 其他方法对应的Boolean属性 } Log4net框架定义了一个叫做LogManager的类,用来管理所有的logger对象。它有一个GetLogger()静态方法,用我们提供的名字参数来检索已经存在的Logger对象。如果框架里不存在该Logger对象,它也会为我们创建一个Logger对象。代码如下所示: log4net.ILog log = log4net.LogManager.GetLogger("logger-name"); 通常来说,我们会以类(class)的类型(type)为参数来调用GetLogger(),以便跟踪我们正在进行日志记录的类。传递的类(class)的类型(type)可以用typeof(Classname)方法来获得,或者可以用如下的反射方法来获得: System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 尽管符号长了一些,但是后者可以用于一些场合,比如获取调用方法的类(class)的类型(type)。 2.1.2 日志的级别 正如你在ILog的接口中看到的一样,有五种不同的方法可以跟踪一个应用程序。事实上,这五种方法是运作在Logger对象设置的不同日志优先级别上。这几种不同的级别是作为常量定义在log4net.spi.Level类中。你可以在程序中使用任何一种方法。但是在最后的发布中你也许不想让所有的代码来浪费你的CPU周期,因此,框架提供了7种级别和相应的Boolean属性来控制日志记录的类型。 Level有以下几种取值 级别 允许的方法 Boolean属性 优先级别 OFF Highest FATAL void Fatal(…); bool […]
View Details说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。现在的最新版本是1.2.10。 下面的例子展示了如何利用log4net记录日志 。 首先从官方网站下载最近版本的log4net组件,现在的最新版本是1.2.10。在程序中我们只需要log4net.dll文件就行了,添加对log4net.dll的引用,就可以在程序中使用了。 接着我们配置相关的配置文件(WinForm对应的是*.exe.config,WebForm对应的是*.config),本实例中是控制台应用程序,配置如下(附各配置的说明):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSettings> <log4net> <!--定义输出到文件中--> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <!--定义文件存放位置--> <file value="D:/log4netfile.txt" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HH:mm:ss" /> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明--> <footer value="by 周公" /> <!--输出格式--> <!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] – info--> <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] – 错误描述:%message%newline" /> </layout> </appender> <!--定义输出到控制台命令行中--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" /> </layout> </appender> <!--定义输出到windows事件中--> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" /> </layout> </appender> <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb--> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" /> <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" /> <!--定义各个参数--> <parameter> <parameterName value="@logDate" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date" /> </layout> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@logLevel" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> </appender> <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。--> <root> <!--文件形式记录日志--> <appender-ref ref="LogFileAppender" /> <!--控制台控制显示日志--> <appender-ref ref="ConsoleAppender" /> <!--Windows事件日志--> <appender-ref ref="EventLogAppender" /> <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉 <appender-ref ref="AdoNetAppender_Access" /> --> </root> </log4net> </configuration> |
程序文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Reflection; using log4net; //注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息 //如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件) //如果是WebForm,则从web.config中读取相关信息 [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace Log4NetDemo { /// <summary> /// 说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。 /// 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。 /// 下面的例子展示了如何利用log4net记录日志 /// 作者:周公 /// 时间:2008-3-26 /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx /// </summary> public class MainClass { public static void Main(string[] args) { //Application.Run(new MainForm()); //创建日志记录组件实例 ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); //记录错误日志 log.Error("error", new Exception("发生了一个异常")); //记录严重错误 log.Fatal("fatal", new Exception("发生了一个致命错误")); //记录一般信息 log.Info("info"); //记录调试信息 log.Debug("debug"); //记录警告信息 log.Warn("warn"); Console.WriteLine("日志记录完毕。"); Console.Read(); } } } |
全局配置 在AssemblyInfo.cs中添加
1 |
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"Configs\log4net.config", Watch = true)] |
运行结果: 控制台上的输出 日志文件内容 在这里需要特别说明一下,注意上面的代码中有这么一句:[assembly: log4net.Config.XmlConfigurator(Watch = true)](在需要使用log4net的类的namespace处),如果没有这句就会在调试时得到如下留言中所说的“程序调试起来时isDebugEnable"的情况,希望大家注意。 关于未尽之处,请看周公对下面读者的一些问题的答复《Log4Net使用详解(续)》。 from:http://blog.csdn.net/zhoufoxcn/article/details/2220533
View Details