nhibernate - NHibernate 如何实现可选的 log4net 日志记录

标签 nhibernate log4net

我记得 log4net 与 NH 一起出现并且对于 OR-Mapper 是强制性的那些日子(真的是不久前)。现在它不再是强制性的,而是可选的。

我真的很想知道 NHibernate 是如何实现这一点的。如果有人能用几句话解释,那将不胜感激!

最佳答案

NHibernate 有一个 ILoggerFactory 来创建如下定义的记录器:

public interface ILoggerFactory
    {
        IInternalLogger LoggerFor(string keyName);
        IInternalLogger LoggerFor(System.Type type);
    } 
IInternalLogger接口(interface),尽管名称根本不是内部的,是实际的记录器接口(interface),毫不奇怪,它恰好映射到 ILog log4net的界面. NH 在需要记录时在内部询问记录器工厂。如果没有配置其他记录器,并且存在 log4net 程序集,则工厂返回 log4net 的包装器。如果您想提供自己的,您只需要提供一个记录器工厂并将其配置为:
 <appSettings>
        <add key="nhibernate-logger" 
                  value="MyLoggingLoggerFactory, MyLoggingAssembly"/>
    </appSettings>

如您所料,MyLoggingLoggerFactory 类必须实现 ILoggerFactory .返回的记录器当然必须实现 IInternalLogger ,如前所述是公开的,即使不愉快的名称可能会产生误导。
这是他们过去的策略 log4net独立的。另外,如果您根本不需要日志,只需从部署目录中删除 log4net 程序集:NH 将优雅地降级并在内部使用空记录器。

关于nhibernate - NHibernate 如何实现可选的 log4net 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015840/

相关文章:

unit-testing - NUnit 和 Log4Net 集成 : asserting based on the log

configuration - Log4net : Rolling file on utc date rather than server date

asp.net - 如何强制 NHibernate 识别不是通过 NHibernate 进行的数据库更改

c# - 在 NHibernate 中构造针对 IUserType 的查询

c# - nhibernate 2本书

asp.net - ASP.NET 中的 log4net 唯一请求 ID

c# - log4net AppenderSkeleton 忽略 PatternLayout

c# - 带有子类的 Fluent NHibernate Repository

elasticsearch - 如何在 hibernate 搜索中编写 aggs 查询

configuration - 外部配置的Log4Net相对路径