首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LoggingFacility -控制将要使用的记录器

LoggingFacility -控制将要使用的记录器
EN

Stack Overflow用户
提问于 2012-04-17 19:38:37
回答 2查看 496关注 0票数 0

我将Log4NetCastle.WindsorLoggingFacilityLog4netIntegration结合使用。我正在使用的这个项目涉及到NHibernate,它也与log4net对话。

我想要做的是分割日志,这样NHibernate就会在一个日志中结束(data-log.txt),而所有的系统日志最终都在一个单独的日志(system-log.txt)中结束。

我遇到的问题是,似乎由温莎注入的Logger只会在我的log4net配置中写入根记录器。NHibernate查找名为NHibernate或Nhibernate的记录器,因此我可以将这些日志转移到数据日志--log.txtAppder中,但它也会将日志写入根记录器。

因此,我现在得到的是来自Windsor和NHibernate的日志,最后都是根日志记录器,而来自NHibernate的日志则是在nhibernate特定的记录器中完成的。

下面是我的log4net配置部分,在我的app.config中:

代码语言:javascript
运行
复制
<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<appender name="Console" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>
  </layout>
</appender>
<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
  </layout>
</appender>
<appender name="NHibernateLogAppender" type="log4net.Appender.RollingFileAppender">
  <file value="data-log.txt" />
  <!-- various stuff -->
</appender>
<appender name="SystemLogAppender" type="log4net.Appender.RollingFileAppender">
  <file value="system-log.txt" />
  <!-- various stuff -->
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="AspNetTraceAppender" />
  <appender-ref ref="Console" />      
</root>

<logger name="SystemLogger">
  <level value="ALL" />
  <appender-ref ref="SystemLogAppender" />
</logger>
<logger name="NHibernate">
  <level value="WARN" />
  <appender-ref ref="NHibernateLogAppender" />
</logger>    
<logger name="NHibernate.SQL">      
  <level value="DEBUG" />
  <appender-ref ref="NHibernateLogAppender"/>
</logger>   

而温莎正在通过类似于container.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithAppConfig());的代码进行配置。

我如何告诉温莎瞄准SystemLogger而不是根?

我知道这样做的一种方法是为希望使用日志的每种类型创建一个特定的记录器,但这似乎是一种很好的方法,当您稍后忘记了这一点时,就会对自己开枪。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 21:30:05

只有根记录器与所有附加程序。然后对记录器名称使用appender白名单和黑名单过滤:

代码语言:javascript
运行
复制
<appender name="NHibernateLogAppender" type="log4net.Appender.RollingFileAppender">
  <file value="data-log.txt" />
  <!-- various stuff -->

  <filter type="log4net.Filter.LoggerMatchFilter">  
    <loggerToMatch value="NHibernate" />  
  </filter>
</appender>

<appender name="SystemLogAppender" type="log4net.Appender.RollingFileAppender">
  <file value="system-log.txt" />
  <!-- various stuff -->

  <filter type="log4net.Filter.LoggerMatchFilter">  
    <loggerToMatch value="NHibernate" />  
    <acceptOnMatch value="false" />
  </filter>
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="NHibernateLogAppender" /> 
  <appender-ref ref="SystemLogAppender" />
</root>
票数 4
EN

Stack Overflow用户

发布于 2012-04-18 17:10:14

另一条路线:我向Castle.Windsor团队提交了一个补丁,允许用户指定要使用的日志名称。

如果您从github中提取并构建了温莎,那么LoggingFacility现在有了一个配置方法ToLog(string LogName),它允许您控制将使用哪个日志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10197967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档