log4net的简单使用

1、安装log4net插件
  在nuget包管理器查找log4net并安装,安装最新版本就行,如果不行,自行百度吧。在需要使用log4net的项目中引用它
2、创建log4net.config
  在和web.config同一文件路径下创建log4net.config文件,随便创建一个文件,重命名即可。创建完成之后,设置其属性:复制到输出目录。并在其中加入以下设置

<?xml version="1.0"?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
	</configSections>
	<!--日志-->
	<log4net>
		<logger name="logerror">
			<level value="ERROR" />
			<appender-ref ref="ErrorAppender" />
		</logger>
		<logger name="loginfo">
			<level value="INFO" />
			<appender-ref ref="InfoAppender" />
		</logger>
		<!-- 错误日志配置 -->
		<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
			<!-- 保存文件的路径和文件名称 -->
			<param name="File" value="Logs\Error\error.txt" />
			<param name="AppendToFile" value="true" />
			<!-- 日期格式 -->
			<param name="DatePattern" value="yyyyMMdd"/>
			<!-- 保存文件数量 -->
			<param name="MaxSizeRollBackups" value="100" />
			<!-- 每个文件的大小 -->
			<param name="MaximumFileSize" value="1MB" />
			<param name="RollingStyle" value="Size" />
			<param name="StaticLogFileName" value="true" />
			<!-- 日志输出格式 -->
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%-5p %d [%c] %m%n" />
			</layout>
		</appender>
		<!-- 正常日志配置 -->
		<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
			<param name="File" value="Logs\Info\info.txt" />
			<param name="DatePattern" value="yyyyMMdd"/>
			<param name="AppendToFile" value="true" />
			<param name="MaxSizeRollBackups" value="100" />
			<param name="MaximumFileSize" value="1MB" />
			<param name="RollingStyle" value="Size" />
			<param name="StaticLogFileName" value="true" />
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%-5p %d [%c] %m%n" />
			</layout>
		</appender>
	</log4net>
</configuration>

  上述配置中有对应的注释,可以根据个人需要更改。这里我们需要多说一嘴log4net的日志等级,从低至高分别是ALL、DEBUG、INFO、WARN、ERROR、FATAL、None。我们的配置中就配置了info(一般日志信息,可记录具体操作)和error(错误日志信息,可记录异常信息)。
3、记录程序集信息
  找出项目AssemblyInfo.cs文件,在文件的末尾加上

// 指定log4net 的配置文件
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true)]

4、建立log4net帮助类

/// <summary>
/// 日志帮助类
/// </summary>
public class LogHelper
{
    public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
    public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");

    /// <summary>
    /// 普通的文件记录日志
    /// </summary>
    /// <param name="info"></param>
    public static void WriteLog(string info)
    {
        if (loginfo.IsInfoEnabled)
        {
            loginfo.Info(info);
        }
    }
    /// <summary>
    /// 错误日志
    /// </summary>
    /// <param name="info"></param>
    /// <param name="se"></param>
    public static void WriteLog(string info, Exception se)
    {
        if (logerror.IsErrorEnabled)
        {
            logerror.Error(info, se);
        }
    }
}

5、全局拦截异常信息并写进错误日志
  找到项目的WebApiConfig.cs文件,添加ExceptionFilterAttribute过滤器截取全局异常

namespace SnailFis
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            //跨域配置
            config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

            // Web API 路由
            config.MapHttpAttributeRoutes();

            //设置webapi路由规则
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "snailFis_api/{controller}/{action}"
            );

            config.Filters.Add(new ApiExceptionResultAttribute());//添加过滤器
            //移除xml返回格式数据
            GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
        }

        /// <summary>
        /// API异常返回
        /// </summary>
        public class ApiExceptionResultAttribute : ExceptionFilterAttribute
        {
            public override void OnException(HttpActionExecutedContext actionExecutedContext)
            {
                base.OnException(actionExecutedContext);//获取返回的http信息
                LogHelper.WriteLog("WebApiConfig", actionExecutedContext.Exception);
            }
        }
    }
}

  这时我们可以故意在代码中抛出一个异常,看看能不能截取到并写入进错误日志了。另外info日志,就需要根据个人需求添加了,这里就不再赘述了。

log4net的简单使用

上一篇:MySql学习笔记(二):SQL执行顺序


下一篇:Redis持久化——RDB、AOF总结、性能建议(Which one)