【问题】
用如下的步骤应用了Log4Net:
- 建立了一个公用的项目, 在里面引入了Log4net的Nuget package.
- 在公用的项目中建立了一个类,加上了Log4net的attribute.
[assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace MyNamespace.Common { public class LogHelper { static LogHelper() { var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"); XmlConfigurator.ConfigureAndWatch(logCfg); } public static void WriteError(Type t, Exception ex) { log4net.ILog log = log4net.LogManager.GetLogger(t); log.Error("", ex); }
public static void WriteLog(Type t, string msg) { log4net.ILog log = log4net.LogManager.GetLogger(t); //log.Info(msg + " "); log.Info(msg); }
} } |
- 建立了一个新项目,然后引用这个公用项目。
- 在这个新项目中加入了log4net.config文件。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections>
<log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <param name= "File" value= "Log/"/> <!--是否是向文件中追加日志--> <param name= "AppendToFile" value= "true"/> <!--log保留天数--> <param name= "MaxSizeRollBackups" value= "10"/> <!--日志文件名是否是固定不变的--> <param name= "StaticLogFileName" value= "false"/> <!--日志文件名格式为:2008-08-31.log--> <param name= "DatePattern" value= "yyyy-MM-dd".log""/> <!--日志根据日期滚动--> <param name= "RollingStyle" value= "Date"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%n%date{HH:mm:ss,fff} [%-5level] %m" /> </layout> </appender>
<!-- 控制台前台显示日志 --> <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="ERROR" /> <foreColor value="Red, HighIntensity" /> </mapping> <mapping> <level value="Info" /> <foreColor value="Green" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" /> </layout>
<filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="Info" /> <param name="LevelMax" value="Fatal" /> </filter> </appender>
<root> <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) --> <level value="all" /> <!--<appender-ref ref="ColoredConsoleAppender"/>--> <appender-ref ref="RollingLogFileAppender"/> </root> </log4net> </configuration> |
- 在新项目的文件中记Log.
LogHelper.WriteLog(typeof(MyClass), "here"); |
进行了上述的步骤后,程序运行的时候,并没有 Log产生。
【分析】
调试了一下,发现在实际运行的时候,Loger各个级别的输出都成false了。
这是怎么回事那?
最后发现程序输出路径下并没有log4net.config,这样的结果就是log4net无法找到配置文件,所以就默认都禁止输出了。
【解决方法】
在程序中将log4net.config设置为总是拷贝到输出目录。
这样,每次编译的时候,log4net.config就会被拷贝到程序的输出目录。
再运行程序的时候,就有log产生了。