【问题标题】:Log4Net config problemsLog4Net 配置问题
【发布时间】:2011-04-09 12:57:58
【问题描述】:

所以我有一个网站和一个每天运行的控制台应用程序。

它们都调用了一个名为 ProcessIncident() 的函数。该网站允许您针对单个事件手动执行此操作,并且控制台应用程序每晚都会执行批处理。

在函数中,我有各种 log4net Log.InfoFormat() 和 Log.DebugFormat() 调用

当我从网站运行时,它记录正​​常

当我从控制台应用程序运行时,它根本不记录

指定的路径确实存在

控制台应用配置如下

<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">



  <logger name="NHibernate">
    <level value="OFF" />
    <appender-ref ref="NHibernateFileAppender" />
  </logger>


  <logger name="SMS">
    <level value="ALL" />
    <appender-ref ref="SmsFileAppender" />
  </logger>




<appender name="SmsFileAppender" type="log4net.Appender.RollingFileAppender">  
    <file value="D:\XXXX\SMS.IncidentBilling.log" />  
    <appendToFile value="true" />  
    <rollingStyle value="Size" />  
    <maxSizeRollBackups value="2" />  
    <maximumFileSize value="1MB" />  
    <staticLogFileName value="true" />  
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date]  %-5level %logger %message %newline" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>  







  <appender name="NHibernateFileAppender" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="D:\Dev\SMS\Main\Source\SMS.Website\Logs\nhibernate.log" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date] %appdomain %-5level %c %message %newline" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  </appender>








</log4net>

在控制台应用程序中,我引用了 log4net dll 并将成员声明为

private  ILog Log = LogManager.GetLogger(typeof(Task));

任何人都可以看到我在做什么愚蠢的事情。没有实际错误,只是没有通过控制台应用程序记录 gettign

【问题讨论】:

    标签: .net logging configuration log4net console-application


    【解决方案1】:

    Leniel Macaferi's answer 一起,Web 应用程序与控制台应用程序的一个区别是,如果您为 log4net 使用单独的自定义配置文件(即它不是 App.config 文件的一部分),那么您需要设置文件在构建和编译时要复制的属性。否则,它不会找到它。这通常不是 Web 应用程序的问题,因为它可以在根目录中找到该文件。

    要更改它,在 Visual Studio 中:

    Find the config file in Solution Explorer -&gt; right-click the file -&gt; select Properties -&gt; Copy to Output Directory -&gt; "Copy always"

    【讨论】:

    • 对我有用的替代方法是将构建操作更改为 content,然后将始终创建日志。但我在 Visual Studio 2015 中工作,目前是 2017 年我写这篇文章,所以谁知道...
    【解决方案2】:

    我不记得我到底做了什么,但我认为你应该在使用它之前初始化 log4net。

    类似这一行:

    log4net.Config.XmlConfigurator.Configure();
    

    点击此处了解更多信息:

    Have log4net use application config file for configuration data.

    也看到这个(他打电话给log4net.Config.BasicConfigurator.Configure();):

    Log4Net Tutorial in C# .net (How can I show log in a file?)

    【讨论】:

    • 我最终调用了 log4net.Config.XmlConfigurator.ConfigureAndWatch(log4netConfigFile);但你也可以在没有参数的情况下调用它,它会在你的 app.config 文件中查找
    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多