Item1#:
Repository
組件在不同版本的不同之處?
Answer :
Repository 主要是負責對日志對象的組織結構的維護。在 log4net 的以前版本中,框架僅支持分等級的組織結構。這種等級結構本質上是庫的一個實現,并且定義在 log4net.Repository.Hierarchy 名字空間中。要實現一個 Repository ,需要實現 log4net.Repository.ILoggerRepository 接口。現在已經改用 LogManager 類來實現這個功能。
Item2#:
日志文件輸出到多個位置的研究(例如:不同介質、同介質不同地方、同介質遠程不同主機)
Answer
:
日志文件可以輸出到多個不同的介質,例如我們常用的數據庫、文件;同時也可以以一種介質的形式輸出到多個位置;以相同
/
不同的介質形式而保存到相同
/
不同的遠程的主機上。
下面我們舉例實現同介質遠程不同主機:
Log4net
使用
RomtingAppender
的形式實現的,以運行程序的主機作為
client
,遠程主機作為
server
,啟動
server
并監聽相應的端口,當
client
觸發相應的事件,就會把
message
發送到
server
主機上,
server
主機把收集到的
message
以某種
appender
形式保存。
具體請參考
log4net
自帶的
sample
:
E:\log4.net\incubating-log4net-
在
RemotingClient
程序中相應模擬我們運行的程序,下面我們修改了
App.config
文件實現多個
server
收集信息:
<?
xml
version
="1.0"
encoding
="utf-8"
?>
<!
--
???? .NET application configuration file
????
???? This file must have the exact same name as your application with
???? .config appended to it. For example if your application is testApp.exe
???? then the config file must be testApp.exe.config it mut also be in the
???? same diectory as the
application.
--
>
<
configuration
>
????
<!
-- Register a section handler for the log4net section --
>
????
<
configSetions
>
?
????????
<
section
name
="log4net"
type
="System.Configuration.IgnoreSectionHandler"
/>
????
</
configSertions
>
????
<!
-- This sectin contains the log4net configuration settings --
>
?
????
<
log4net
debug
="false">
????????
<!
-- Define some output appenders --
>
????????
<!
-- Use the remoting appender --
>
????????
<appender name="RemotingAppender1" type="log4net.Appender.RemotingAppender" >
?????????????
<!
-- The remoting URL to theeremoting server object --
>
?????????????
<!
--sink value="tcp://192.168.0.239:8085/LoggingSink" /--
>
?????????????
<sink value="tcp://192.168.0.230:8085/LoggingSink" />
?????????????
<!
-- Send all events, do notediscard events when the buffer is full --
>
?????????????
<
lossy
value
="false"
/>
?????????????
<!
-- The numbe of events to
buffer before sending --
>
?????????????
<
bufferSize
value
="95"
/>
?????????????
<!
-- Do not store event dataethat is slow to generate --
>
?????????????
<
onlyFixPartialEventData
value
="true"
/>
?????????????
<!
-- Specify an evaluator toesend the events immediatly under
?????????????
???? ertain conditions, e.g. when an error event ocurrs --
>
T
?????????????
<!
--
????????????? <evaluato type="log4net.Core.LevelEvaluator">
£
?????????????????? <threshold value="ERROR"/>
????????????? </evaluator>
????????????? --
>
????????
</
appender
>
????????
<appender name="RemotingAppender2" type="log4net.Appender.RemotingAppender" >
?????????????
<!
-- The remoting URL to theeremoting server object --
>
?????????????
<sink value="tcp://192.168.0.239:8085/LoggingSink" />
?????????????
<!
--sink value="tcp://192.168.0.230:8085/LoggingSink" /--
>
????????
????
<!
-- Send all events, do notediscard events when the buffer is full --
>
?????????????
<
lossy
value
="false"
/>
?????????????
<!
-- The numbe of events to
buffer before sending --
>
?????????????
<
bufferSize
value
="95"
/>
?????????????
<!
-- Do not store event dataethat is slow to generate --
>
?????????????
<
onlyFixPartialEventData
value
="true"
/>
?????????????
<!
-- Specify an evaluator toesend the events immediatly under
?????????????
???? Rertain conditions, e.g. when an error event ocurrs --
>
?????????????
<!
--
????????????? <evaluato{ type="log4net.Core.LevelEvaluator">
?????????????????? <threshold value="ERROR"/>
????????
???? </evaluator>
????????????? --
>
????????
</
appender
>
???????
????????
<!
-- Setup the root category, add the appenders and set the default priority --
>
????????
<
root
>
?????????????
<
level
value
="DEBUG"
/>
?????????????
<appender-ref ref="RemotingAppender2" />
????????????? <appender-ref ref="RemotingAppender1" />
?????????????
????????
</
root
>
????
</
log4net
>
</
configuration
>
同樣我們修改
RemotingServer
的
App.config
文件實現一個
server
上收集的信息以多種介質保存:
<?
xml
version
="1.0"
encoding
="utf-8"
?>
<
configuration
>
????
<!
-- Register a section handler for the log4net section --
>
????
<
configSections
>
????????
<
section
name
="log4net"
type
="System.Configuration.IgnoreSectionHandler"
/>
????
</
configSections
>
????
<!
-- This section contains the log4net configuration settings --
>
????
<
log4net
>
????????
<
appender
name
="ConsoleAppender"
type
="log4net.Appender.ConsoleAppender">
?????????????
<
layout
type
="log4net.Layout.PatternLayout">
??????????????????
<
conversionPattern
value
="%date [%thread] %-5levele%logger (%property{log4net:HostName}) [%ndc] - %message%newline"
/>
?????????????
</
layout
>
????????
</
appender
>
????????
<
appender
name
="LogFileAppender"
type
="log4net.Appender.FileAppender">
?????????????
<
file
value
="log-file.txt"
/>
?????????????
<
sppendToFile
value
="true"
/>
?????????????
<
layout
type
="log4net.Layout.PatternLayout">
??????????????????
<
header
value
="FILE HEADER "
/>
??????????????????
<
footer
value
="FILE FOOTER "
/>
??????????????????
<
conversionPattern
value
="%date [%thread] %-5levele%logger (%property{log4net:HostName}) [%ndc] - %message%newline"
/>
?????????????
</
layout
>
????????
</
appender
>
????????
<
root
>
?????????????
<
level
value
="DEBUG"
/>
?????????????
<
appender-ref
ref
="ConsoleAppender"
/>
?????????????
<
appender-ref
ref
="LogFileAppender"
/>
????????
</
root
>
????
</
log4net
>
????
<
system.runtime.remoting
>
????????
<
application
name
="Log4netRemotingServer">
?????????????
<!
-- We need to define the remoting channels on which we will publish
?????????? the remote logging sink. --
>
?????????????
<
channels
>
??????????????????
<
channel
displayName
="Server Channel"
ref
="tcp server"
port
="8085"
/>
?????????????
</
channels
>
????????
</
application
>
????
</
system.runtime.remoting
>
</
configuration
>
Item3#:
Log level
和
Filter level
相互之間的影響,會產生交集嗎?
Answer
:
Log level
是我們定義
logger
的時候使用的,同時在
logger
定義同時也定義了輸出介質,在每個輸出介質中,我們定義了
Filter Level
來過濾我們不要的信息。所以
log level
和
filter level
是會產生交集的。
Item4#:
[Assembly:
log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch=true)]
的內部機制
Answer
:
這個語句我們是使用在項目中的
AssemblyInfo.cs
文件,用來加載我們定義的配置文件到項目中;如果使用項目的默認配置文件
App.config
文件:
[Assembly:
log4net.Config.XmlConfigurator()]
。
ConfigFile
定義了日志配置文件的路徑,Watch定義了檢查配置文件是否有改變。
Item5#:
日志輸出格式的問題,有沒有輔助工具可以對
?log
的內容進行提取和過濾。
(例如:對
log?
文件進行過濾,是開發人員獲得各自所負責模塊的信息)
Answer :