• 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要在配置文件中,有对应的节点值。
  • 相关阅读:
    RESTful规范1
    Django -- 发送HTML格式的邮件
    11.10 vue
    Selenium 使用
    Beautiful Soup的用法
    Pthon常用模块之requests,urllib和re
    爬虫--工具安装Jupyter anaconda
    11-3
    Python -- tabulate 模块,
    Python -- queue队列模块
  • 原文地址:https://www.cnblogs.com/chendaoyin/p/3026717.html
Copyright © 2020-2023  润新知