有一个LoggerManager模块,引用了log4net,
其中如下操作:    public static class Logger
    {
        private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
       
        public static void Debug(object message)
        {
            if (logger.IsDebugEnabled)
            {
                logger.Debug(message);
            }
 
        }
结果是IsDebugEnabled =false!即使强制写也看不到输出日志。下面是配置文件。<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:\test.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="2KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <footer value="[Footer]--Test By cxy1981 &#13;&#10;" />
        <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
      </layout>
    </appender>    <root>
      <priority value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>首先说明:这个配置文件绝对可用。而且能正常输出文件。
结果是打死都没有输出日志!!有人说是因为没有放在主程序中!有道理吗?不可理解啊。各位帮帮忙,

解决方案 »

  1.   

    建立一个dll,先写一个类,引用log4Net.dll
    public class Logger
        {        public static bool GetTracerSwitchor()
            {
                string configPath = Application.StartupPath + "\\eSerialPro.exe";
                System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
                bool IsTracer = Convert.ToBoolean(config.AppSettings.Settings["IsTracer"].Value);
                return IsTracer;
            }        /// <summary>
            /// 调试信息
            /// </summary>
            /// <param name="msg"></param>
            public static void Debug(string msg)
            {
                bool IsTracer = GetTracerSwitchor();
                if (IsTracer)
                {
                    log4net.ILog log = log4net.LogManager.GetLogger("Test");
                    if (log.IsDebugEnabled)
                    {
                        log.Debug(msg);
                    }
                    log = null;
                }
            }
    }
    这样调用再在Assembly里加入信息[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]再在可执行程序的根目录下,写一个名为log4net.appconfig文件,内容如下<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
      <log4net>
            <root>
                <!--
                <level value="ALL" />
                <appender-ref ref="rootFile" />
                -->
            </root>
            <logger name="Test">
                <level value="DEBUG" />
                <appender-ref ref="rollingFile" />
            </logger>
            <appender  name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
                <param name="File" value="Application.log.txt" />
             <param name="AppendToFile" value="true" />
                <param name="RollingStyle" value="Date" />
                <param name="DatePattern" value="yyyyMMdd" />
                <layout type="log4net.Layout.PatternLayout,log4net">                
                    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
                    <param name="Header" value=" ----------------------header-------------- " />
                    <param name="Footer" value=" ----------------------footer-------------- " />        
                </layout>
            </appender>        
        </log4net></configuration>
    就可以在程序的任意位置输出了,注意你自己程序的程序名和我给出的可能有出入,自己改下
      

  2.   

    再在可执行程序的根目录下,写一个名为log4net.appconfig文件,内容如下 文件名是log4net.config,多写了一个app
      

  3.   

    命名空间前加上[assembly: log4net.Config.XmlConfigurator(Watch = true)]
      

  4.   

    放在可执行程序的根目录可以,但是我想放在根目录下的一个conf目录,咋办?
      

  5.   

    你看一下log4net的配置帮助文件就行了,生成的log文件放在conf下
      

  6.   

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" 
          type="log4net.Config.Log4NetConfigurationSectionHandler, 
                log4net-net-1.0" 
    />
      </configSections>  <log4net>
        <!--
        <root>
          <level value="ALL" />
          <appender-ref ref="RollingLogFileAppender" />RollingSocket   RollingErentLog
        </root>
    -->      <logger name="Log">
            <level value="ALL"/>
            <appender-ref ref="RollingLog" />
          </logger>
          <logger name="Error">
            <level value="ALL"/>
            <appender-ref ref="RollingError" />
          </logger>
          <logger name="Login">
            <level value="ALL"/>
            <appender-ref ref="RollingLogin" />
          </logger>    <logger name="EventLog">
          <level value="ALL"/>
          <appender-ref ref="RollingEventLog" />
        </logger>    <logger name="ResLog">
          <level value="ALL"/>
          <appender-ref ref="RollingResLog" />
        </logger>
        <appender name="RollingError" type="log4net.Appender.RollingFileAppender">
            <file value="Err\Err" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value="yyyyMMdd'.txt'" />
            <staticLogFileName value="false" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%d [%t]%c %m%n" />
            </layout>
          </appender>      <appender name="RollingLog" type="log4net.Appender.RollingFileAppender">
            <file value="Log\Log" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value=".yyyyMMdd'.txt'" />
            <staticLogFileName value="false" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%d [%t]%c %m%n" />
            </layout>
          </appender>
          <appender name="RollingLogin" type="log4net.Appender.RollingFileAppender">
            <file value="Login\Login" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value=".yyyyMMdd'.txt'" />
            <staticLogFileName value="false" />
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%d [%t] %-5p %c - %m%n" />
            </layout>
          </appender>      <appender name="RollingEventLog" type="log4net.Appender.RollingFileAppender">
          <file value="Event\Event" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datePattern value=".yyyyMMdd'.txt'" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d [%t] %-5p %c - %m%n" />
          </layout>
        </appender>    <appender name="RollingResLog" type="log4net.Appender.RollingFileAppender">
          <file value="Res\Res" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datePattern value=".yyyyMMdd'.txt'" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d - %m%n" />
          </layout>
        </appender>
        
          </log4net></configuration>
    --
    log4net.ILog Log = log4net.LogManager.GetLogger("Log");
    log4net.ILog LogLogin = log4net.LogManager.GetLogger("Login"); LogLogin.Info("通信Connect成功!");
      

  7.   

    一般是 assembly.cs 文件中没有正确设置如果是 winform 的在主工程的 assembly.cs 文件中加入
    [assembly: log4net.Config.XmlConfigurator]如果是 webform 的
    在 Application_Start 中加入    void Application_Start(object sender, EventArgs e) 
        {
            log4net.Config.XmlConfigurator.Configure();
        }
      

  8.   

    问题解决:主要是路径没有找对,log4net不一定要放在主程序中,
    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "conf\\log4net.config", Watch = true)]
    这个语句放在Logger处理模块中也行,注意"conf\\log4net.config“
    然后在处理Logger的类中:
    private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);这里是指系统输出目录下的conf目录,我之前就是这个路径一直不对,才无法输出的。
    至于配置文件,基本上随便在网上抄一段都可以用。谢谢各位。
      

  9.   

    系统本身有日志啊,或者用数据库日志也可以实在不行就自己写个文件日志
    public void Sav2File(string LOGFILE, string intext) 
            { 
                try 
                { 
                    using (StreamWriter sw = new StreamWriter(LOGFILE, true)) 
                    { 
                        DateTime nn = DateTime.Now; 
                        sw.Write("#  " + nn.ToLongDateString() + "  " + nn.ToLongTimeString() + "  " + nn.Millisecond() + " #  " + intext + " \r\n"); 
                    } 
                } 
                catch 
                { 
                    // 
                } 
            } 
    就这么简单 需要其他功能自己加
      

  10.   

    如果 一般是 assembly.cs 文件中没有正确设置 
    程序在运行时就会出错了