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

推荐订阅源

博客园_首页
The GitHub Blog
The GitHub Blog
美团技术团队
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
Attack and Defense Labs
Attack and Defense Labs
G
Google Developers Blog
I
InfoQ
博客园 - 司徒正美
T
Troy Hunt's Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
S
Security Affairs
M
MIT News - Artificial intelligence
Simon Willison's Weblog
Simon Willison's Weblog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tailwind CSS Blog
量子位
Vercel News
Vercel News
月光博客
月光博客
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 最新话题
F
Full Disclosure
The Hacker News
The Hacker News
Hacker News: Ask HN
Hacker News: Ask HN
T
Tor Project blog
A
Arctic Wolf
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Forbes - Security
Forbes - Security
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
GbyAI
GbyAI
B
Blog RSS Feed
V
Visual Studio Blog
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs

博客园 - 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

%

输出一个%