天天看點

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要在配置檔案中,有對應的節點值。

c#