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".txt""/>
<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".txt""/>
<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".txt""/>
<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);
}
}