梦想号黄包车wei.lee net-home

Have my best life at SZ....................

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  6 随笔 :: 3 文章 :: 6 评论 :: 0 Trackbacks

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-1.2.9-beta\examples\net\1.0\Remoting

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 -- > Þ

              <! --

              <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&#13;&#10;" />

                   < footer value ="FILE FOOTER&#13;&#10;" />

                   < 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 :

 

 

 

posted on 2006-05-08 19:16 Wei.Lee 阅读(847) 评论(0)  编辑  收藏 所属分类: Dot Net 技术

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问