程序开发中如果是小型的程序可能就是那么一调试护着关键位置自己写个本地文件记录访问数据就可以了,现在平台化的产品越来越多,对于一个在运营的平台而言调试,追加记录这些显然有些跟不上时代的步伐。所以推荐大家无论是自己的小程序还是大项目一定要养成做系统日志的好习惯,小小的日志却可以解决很多问题。
下面就具体说手log4net这个插件的具体用法,引用了她就可以节省不少花在日志上的时间。
第一步:下载安装
如果用的是VS2010或者以上版本的话直接在NuGet包中搜索并安装log4net
或者去官网下载安装,点击查看
第二步:项目引用log4net.dll
第三步:配置log4net文件,因为配置的文件信息量较大可以直接保存一个log4net.config做配置文件
<?xml version="1.0" encoding="utf-8"?> <configuration> <!--注册lognet--> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <!--配置链接数据库--> <connectionStrings> <add name="ApplicationServices" connectionString="data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> </connectionStrings> <log4net debug="false"> <root> <priority value="ALL"/> <appender-ref ref="TraceAppender"/> <appender-ref ref="ConsoleAppender"/> <appender-ref ref="RollingFileAppender"/> </root> <logger name="iNotes"> <level value="WARN"/> <level value="INFO"/> <level value="DEBUG"/> <level value="FINE"/> <appender-ref ref="ADONetAppender"/> </logger> <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline"/> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline"/> </layout> </appender> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志文件夹及文件名开头--> <file value="logsyslog"/> <!--是否追加到文件--> <appendToFile value="true"/> <!--日期的格式--> <RollingStyle value="Date"/> <!--文件名后面加上.log后缀,必须使用转义字符--> <DatePattern value="yyyy-MM-dd'.log'"/> <!--最大文件大小--> <maximumFileSize value="3MB" /> <!--日志文件名是否为静态--> <StaticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%newline记录时间:%date 线程ID:[%thread] 日志级别:%-5level 事件源:%logger [%property{NDC}] -事件描述: %message%newline%newline"/> <param name="Header" value=""/> <param name="Footer" value=""/> </layout> <!--解除对文件一直占用--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> </appender> <!--定义输出到控制台命令行中--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定义输出到windows事件中--> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb--> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" /> <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" /> <!--定义各个参数--> <parameter> <parameterName value="@logDate" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date" /> </layout> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@logLevel" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> </appender> </log4net> <!--End站点日志配置部分--> </configuration>
第四步 添加配置log4net.config引用
如果是web应用,可以直接通过Global.asax来配置
添加方式:
protected void Application_Start() { log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/app_data/Config/log4net.config"))); }
如果是winform版的,可以通过AssemblyInfo.cs修改或者通过配置文件也可以
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
第五步 程序中添加日志记录
var logger = LogManager.GetLogger(typeof(this.GetType())); logger.Info("消息"); logger.Warn("警告"); logger.Error("异常"); logger.Fatal("错误");
这样就完事了,如果对日志更方便记录可以把var logger = LogManager.GetLogger(typeof(this.GetType()));放在基类中实例化
如果在所有配置都完成的情况还是不能出现日志,可以再config文件中添加这样一段,查看输出日志,查找原因
<configuration> <appSettings> <add key="log4net.Internal.Debug" value="true"/> </appSettings> </configuration>
<system.diagnostics> <trace autoflush="true"> <listeners> <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C: mplog4net.txt" /> </listeners> </trace> </system.diagnostics>
一般原因都是因为配置文件路径读取不到,或者日志文件写入权限不足。