log4net.dll配置以及在项目中应用 zt
1 首先在项目中引用log4net.dll,然后项目中添加一个配置文件log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="false">
<appender name="ApplePushFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="File"
value="Logs\\ApplePush" /><!--日志路径-->
<param name="AppendToFile" value="true"/><!--日志生成追加在文件中-->
<param name="DatePattern" value=".yyyyMMdd".log"" /><!--生成日志文件名称的格式-->
<param name="RollingStyle" value="Date"/><!--日志重复方式,按照日期重复,每天产生一个日志文件-->
<param name="StaticLogFileName" value="false"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <root> <level value="DEBUG" /> </root> <logger name="ApplePush"><!--日志名字,需要跟后面代码中的名字一样--> <appender-ref ref="ApplePushFileAppender" /> </logger> </log4net>
2,在项目中的Properties文件夹下的AssemblyInfo.cs中加入一句话
当然,首先要加入using log4net;;然后添加[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
WINFORM应用程序
using log4net.Config; ...
[assembly: log4net.Config.XmlConfigurator()]
//或 [assembly:log4net.Config.DOMConfigurator()]
WEBFORM程序
[assembly:log4net.Config.DOMConfigurator(ConfigFile="web.config",Watch=true)]
在Web.Config或App.Config里配置Log4Net
首先,在<configuration>下添加入以下配置节(必须是第一个子节点,否则报错)
<!--log4net -->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" />
</configSections>
3,开始在需要记录日志的地方开始使用
首先加入using log4net;
然后定义log全局变量:private static readonly ILog Log = LogManager.GetLogger("ApplePush");//名称与配置文件中的名称一致
然后可以再用到的地方使用log,比如
using log4net;
...
private static readonly ILog logger = LogManager.GetLogger("Log4NetTest.LogTest");//名称与配置文件中的名称一致
...
logger.Info("记录日志");
logger.InfoFormat("推送服务启动.....");
logger.Warn("警告信息");
logger.Error("错误信息");
等等log的方法,使用起来非常方便
另一种配置log4net的方法,是在单独的XML文件中配置,这个时候,只要把log4net标记中的内容复制过来就行了,不需要configSections
然后,加入log4net配置内容的定义,范例如下:
<log4net>
<root>
<level value="ALL" /> <!--level定义记录的日志级别,级别由高往低依次是:None Fatal ERROR WARN DEBUG INFO ALL-->
<appender-ref ref="rollingFile" />
</root> <logger name="Log4NetTest.LogTest"> <!--logger是负责日志的记录者-->
<level value="DEBUG" />
<appender-ref ref="rollingFile" /> <!--ref:参照\引用-->
<appender-ref ref="consoleApp" />
</logger> <appender name="rollingFile" type="log4net.Appender.RollingFileAppender" ><!--appender提供记录的介质-->
<param name="File" value="Logs\\ApplePush" /><!--日志路径-->
<param name="AppendToFile" value="true"/><!--日志生成追加在文件中-->
<param name="DatePattern" value=".yyyyMMdd".log"" /> <!--生成日志文件名称的格式-->
<param name="RollingStyle" value="Date"/> <!--日志重复方式,按照日期重复,每天产生一个日志文件-->
<param name="StaticLogFileName" value="false"/> <layout type="log4net.Layout.PatternLayout" ><!--layout负责把记入的内容格式化-->
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value=" ----------------------header 程序启动-------------------------- " />
<param name="Footer" value=" ----------------------footer 程序正常退出-------------------------- " />
</layout>
</appender> <appender name="consoleApp" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout" >
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender> </log4net>
<log4net>是log4net配置节的根标记。
<root>标记定义一个根级别的记录者,log4net的记录者采用层级组织的, 两个logger,A的名字叫loggerA,B的名字叫loggerA.B的话,那么B就是A的儿子,B会自动继承A的一些定义,例如LEVEL定 义,appender-ref定义等,root就是总的logger,其余定义的logger都是他的后代,都会继承他的设置,包括ROOT在内的每一个 LOGGER(ROOT也是一个LOGGER,只不过,他是祖先而已,别的方面,跟其他LOGGER一样),都可以定义Level
<level>定义记录的日志级别,级别由高往低依次是: None Fatal ERROR WARN DEBUG INFO ALL
级别的定义要注意,如果你定义DEBUG,那么低于DEBUG级别以下的信息,将不会记入日志,啥意思呢?就是说,就算你在程序里,用 log.info()来写入一个日志信息,可是你在配置中指定level为DEBUG,由于INFO级别低于DEBUG,所以,不会被记入日志.这样的处 理非常灵活
<appender-ref>了,ref是参照的意思
log4net的架构的四个要素: <logger> <appender> < layout> <filter>
<logger>是负责日志的记录者
<appender>提供记录的介质
<layout>负责把记入的内容格式化
<filter>负责把内容进行筛选
可以说,整个过程就是一个日志流水线,每个成员负责其中的一个环节 logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化
%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.
log4net.dll配置以及在项目中应用 zt的更多相关文章
- log4net.dll配置以及在项目中应用
1,首先在项目中引用log4net.dll,然后项目中添加一个配置文件log4net.config <?xml version="1.0" encoding="ut ...
- 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)
版权声明:本文为博主原创文章,转载请注明本文地址.http://www.cnblogs.com/o0Iris0o/p/5813856.html 内容介绍: 真分布式SolrCloud+Zookeepe ...
- Ueditor配置及在项目中的使用
引言 上篇中简单介绍了Ueditor的两种定制方式,想了解的请戳这里:Ueditor的两种定制方式.在项目中,Ueditor该怎么使用更方便呢?很容易让人想到将ueditor放入用户控件页,可以拖到需 ...
- SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例
要搭建的项目的项目结构如下(使用的框架为:Spring.SpingMVC.MyBatis): 2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包): 其中 ...
- windows linux hosts文件的配置,开发项目中域名跳转等。
我们通常都知道Windows中hosts文件(C:\Windows\System32\drivers\etc),用来映射域名的.linux上当然也有,一般在/etc/hosts下. 当工作的项目,在开 ...
- Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用
1 修改pom.xml,添加依赖文件: <dependency> <groupId>com.whalin</groupId> <artifactId&g ...
- 配置/更改vue项目中的资源路径
打开 build/webpack.base.conf.js ,在module.exports .resolve.alias下自定义: alias: { 'vue$': 'vue/dist/vue.e ...
- Log4Net 日志配置[附带源码]
前述 园子里有许多人对log4net这款开源的日志记录控件有很多介绍.在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减少查阅资料的时间.利用log4net可以方便地将日志信息记录 ...
- WebCollector2.7爬虫框架——在Eclipse项目中配置
WebCollector2.7爬虫框架——在Eclipse项目中配置 在Eclipse项目中使用WebCollector爬虫非常简单,不需要任何其他的配置,只需要导入相关的jar包即可. Netbea ...
随机推荐
- [C#][转][string 字符串截取
C#几个经常用到的字符串截取 一. 1.取字符串的前i个字符 (1)string str1=str.Substring(0,i); (2)string str1=str.Remove(i,str.Le ...
- mysql error笔记1
mysql视图问题: The user specified as a definer ('root'@'%') does not exist 原因:由于root用户对全局host无访问权限,给root ...
- HDU 1619 Unidirectional TSP(单向TSP + 路径打印)
Unidirectional TSP Problem Description Problems that require minimum paths through some domain appea ...
- Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)
继承(inheritance)背后的核心思想是: bonus = b; } } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...
- IOS 学习日志 2015-3-17
Objective--C 一 关键字 @class 导入已有的类 id 对象类型 表示任何一个ObjC对象类型 Block 对象类型 OC中称为代码块 类似于C中的函数式指针 typedef 定义数据 ...
- linux运维工程师,必须掌握以下几个工具
本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了 ...
- php 常用五种模式
/* 设计模式之单例模式 $_instance 必须声明为静态的私有变量 构造函数必须声明为私有,防止外部程序 new 类从而失去单例模式的意义 getInstance() 方法必须设置为公有的,必须 ...
- 【转】关于oracle with as用法
原文链接:关于oracle with as用法 with as语法–针对一个别名with tmp as (select * from tb_name) –针对多个别名with tmp as (se ...
- [转载] PowerMokito 使用
一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解 ...
- DOM Ready 详解
DOM Ready 概述 熟悉jQuery的人, 都知道DomReady事件. window.onload事件是在页面所有的资源都加载完毕后触发的. 如果页面上有大图片等资源响应缓慢, 会导致wind ...