磨刀不误砍柴工—Exceptionless搭配log4net记录日志

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磨刀不误砍柴工—Exceptionless搭配log4net记录日志相关的知识,希望对你有一定的参考价值。

Exceptionless专注于.net平台提供实时错误和日志报告。主要包括:错误通知、智能分组异常、详细错误报告堆栈跟踪、支持离线、UI查看重要错误和确定优先级、仪表板上的统计信息和趋势、对异常标记为已修复,监视回归、将事件标记为关键等。主要是用于展示、分析;

log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。现在的最新版本是1.2.10。主要用于自定义收集日志;

下面的例子展示了如何利用log4net配合Exceptionless记录日志 。配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <log4net>
    <!--定义输出到文件中-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--定义文件存放位置-->
      <file value="log\\\\" />
      <!--是否追加到文件,默认为true,通常无需设置-->
      <appendToFile value="true" />
      <!--多线程时采用最小锁定-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--变换的形式为日志大小-->
      <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
      <!--<rollingStyle value="Size" />-->
      <!--每天记录的日志文件个数,与maximumFileSize配合使用-->
      <!--<MaxSizeRollBackups value="10" />-->
      <!--每个日志文件的最大大小-->
      <!--可用的单位:KB|MB|GB-->
      <!--不要使用小数,否则会一直写入当前日志-->
      <!--<maximumFileSize value="2MB" />-->

      <!--变换的形式为日期,这种情况下每天只有一个日志-->
      <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
      <rollingStyle value="Date" />

      <!--每分钟写一个文件-->
      <!--<datePattern value="yyyyMMdd-HHmm" />-->
      <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->

      <datePattern value="yyyyMMdd\\\\HH'.txt'" />
      <staticLogFileName value="false" />
      <param name="MaxSizeRollBackups" value="100" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline %n记录时间:%date %n描述:%message" />
        <!--<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%propertyNDC] - %n错误描述:%message%newline %n" />-->
      </layout>
    </appender>
    <appender name="exceptionless" type="Exceptionless.Log4net.ExceptionlessAppender,Exceptionless.Log4net" />
    <root>
      <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
      <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="ALL" />
      <!--文件形式记录日志-->
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="exceptionless" />
    </root>
  </log4net>
</configuration>

Startup

public Startup(IConfiguration configuration)
        
            Configuration = configuration;
            //repository = LogManager.CreateRepository("NETCoreRepository");
             指定配置文件
            //XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
        

app.UseExceptionless()

ExceptionlessClient.Default.Configuration.ApiKey = Configuration.GetSection("Exceptionless:ApiKey").Value;

            // ExceptionlessClient.Default.Configuration.ServerUrl = Configuration.GetSection("Exceptionless:ServerUrl").Value;
            app.UseExceptionless();

使用

//public IActionResult Index()
        //
        //    try
        //    
        //        // Submit logs
        //        ExceptionlessClient.Default.SubmitLog("Logging made easy");

        //        // You can also specify the log source and log level.
        //        // We recommend specifying one of the following log levels: Trace, Debug, Info, Warn, Error
        //        ExceptionlessClient.Default.SubmitLog(typeof(Program).FullName, "This is so easy", "Info");
        //        ExceptionlessClient.Default.CreateLog(typeof(Program).FullName, "This is so easy", "Info").AddTags("Exceptionless").Submit();

        //        // Submit feature usages
        //        ExceptionlessClient.Default.SubmitFeatureUsage("MyFeature");
        //        ExceptionlessClient.Default.CreateFeatureUsage("MyFeature").AddTags("Exceptionless").Submit();

        //        // Submit a 404
        //        ExceptionlessClient.Default.SubmitNotFound("/somepage");
        //        ExceptionlessClient.Default.CreateNotFound("/somepage").AddTags("Exceptionless").Submit();

        //        // Submit a custom event type
        //        ExceptionlessClient.Default.SubmitEvent(new Event  Message = "Low Fuel", Type = "racecar", Source = "Fuel System" );

        //        throw new Exception("ExceptionDemo 的异常");
        //    
        //    catch (Exception ex)
        //    
        //        ex.ToExceptionless().Submit();
        //    
        //    return View();
        //

以上是关于磨刀不误砍柴工—Exceptionless搭配log4net记录日志的主要内容,如果未能解决你的问题,请参考以下文章

Exceptionless 本地搭建记录

开源日志框架Exceptionless使用教程

日志收集框架 Exceptionless

开源日志收集Exceptionless简单使用

Exceptionless - 使用进阶

如何在控制台应用程序中使用分布式日志Exceptionless