C# log4net 不输出日志

一个新项目,直接用了一些之前的代码,突然跟踪不到日志了。检查发现了原因,特在此记录。

log4net的配置文件log4net_config.xml

View Code
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="TastInfo" type="log4net.Appender.RollingFileAppender">
        <file value="Log\\Info\\" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <maxSizeRollBackups value="-1" />
        <maximumFileSize value="1MB" />
        <staticLogFileName value="false" />
        <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level  - %message%newline" />
        </layout>
    </appender>
    <appender name="TastError" type="log4net.Appender.RollingFileAppender">
        <file value="log\\Error\\" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <maxSizeRollBackups value="-1" />
        <maximumFileSize value="1MB" />
        <staticLogFileName value="false" />
        <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level - %message%newline" />
        </layout>
    </appender>
    <appender name="TastDebug" type="log4net.Appender.RollingFileAppender">
        <file value="log\\Debug\\" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <maxSizeRollBackups value="-1" />
        <maximumFileSize value="1MB" />
        <staticLogFileName value="false" />
        <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level - %message%newline" />
        </layout>
    </appender>
    <logger name="Info">
        <level value="ALL"/>
        <appender-ref ref="Info" />
        <appender-ref ref="TastInfo" />
    </logger>
    <logger name="Error">
        <level value="ALL"/>
        <appender-ref ref="Error" />
        <appender-ref ref="TastError" />
    </logger>
    <logger name="Debug">
        <level value="ALL"/>
        <appender-ref ref="Debug" />
        <appender-ref ref="TastDebug" />
    </logger>
</log4net>

log4net的应用错误代码:

View Code
 public class Log
    {
        private static string DefaultName = "log";

        static Log()
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + @"\log4net_config.xml";
            log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
        }

        public static log4net.ILog GetLog(string logName)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(logName);
            return log;
        }

        public static void debug(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsDebugEnabled)
                log.Debug(message);

            log = null;
        }

        public static void debug(string message, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsDebugEnabled)
                log.Debug(message, ex);

            log = null;
        }

        public static void error(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsErrorEnabled)
                log.Error(message);

            log = null;
        }

        public static void error(string message, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsErrorEnabled)
                log.Error(message, ex);

            log = null;
        }

        public static void fatal(string message)
        {

            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsFatalEnabled)
                log.Fatal(message);

            log = null;
        }

        public static void info(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsInfoEnabled)
                log.Info(message);

            log = null;
        }

        public static void warn(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsWarnEnabled)
                log.Warn(message);

            log = null;
        } 
    }

不输出日志的原因是因为, 默认private static string DefaultName = "log",在配置文件里面找不到对应的节点值。

正确的应用代码:

View Code
public class Log
    {
        private const string SError = "Error";
        private const string SDebug = "Debug";
        private const string DefaultName = "Info";

        static Log()
        {
            var path = AppDomain.CurrentDomain.BaseDirectory + @"\log4net_config.xml";
            log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
        }

        public static log4net.ILog GetLog(string logName)
        {
            var log = log4net.LogManager.GetLogger(logName);
            return log;
        }

        public static void Debug(string message)
        {
            var log = log4net.LogManager.GetLogger(SDebug);
            if (log.IsDebugEnabled)
                log.Debug(message);
        }

        public static void Debug(string message, Exception ex)
        {
            var log = log4net.LogManager.GetLogger(SDebug);
            if (log.IsDebugEnabled)
                log.Debug(message, ex);
        }

        public static void Error(string message)
        {
            var log = log4net.LogManager.GetLogger(SError);
            if (log.IsErrorEnabled)
                log.Error(message);
        }

        public static void Error(string message, Exception ex)
        {
            var log = log4net.LogManager.GetLogger(SError);
            if (log.IsErrorEnabled)
                log.Error(message, ex);
        }

        public static void Fatal(string message)
        {
            var log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsFatalEnabled)
                log.Fatal(message);
        }

        public static void Info(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsInfoEnabled)
                log.Info(message);
        }

        public static void Warn(string message)
        {
            var log = log4net.LogManager.GetLogger(DefaultName);
            if (log.IsWarnEnabled)
                log.Warn(message);
        } 
    }
总结:log4net.LogManager.GetLogger(Name),这里面的Name要在配置文件中,有对应的节点值。
原文地址:https://www.cnblogs.com/chendaoyin/p/3026717.html