.net 简单实用Log4net(多个日志配置文件)
程序员文章站
2023-04-08 12:56:53
开发工具vs2017 【注意项目名称不要为log4net,否者在之后配置log4net出错】 1】NuGet中引用Log4net包 2】添加web配置文件命名为log4new.config并在中写入以下代码
view code
view code
view code
开发工具vs2017
【注意项目名称不要为log4net,否者在之后配置log4net出错】
1】nuget中引用log4net包
2】添加web配置文件命名为log4new.config并在中写入以下代码
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetframework="4.5" /> <httpruntime targetframework="4.5" /> </system.web> <configsections> <section name="log4net" type="log4net.config.log4netconfigurationsectionhandler,log4net-net-1.2" /> </configsections> <!--配置log4net--> <log4net> <root> </root> <logger name="rollinglogfileappender"> <level value="all" /> <appender-ref ref="rollingfiledebug" /> <appender-ref ref="rollingfileinfo" /> <appender-ref ref="rollingfilewarn" /> <appender-ref ref="rollingfileerror" /> <appender-ref ref="rollingfilefatal" /> </logger> <appender name="rollingfiledebug" type="log4net.appender.rollingfileappender"> <!--文件路径 如果不设置(去掉 value="log/debug/")会默认保存到[app_data]文件夹中--> <param name="file" value="log/debug/"/> <!--追加到文件--> <param name="appendtofile" value="true"/> <!--最多保留的文件数,设为"-1"则不限--> <param name="maxsizerollbackups" value="10"/> <!--写到一个文件--> <param name="staticlogfilename" value="false"/> <!--文件名,按日期命名--> <param name="datepattern" value="yyyymmdd".log""/> <!--创建日志文件的方式,可选值:date[日期],文件大小[size],混合[composite]--> <param name="rollingstyle" value="date"/> <!--日志格式--> <layout type="log4net.layout.patternlayout"> <!--%newline输出的日志会换行 [%date{hh:mm:ss fff}]表示记录的时间 --> <conversionpattern value="[%date{hh:mm:ss fff}] %- %message%newline" /> <!--如果想自己设置格式就只需要--> <!--<conversionpattern value="%message"/>--> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.filter.levelrangefilter"> <param name="levelmin" value="debug" /> <param name="levelmax" value="debug" /> </filter> </appender> <appender name="rollingfileinfo" type="log4net.appender.rollingfileappender"> <param name="file" value="log/info/"/> <param name="appendtofile" value="true"/> <param name="maxsizerollbackups" value="10"/> <param name="staticlogfilename" value="false"/> <param name="datepattern" value="yyyymmdd".log""/> <param name="rollingstyle" value="date"/> <layout type="log4net.layout.patternlayout"> <conversionpattern value="[%date{hh:mm:ss fff}] %- %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.filter.levelrangefilter"> <param name="levelmin" value="info" /> <param name="levelmax" value="info" /> </filter> </appender> <appender name="rollingfilewarn" type="log4net.appender.rollingfileappender"> <param name="file" value="log/warn/"/> <param name="appendtofile" value="true"/> <param name="maxsizerollbackups" value="10"/> <param name="staticlogfilename" value="false"/> <param name="datepattern" value="yyyymmdd".log""/> <param name="rollingstyle" value="date"/> <layout type="log4net.layout.patternlayout"> <conversionpattern value="[%date{hh:mm:ss fff}] %- %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.filter.levelrangefilter"> <param name="levelmin" value="warn" /> <param name="levelmax" value="warn" /> </filter> </appender> <appender name="rollingfileerror" type="log4net.appender.rollingfileappender"> <param name="file" value="log/error/"/> <param name="appendtofile" value="true"/> <param name="maxsizerollbackups" value="10"/> <param name="staticlogfilename" value="false"/> <param name="datepattern" value="yyyymmdd".log""/> <param name="rollingstyle" value="date"/> <layout type="log4net.layout.patternlayout"> <conversionpattern value="[%date{hh:mm:ss fff}] %- %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.filter.levelrangefilter"> <param name="levelmin" value="error" /> <param name="levelmax" value="error" /> </filter> </appender> <appender name="rollingfilefatal" type="log4net.appender.rollingfileappender"> <param name="file" value="log/fatal/"/> <param name="appendtofile" value="true"/> <param name="maxsizerollbackups" value="10"/> <param name="staticlogfilename" value="false"/> <param name="datepattern" value="yyyymmdd".log""/> <param name="rollingstyle" value="date"/> <layout type="log4net.layout.patternlayout"> <conversionpattern value="[%date{hh:mm:ss fff}] %- %message%newline" /> </layout> <lockingmodel type="log4net.appender.fileappender+minimallock" /> <filter type="log4net.filter.levelrangefilter"> <param name="levelmin" value="fatal" /> <param name="levelmax" value="fatal" /> </filter> </appender> </log4net> </configuration>
4】在global.asax中添加代码
//配置log4 log4net.config.xmlconfigurator.configure(new system.io.fileinfo(server.mappath("~/web.config")));
5】写一个 loghelper.cs但是注意在这个.cs文件的命名空间写上 [assembly: log4net.config.xmlconfigurator(configfile = "log4net.config", watch = true)]
注意configfile 后面跟的是配置文件的相对路径
loghelper代码
public class loghelper { public static readonly ilog log = logmanager.getlogger("rollinglogfileappender"); // log4j定义了8个级别的log(除去off和all,可以说分为6个级别),优先级从高到低依次为:off、fatal、error、warn、info、debug、trace、 all。 //all 最低等级的,用于打开所有日志记录。 //debug 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。 //info 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息, //warn 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。 //error 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。 //fatal 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。 //trace designates finer-grained informational events than the debug.since:1.2.12,很低的日志级别,一般不会使用。 //off 最高等级的,用于关闭所有日志记录。 //如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为warn,那么off、fatal、error、warn 4个级别的log能正常输出,而info、debug、trace、 all级别的log则会被忽略。log4j建议只使用四个级别,优先级从高到低分别是error、warn、info、debug。 #region debug 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。 public static void debug(string write) { log.debug("日志记录:" + write); } public static void debug(string write, exception ex) { log.debug("日志记录:" + write + "。错误记载:" + ex.tostring()); } #endregion #region info 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息, /// <summary> /// 1 /// </summary> /// <param name="write"></param> public static void info(string write) { log.info("日志记录:" + write); } public static void info(string write, exception ex) { log.info("日志记录:" + write + "。错误记载:" + ex.tostring()); } #endregion #region warn 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。,可以使用这个级别。 public static void warn(string write) { log.warn("日志记录:" + write); } public static void warn(string write, exception ex) { log.warn("日志记录:" + write + "。错误记载:" + ex.tostring()); } #endregion #region error 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。 public static void error(string write) { log.error("日志记录:" + write); } public static void error(string write, exception ex) { log.error("日志记录:" + write + "。错误记载:" + ex.tostring()); } #endregion #region fatal 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。 public static void fatal(string write) { log.fatal("日志记录:" + write); } public static void fatal(string write, exception ex) { log.fatal("日志记录:" + write + "。错误记载:" + ex.tostring()); } //#endregion #endregion //定义输出的日志内容 public static string logmessage(syslogmsg logmessage) { stringbuilder strinfo = new stringbuilder(); strinfo.append("\r\n1. 错误: >> 操作时间: " + logmessage.operationtime + " 操作人: " + logmessage.username + " \r\n"); strinfo.append("2. 类名: " + logmessage.class + " \r\n"); strinfo.append("3. 内容: " + logmessage.content + "\r\n"); strinfo.append("-----------------------------------------------------------------------------------------------------------------------------\r\n"); return strinfo.tostring(); } }
6】最后可以开始写日志 ,可以自己定义一种日志格式【自己写一个model,定义几个参数 时间、操作人、类名等等】
最后根据log4new.config设置的路径找到日志所在【未定义的话一般在项目的bin/debug 或者 bin/release目录下】 第一个是默认格式日志,第二个是自己定的格式日志【都是string类型,只不过第二个使用\t\n换行,稍微美化一下输出格式】
<param name="file" value="log/debug/"/> 表示在当前文件夹log/debug中