非完美主义者 2017-06-06 07:08 采纳率: 50%
浏览 763

C# 使用了NHibernate后,log4net就打不出日志了

小弟的C#工程中,使用log4net来打印日志到控制台和文件,没使用nhibernate之前一切正常。但是在使用nhibernate之后,日志就打不出来了。控制台不打印,日志文件也不生成。不知道是不是nhibernate劫持了log4net?怎么解决呢?

app.config的配置如下;


<!--Info级别日志文件-->












<!-- ERROR级别日志文件 -->
<appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender">
  <file value="logs/error.txt"/>
  <appendToFile value="true"/>
  <rollingStyle value="Date"/>
  <datePattern value="yyyyMMdd-HH:mm:ss"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="[%date] [Thread: %thread] [level: %-5level] [class: %logger]:%message%newline"/>
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="ERROR"></levelMin>
    <levelMax value="FATAL"></levelMax>
  </filter>
</appender>

<!--控制台-->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="[%date] [Thread: %thread] [level: %-5level] [class: %logger]:%message%newline" />
  </layout>
</appender>


<root>
  <appender-ref ref="InfoLogAppender"/>
  <appender-ref ref="ErrorLogAppender"/>
  <appender-ref ref="ConsoleAppender"/>
</root>

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 23:19
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于NHibernate在执行持久化操作时会自动关闭日志记录器,导致你无法从控制台看到日志。要解决这个问题,你需要手动开启并管理你的日志记录器。

    以下是一个示例,展示了如何手动开启并管理日志记录器:

    using log4net;
    using log4net.Config;
    
    // 创建一个新的日志记录器
    var logger = LogManager.GetLogger("YourNamespace");
    
    // 打开日志记录器
    if (!logger.IsOpen)
    {
        // 开启日志记录器
        logger.Open();
    }
    
    // 在这里添加你的日志记录器相关代码
    
    // 关闭日志记录器
    if (logger != null && logger.IsOpen)
    {
        logger.Close();
    }
    

    在这个例子中,我们首先创建了一个新的日志记录器,并检查它是否已经打开。如果还没有打开,我们就将其打开。然后,在你的代码中添加你的日志记录器相关的代码。最后,我们再次检查日志记录器是否已经关闭,以确保所有的资源都已正确关闭。

    请注意,这只是一个基本的例子,实际的日志记录可能需要更复杂的配置,例如设置不同的日志级别、指定特定的输出格式等。

    评论

报告相同问题?