log4net为什么会打印两次?

用“log4net 使用”做关键字在bing上搜索,点开排序第一的链接:http://33liuhongwei33.blog.163.com/blog/static/39923778201156101213418/

试用之后可以打印log,但是会打印两次

再用“log4net log twice”做关键字在bing上搜索,同样点开排序第一的链接:http://stackoverflow.com/questions/651277/eliminate-duplicate-logging-in-log4net

找到了问题的根源,关键在这句话:

“You don‘t need to indicate the appender-ref in the logger myprogram since it will inherit them from the root logger; if you specify them again it will log twice.”

原来自定义的logger设置会从root logger继承下来(我承认我没有仔细读log4net的文档,不过90%以上的人也不会去仔细从头到尾的读文档,总有些东西是能用就行的,人没有精力也没有时间把每件事都研究到最细处,

但是人又需要把某件事研究到最细处,所谓一招鲜吃遍天是也。)

所以上面的文章中的logger节需要这样修改:

    <root>      <level value="INFO"></level>      <appender-ref ref="FileAppender"></appender-ref>      <appender-ref ref="ConsoleAppender"></appender-ref>    </root>    <logger name="MyLogger">      <level value="ERROR"></level>    </logger>
时间: 2024-11-08 02:34:12

log4net为什么会打印两次?的相关文章

[算法]打印两个链表的公共部分

题目: 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分. 解答: 因为是有序列表,所以从两个链表的头开始进行如下判断: 如果head1的值小于head2,那么head1向下移动. 如果head1的值大于head2,那么head2向下移动. 如果二者的值相等,则打印这个值,然后head1和head2都向下移动. head1和head2有任何一个移动到null,整个过程停止. 程序: public static class Node { public int value; p

算法总结之 打印两个有序链表的公共部分

给定两个有序链表的头指针 head1 和 head2,打印两个链表的公共部分 思路: 有序嘛, 如果head1 的值小于 head2, head1往下移动 如果head2的值小于head1,head2往下移动 如果相等,打印这个值,然后同时向下移动 两个有一个为null, 整个过程停止 package TT; import java.time.temporal.ValueRange; public class Test84 { public class Node{ public int valu

打印楼梯,同时在楼梯上方打印两个笑脸

题目:打印楼梯,同时在楼梯上方打印两个笑脸. 程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数. 程序源代码: #include<stdio.h> int main() { int i, j; printf("\1\1\n");/*输出两个笑脸*/ for (i = 1; i<11; i++) { for (j = 1; j <= i; j++) { printf("%c%c", 77, 77); } printf(&q

Python为什么会打印两个\

在Python里面,如果\后面不是一个合法的转移字符,那么,Python会打印两个\,换句话说,Python将\也当成普通字符看待,而不是转义符的标志: >>>S = 'C:\py\code' >>>S 'C:\\py\\code' >>>len(S) #总共有10个字符,而不是12个 10 原文地址:https://www.cnblogs.com/chaoguo1234/p/9162435.html

.net开发环境的认识,控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值打印 两种数据类型,整形类型转换

首先感谢向立凯老师带我走进.net这个很好的软件开发程序.通过两天的学习在这个领域的了解也多了很多,让大家先了解一下c#语言 c#是一种全新且简单.安全.快捷面向对象的程序设计语言.是专门为.net应用开发的语言..net的开发都基于一个统一的开发环境 Visual Studio.net.下面我们来看看怎么在Visual Studio.net.下创建以新的项目: 1.打开 2.新建一个项目 通过执行文件-新建-项目菜单命令,会弹出一个新建项目对话框.在这个对话框中选择开发语言为c#,选择框架版本

经典算法学习——打印两个链表的第一个公共节点

求链表的公共节点是一道很经典的算法题,并不是很难.我们需要知道的是,一旦两个链表有一个公共节点的话,那么这两个链表的形状就是一个"Y"型.也就是说,自公共节点之后的所有节点都是一样的.如下: 其实只要看了这幅图,实现就很简单了.首先我们分别遍历两个链表,分别得出他们的长度L1,L2.然后在查找公共节点时,先在长的那个链表中走|L1-L2|步,然后两个链表同时向后进行同步遍历,每走一步时,就判断后面那个节点是否相同.若相同,则找到该第一个公共节点.完整代码上传至 https://gith

JS局部打印两种方法

所有浏览器都可以 <html> <head title=""> <title>测试打印</title> <style media="print"> /*只应用于打印的样式*/ .noprint { display: none; } </style> <script> //通过标签控制 function printDiv1(oper) { bdhtml = window.documen

log4net 使用指南,最常遇到的问题整理。。。

一.    Log4net特征    Log4net是一个用于.NET开发环境的日志记录组件,由于它的超快及超灵活,很多大型的应用都会用到.    它有如下特点:    1.自定义日志输出级别        Log4net将日志分为五个级别优先级从高到低依次:FATAL > ERROR > WARN > INFO > DEBUG,此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别.可以通过日志级别来控制日志是否输出.如果你配置文件中定义的是INFO级

用循环打印出多种三角形

打印一排*,很简单,打印下图 也很简单,代码如下: 1 public class Work10_3 { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int a=0; 9 while(a<4){ 10 int i=0; 11 while(i<10){ 12 System.out.print("*");