net core Webapi基础工程搭建(四)——日志功能log4net

  • 时间:
  • 浏览:1
  • 来源:大发快三_快三全天计划_大发快三全天计划

前言

一另另另三个小完正的项目工程离不开日志文件的记录,而记录文件的法律措施否是其他其他,可需要被委托人通过Stream去实现文件的读写来完成日志记录,我希望由于有个好的封装类库,那为那先 不去用呢?

.net日志记录,NLog,log4都可需要,用那先 都可需要,根据被委托人喜好,我常用log4,其他其他这里还是介绍Log4的引用及用法。

log4net

这个 log4从开发到现在,从netframework结束了了用,一另另另三个小config文件就够了,NLog没用过,我希望应该否是大差不差,毕竟名字都那末这类嘛(手动滑稽)

依然是,NuGet引用第三方类库

工具->NuGet包管理器->管理处置方案的NuGet守护tcp连接包…

在浏览中查找"log4",确定项目工程,点击安装。



安装完成后,依然是来Startup.cs,这次在构造函数直接声明实例化。

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;

            repository = LogManager.CreateRepository("AprilLog");

            XmlConfigurator.Configure(repository, new FileInfo("Config/log4net.config"));//配置文件路径可需要自定义
            BasicConfigurator.Configure(repository);
        }

        //log4net日志
        public static ILoggerRepository repository { get; set; }

配置文件的创建可需要在工程目录下新建一另另另三个小config文件,配置信息如下,需要标注的信息基本上否是文件注释中,不太满阐述:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- This section contains the log4net configuration settings -->
  <log4net debug="false">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--很关键的一句,让日志文件不被占用-->
      <file value="logs/" /> <!-- 日志生成文件路径 -->
      <appendToFile value="true" /> 
      <rollingStyle value="Composite" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.log'" /> <!-- 日志文件名称格式 -->
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" /> <!-- 最大文件大小,达到后生成新文件 -->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> <!-- 生成日志格式 -->
      </layout>
    </appender>

    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />  <!-- 日志等级 -->
      <appender-ref ref="RollingLogFileAppender" /> 
    </root>

  </log4net>
</configuration>

创建完成后,还是要对比下你的配置文件目录与实际目录否是是一致。



OK,完正确认完成后,可需要在需要用到Log的地方,上加以下代码:

    private ILog log = LogManager.GetLogger(Startup.repository.Name, "Name");
    …
    log.Info("测试");

这类大伙儿继续拿Values这个 控制器开刀。

写好前一天大伙儿运行代码,运行后大伙儿可需要看了工程目录由于有了logs这个 文件夹,打开日志文件。



前一天大伙儿就可需要在日常使用中记录日志,方便调试记录,追踪难题所在。

整合LogUtil

我这个 人比较懒,我希望我其他其他需要关心它是在哪运行,我只你还能否记录的前一天调用下法律措施,其他其他对日志记录做了封装调整。

首先,新建类库工程,Apirl.Util(这个 工程应该刚结束了了都创建的-,-||)。



类库工程新建完成的第一件事,干掉Class.cs(我可需要这示例有何用)

将log4net通过NuGet引入Util工程,过程不太满说了,引用的介绍由于可需要了。

引用完成后,在WebApi工程引入Util。



选中Util这个 类库工程。

题外话,我觉得NuGet引入第三方类库在一另另另三个小项目工程即可,其他工程我希望引用对应的项目工程,也可需要使用对应的第三方类库,即我在Util引入log4,你可需要没必要在WebApi工程再引入,这里其他其他为了讲解说明。

新建LogUtil这个 类,代码如下。

    public class LogUtil
    {
        private static readonly ILog log = LogManager.GetLogger("AprilLog", typeof(LogUtil));

        /// <summary>
        /// 调试日志
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="obj"></param>
        public static void Debug(string msg, object obj = null)
        {
            if (log.IsDebugEnabled && !string.IsNullOrEmpty(msg))
            {
                if (obj == null)
                {
                    log.Debug(msg);
                }
                else
                {
                    log.DebugFormat(msg, obj);
                }
            }
        }
        /// <summary>
        /// 日常日志
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="obj"></param>
        public static void Info(string msg, object obj = null)
        {
            if (log.IsInfoEnabled && !string.IsNullOrEmpty(msg))
            {
                if (obj == null)
                {
                    log.Info(msg);
                }
                else
                {
                    log.InfoFormat(msg, obj);
                }
            }
        }
        /// <summary>
        /// 错误日志
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="obj"></param>
        public static void Error(string msg, object obj = null)
        {
            if (log.IsErrorEnabled && !string.IsNullOrEmpty(msg))
            {
                if (obj == null)
                {
                    log.Error(msg);
                }
                else
                {
                    log.ErrorFormat(msg, obj);
                }
            }
        }
        /// <summary>
        /// 重要日志
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="obj"></param>
        public static void Fatal(string msg, object obj = null)
        {
            if (log.IsFatalEnabled && !string.IsNullOrEmpty(msg))
            {
                if (obj == null)
                {
                    log.Fatal(msg);
                }
                else
                {
                    log.FatalFormat(msg, obj);
                }
            }
        }

    }

下完前一天,继续ValuesController(Why时不时是这),更改代码如下:



运行看下效果。

小结

封装的好处是为了省事,哪里需要写(点)哪里,咳咳,日志的重要性在代码里面并非 ,那末日志的工程是不健全的,守护tcp连接猿可需要完会写逻辑,不去考虑架构,不去优化性能,我希望日志的记录,代码的注释是不可或缺的,毕竟由于想活着,这另另另三个小地方还是多注意吧。

下一节,结束了了缓存机制

猜你喜欢

TechWeb.com.cn

针对《消息称ofo已还清蚂蚁金服欠款能涅槃重生么?》的文章,接近ofo方面的消息人士表示,阿里系目前仍是ofo的最大债主。【TechWeb】10月14日消息,深交所上市公司江西

2019-10-14

【创见移动硬盘报价】最新创见移动硬盘报价大全

关于亲戚亲戚大家|广告服务|使用条款|联系亲戚亲戚大家北京盛拓优讯信息技术有限公司.版权所有中华人民共和国增值电信业务经营许可证编号:京B2-20170206北京市公安局海淀分

2019-10-14

D. Meadowcroft数据,D. Meadowcroft新闻,D. Meadowcroft视频,D. Meadowcroft身价

首页新闻视频直播数据APP懂球号广告合作协议协议D.MeadowcroftD.Meadowcroft俱乐部:维克诺域治国籍:英格兰身高:193CM位置:后卫年龄:34岁体重:7

2019-10-14

买谁家的?三星发布Galaxy C5/C7 同OPPO R9部分用户重合

昨天晚上,三星在北京召开发布会,正式发布了中国特供的GalaxyC系列。买谁家的?三星发布GalaxyC5/C7同OPPOR9帕累托图用户重合配置方面,GalaxyC5采用骁龙

2019-10-14

一位農業女勞模的花生情緣

圖:全國農業勞動模範、保定市易園生態農業科技開發有限公司創始人蔣曉霞4005年,離開農村20年後,年屆四旬的易水「鐵姑娘」蔣曉霞,把經營了15年的汽車配件維修廠轉手,要回農村種

2019-10-14