C# log4net 不输出日志

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

log4net的配置文件log4net_config.xml 

<?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的应用错误代码:

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",在配置文件里面找不到对应的节点值。

正确的应用代码:

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/soundcode/p/4861438.html