惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Privacy & Cybersecurity Law Blog
S
Schneier on Security
PCI Perspectives
PCI Perspectives
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Troy Hunt's Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
Know Your Adversary
Know Your Adversary
F
Fortinet All Blogs
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
Jina AI
Jina AI
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
T
Tor Project blog
S
Security Affairs
S
Securelist
F
Full Disclosure
D
Docker
酷 壳 – CoolShell
酷 壳 – CoolShell
Martin Fowler
Martin Fowler
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
SecWiki News
SecWiki News
P
Palo Alto Networks Blog
Apple Machine Learning Research
Apple Machine Learning Research
N
News and Events Feed by Topic
Recorded Future
Recorded Future
The Hacker News
The Hacker News
Google Online Security Blog
Google Online Security Blog
Stack Overflow Blog
Stack Overflow Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
I
Intezer
Security Latest
Security Latest
Scott Helme
Scott Helme
U
Unit 42
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog

博客园 - goooto

Spring4.1新特性——Spring缓存框架增强(转) Spring整合Ehcache管理缓存(转) 《权力的游戏》第七季片场照曝光 MINA2 框架详解(转) Docker简明教程(转) IIS7.5 Gzip压缩配置 UML 依赖 关联 聚合 组合 亲属称谓 以字节流上传文件 C#命名规范(微软官方版) MongoDB学习笔记(六) MongoDB索引用法和效率分析(转) MongoDB学习笔记(五) MongoDB文件存取操作(转) MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系(转) MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据(转) MongoDB学习笔记(二) 通过samus驱动实现基本数据操作(转) MongoDB学习笔记(一)MongoDB介绍及安装(转) VS2010快捷键大全 JQuery中得到Element真实top、left、height和width属性值的对象 - goooto - 博客园 WindowsService注册
Log4net配置相关
goooto · 2010-12-24 · via 博客园 - goooto

Logger hierarchy(层次级别)

Logger都是已经命名的实体。Logger的名称区分大小写并遵循以下规则:

如果A logger的名称如果是B logger名称的前缀(通过“.”连接),则说A loggerB logger的祖父级。

如果A logger的名称和B logger的名称之间不存在其他的logger名称,则A loggerB logger的父级。

例子:A logger名称为“Foo.Bar”,B logger名称为“Foo.Bar.Baz”,AB的父级。名称为“System”的logger是名称为“System.Text.StringBuilder”的祖父级。

Root logger位于logger层次级别中的顶级。它有例外的三条规则:

1 Root logger总是存在的。

2 Root logger不能通过名称或取。

3 Root logger 有一个默认的Level 值为 Debug

Logger 可以通过log4net.LogManager类的静态方法GetLogger获取。

Level值:ALL/DEBUG/INFO/WARN/ERROR/FATAL/OFF

Level 继承规则:如果一个logger没有定义Level,它的Level值将从它的父级(定义了Level)继承。

日志纪录请求通过调用logger实例的输出方法实现。这些输出方法有DebugInfoWarnErrorFatal

通过定义,输出方法决定了日志纪录请求的Level。例如,log是一个logger实例,那么语句log.Info(“..”)的日志纪录请求LevelINFO

如果日志纪录请求的Levellogger本身定义(或继承)的Level高,则请求是可行的,否则不可行。

简单规则:如果日志记录请求的LevelLlogger本身定义(或继承)LevelK,当L>=K时,日志纪录请求是可行的。

Level级别:DEBUG <INFO<WARN<ERROR<FATAL

通过名称,调用log4net.LogManager.GetLogger方法,可以获取同一个logger的实例引用。这样在配置了一个logger后,不用在代码中传递引用而可以获取同一个logger的引用了。与生物上的亲子关系(父亲总是先于孩子)基本相反,在log4net 里,logger可以被创建和配置成任何顺序。特别的是,一个父级logger可能比子级logger后实例化,但却可以在子级中查找到。

Appender

Log4net允许日志以不同的方式输出,如:ms sql、文件、控制台或者系统日志等等。

