您的位置:首页 > 编程语言 > ASP

ASP.NET MVC 使用Log4Net在不同目录中记录不同类型的日志

2019-06-25 17:16 981 查看

上一篇文章中,实现了利用Log4Net记录系统中出现的问题。如果同时还需要记录用户操作的监控日志,就需要一些修改

修改Web.Cofig配置文件 ,增加一个logger节点和appender节点,用于监控操作日志配置,并且设置不同的日志文件路径,如下图所示:

[code]<log4net>
<!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<!-- Set root logger level to ERROR and its appenders -->
<!--<root>
<level value="ALL"/>
<appender-ref ref="ErrorLogger"/>
<appender-ref ref="ErrorLogger"/>
</root>-->

<!-- Print only messages of level DEBUG or above in the packages -->
<logger name="ErrorLogger">
<!--这里进一步限制了日志级别,只有在大于等于DEBUG的情况下才会记录日志-->
<level value="DEBUG"/>
<appender-ref ref="SysAppender"></appender-ref>
</logger>
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<!--日志放在项目的App_Data文件夹-->
<param name="File" value="Logs\\Error\\" />
<!--日志以追加形式记录-->

4000
<param name="AppendToFile" value="true" />
<!--日期作为回滚:日期排序-->
<param name="RollingStyle" value="Date" />
<!--设置日志文件名称的生成规则 -->
<param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
<!--日志文件是否静态:否-->
<param name="StaticLogFileName" value="false" />
<!--日志格式的内容和布局-->
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value="&#13;&#10;----------------------header--------------------------&#13;&#10;" />
<param name="Footer" value="&#13;&#10;----------------------footer--------------------------&#13;&#10;" />
</layout>
</appender>

<logger name="CommonLogger">
<!--这里进一步限制了日志级别,只有在大于等于DEBUG的情况下才会记录日志-->
<level value="DEBUG"/>
<appender-ref ref="CommonAppender"></appender-ref>
</logger>
<appender name="CommonAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<!--日志放在项目的App_Data文件夹-->
<param name="File" value="Logs\\Common\\" />
<!--日志以追加形式记录-->
<param name="AppendToFile" value="true" />
<!--日期作为回滚:日期排序-->
<param name="RollingStyle" value="Date" />
<!--设置日志文件名称的生成规则 -->
<param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
<!--日志文件是否静态:否-->
<param name="StaticLogFileName" value="false" />
<!--日志格式的内容和布局-->
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value="&#13;&#10;----------------------header--------------------------&#13;&#10;" />
<param name="Footer" value="&#13;&#10;----------------------footer--------------------------&#13;&#10;" />
</layout>
</appender>

<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
</log4net>

修改Global.asax.cs中Application_Start()方法中原来的队列代码中的这句代码,变为系统问题型日志,如下图所示: 

[code]ThreadPool.QueueUserWorkItem(o =>
{
while (true)
{
if (MyErrorAttribute.ExceptionQueue.Count > 0)
{
Exception ex = MyErrorAttribute.ExceptionQueue.Dequeue();
if (ex != null)
{
log4net.ILog logger = log4net.LogManager.GetLogger("ErrorLogger");//修改为和WebConfig中<logger name="ErrorLogger">一样
logger.Error(ex.ToString());
}
else
{
Thread.Sleep(50);
}
}
else
{
Thread.Sleep(50);
}
}
});

在要监控用户操作的地方,加上如下图中的代码,用来打印监控日志:

[code]    public class HomeController : Controller
{
public static log4net.ILog log = log4net.LogManager.GetLogger("CommonLogger");//定义为用户监控日志,对应WebConifg中的<logger name="CommonLogger">

public ActionResult About()
{
int result = 0;
int x = 1, y = 0;
result = x / y;//系统报错日志
ViewBag.Message = "Your application description page.";
return View();
}

public ActionResult Contact()
{
log.Error("好像出错了");//写入自定义的普通监控日志
ViewBag.Message = "Your contact page.";
return View();
}
}

使用效果如下图所示:

                 

Common文件夹下的日志: 

 

Error文件夹下的日志: 

 

 总结:

Log4Net 有3个主要组件:loggers、appenders 和 layouts。这三个组件一起工作式使得开发者能够根据信息类型和等级level记录信息,以及在运行时控制信息的格式化和信息的的写入位置(如控制台、文件、内存、数据库等)。过滤器帮助这些组件控制追加器(appender)的行为和把对象转换成字符串的对象渲染。

Appender:可以将日志输出到不同的地方,不同的输出目标对应的不同的 Appender,如RollingFileAppender(滚动文件)、AdoNetAppender(数据库)、SmtpAppender(邮件)等。

level(级别):标识这条日志信息的重要级别。None>Fatal>Error>Warn>DEBUG>INFO>ALL.设定一个level,那么低于这个level等级的日志是不会被写到Appender中的。

Log4Net还可以设定多个Appender,可以实现同时将日志记录到文件、数据、发送邮件等:可以设定不同的Appender的不同Level,可以实现普通级别都记录到文件、Error以上级别都发送邮件:可以实现对不同的类设定不同Appender:开可以自定义 Appender,自己实现将Error信息发短信等。

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: