码迷,mamicode.com
首页 > 数据库 > 详细

Web api+MSSQL使用Log4net记录点点滴滴

时间:2018-11-16 13:18:43      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:end   alt   控制器   csharp   模板   语言   控制   日期格   read   

什么是log4Net

log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。 [1] 
log4net是Apache软件基金会Apache Logging Services工程的一部分。Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务。

如何使用

技术分享图片

配置事项

在webapiconfig.cs中添加

log4net.Config.XmlConfigurator.Configure();

web.config

 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <log4net>
    <!--warning, debug ,info, error-->
    <root name="logerror">
      <level value="ALL" />   
      <appender-ref ref="ErrorAppender" />
    </root>
    <!--<root name="loggerinfo">
      <level value="ALL" />
      <appender-ref ref="InfoAppender" />
    </root>-->
    <appender name="InfoAppender" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="server=.;database=myschool_log;uid=sa;pwd=sa"/>
      <commandText value="INSERT INTO ZZHLog  VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="100"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="100"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%l" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="100"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="500"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%m" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000"/>
        <layout type="log4net.Layout.ExceptionLayout"/>
      </parameter>
    </appender>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\LogError\" />
      <!-- 是否追加到文件中-->
      <param name="AppendToFile" value="true" />
      <!--最大文件备份数-->
      <param name="MaxSizeRollBackups" value="100" />
      <!-- 文件最大尺寸 -->
      <param name="MaxFileSize" value="10240" />
      <!-- 是否使用 静态文件名 , F 不使用  T 使用(需要人为指定文件名格式-->
      <param name="StaticLogFileName" value="false" />
      <!-- 日期格式 -->
      <param name="DatePattern" value="yyyyMMdd".txt"" />
      <!-- 生成文件的方式 -->
      <param name="RollingStyle" value="Date" />
      <!-- 日志文件中 一行的 模板 -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n异常时间:%d %n异常级别:%-5p%n异常内容:%m%n" />
      </layout>
      <!--< > = <> %n = 回车-->
    </appender>
  </log4net>

 使用

我们可能还需要知道是哪个控制器发生了错误

 public static class Logger<T> where T:class
    {

        private readonly static ILog logger = LogManager.GetLogger(typeof(T));


        public static void Info(object log)
        {
            logger.Info(log);
        }

        public static void Debug(object log)
        {
            logger.Debug(log);
        }

        public static void Warn(object log)
        {
            logger.Warn(log);
        }
        public static void Error(object log)
        {
            logger.Error(log);
        }
    }

  在控制器的记录

 Logger<GradeController>.Info("添加了年级信息");

 输出到MSSQL

web.config里的log4net的节点就需要修改了~ 最主要的就是appender这两个节点和普通输出文本有些不同!

<log4net>
<!--warning, debug ,info, error-->
<root name="logerror">
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</root>
<!--<root name="loggerinfo">
<level value="ALL" />
<appender-ref ref="InfoAppender" />
</root>-->
<appender name="InfoAppender" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="server=.;database=myschool_log;uid=sa;pwd=sa"/>
<commandText value="INSERT INTO ZZHLog VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="100"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="100"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%l" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="100"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="500"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000"/>
<layout type="log4net.Layout.ExceptionLayout"/>

</parameter>
</appender>

 


<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\LogError\" />
<!-- 是否追加到文件中-->
<param name="AppendToFile" value="true" />
<!--最大文件备份数-->
<param name="MaxSizeRollBackups" value="100" />
<!-- 文件最大尺寸 -->
<param name="MaxFileSize" value="10240" />
<!-- 是否使用 静态文件名 , F 不使用 T 使用(需要人为指定文件名格式-->
<param name="StaticLogFileName" value="false" />
<!-- 日期格式 -->
<param name="DatePattern" value="yyyyMMdd".txt"" />
<!-- 生成文件的方式 -->
<param name="RollingStyle" value="Date" />
<!-- 日志文件中 一行的 模板 -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n异常时间:%d %n异常级别:%-5p%n异常内容:%m%n" />
</layout>
<!--< > = <> %n = 回车-->
</appender>

</log4net>

  注意里面还包裹了connectionstr还有sql,所以我们应该去创建我们的数据库,表结构是和其中的parameter的节点对应的。

  一个appender就是一个输出类型,比如文本或着db。

 表结构:


 

Web api+MSSQL使用Log4net记录点点滴滴

标签:end   alt   控制器   csharp   模板   语言   控制   日期格   read   

原文地址:https://www.cnblogs.com/ZaraNet/p/9968517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!