一个logger可以有多个Appender。每一个可行的日志纪录请求将输出到所有的appender,这些appender是在当前这个logger中引用的,还包括父级logger中引用的。换句话说,appender将在logger的层次级别中添加性的继承。例如在root中定义了一个Console appender,那么所有的logger至少有一个Console appender。如果 A logger有一个File appender,则 A logger以及它的子logger都有两个appender

Additivity属性默认为true,当设置为false时,appender将采用覆盖的方式,而不再从父级logger中继承。

Filters是用来过滤appender能接受的日志信息。

使用以下filterappender只接受LevelINFOFATAL之间的日志纪录请求。

<filter type="log4net.Filter.LevelRangeFilter">

       <param name="LevelMin" value="INFO" />

       <param name="LevelMax" value="FATAL" />

</filter>

使用以下filterappender只接受包含子串为“database”的日志纪录。

<filter type="log4net.Filter.StringMatchFilter">

       <param name="StringToMatch" value="database" />

</filter>

<filter type="log4net.Filter.DenyAllFilter" />

第一个filter将会在日志纪录信息中查找“database”,如果找到则不再匹配下面得filterappener接受并纪录该日志。如果没有找到则继续使用第二个filter,该filter将拒绝任何日志信息。

Layouts 用来定制输出格式。

加载配置

ConfigFile属性:当我们自己定义了一个log4net的配置文件时,可以通过这个属性来指定配置文件。

ConfigFileExtension属性:当应用程序会编译成不同扩展名称的程序集时,可以使用这个属性。如Sample程序将编译成Sample.exe,则ConfigFileExtension设置为“config”,那么所使用的配置文件名称为:Sample.exe.config。注意不能和ConfigFile属性同时使用。

Watch属性:在运行期间是否监测配置文件。当值为true时,FileSystemWatcher将用来监视配置文件的内容改变、重命名和删除通知。

为应用程序加载log4net的配置,可以通过在应用程序集中设置属性。

例如:

[assembly: log4net.Config.DOMConfigurator(ConfigFile="Sample.config")]

[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension="config")]

也可以不使用任何参数,这时将使用应用程序的配置文件。

[assembly: log4net.Config.DOMConfigurator()]

另一种方式是在代码中使用 DOMConfigurator 

log4net.Config.DOMConfigurator.Configure(

new FileInfo("TestLogger.Exe.Config"));

使用ConfigureAndWatch(..)可以指定一个配置文件并且监视该文件的变化。

 

PatternLayout

每一种指定的转换符号都以%开始,后面跟着一个可选的格式符号和一个转换符号。转换符号用来指定输出的数据类型,如Levelloggerdate等。

例如:转换模型“%-5p [%t]: %m%n

        ILog log = LogManager.GetLogger(typeof(TestApp));

        log.Debug("Message 1");

        log.Warn("Message 2");  

转换后:

        DEBUG [main]: Message 1

        WARN  [main]: Message 2

%-5p”表示输出日志纪录请求的Level值,宽度为5个子符,并左对齐。

转换符号列表:

a

输出创建日志的AppDomain的名称

c

默认输出logger的全名称。后面可跟“{数字}”,则表示输出与数字对应的logger名称级别(从右边开始)。如全名为“a.b.c”,“%c{2}”输出“b.c

C

输出调用日志纪录请求的类名。后面可跟“{数字}”,表示输出与数字对应的类名称(包含命名空间,从右边开始)。

d

输出日志记录时间,后可跟“{时间格式}”。默认为yyyy-MM-dd HH:mm:ss,fff

F

输出调用日志纪录请求的文件全名。(会影响速度)

l

输出调用日志纪录请求的一些本地信息。如类和成员名,调用文件和调用声明的代码行数。(极其影响性能)

L

输出调用日志纪录请求的声明代码行数。(极其影响性能)

m

输出应用程序所要输出的信息。

M

输出调用日志纪录请求的成员名称。(极其影响性能)

n

输出换行符号

p

输出日志请求的Level

P

r

输出从应用程序启动开始到日志纪录请求的时间(毫秒)

t

输出产生日志的线程名称,如果没有名称则输出线程的编号

u

输出当前活动用户的名称。(Principal.Identity.Name

W

输出当前活动用户的windows标识。

x

X

%

输出一个%