首页 > 其他分享 >硬件管理平台-硬件产品库-日志模块

硬件管理平台-硬件产品库-日志模块

时间:2023-08-05 17:47:31浏览次数:37  
标签:log4net 项目 产品库 硬件 添加 loginfo 日志

硬件管理平台-硬件产品库-日志模块

log4net

本项目使用的是log4net,实际上没有什么原因,也没有怎么进行选型,因为他比较符合log4j,因此选择了log4net,的确有些草率。

随着log4j爆出了大漏洞,只能希望log4net是没有的。

使用范围

使用log4net最主要是给硬件项目使用的,因为硬件项目是反射的代码,在现场时除了网关项目外,内部的代码是最难跟踪的,运行期间如果出现问题我们也无法还原,所以log4net主要用于硬件项目。

正文

在硬件项目中我们引用log4net模块,这样有个好处是可以定位到具体项目的位置,所以每个项目都需要引用一次log4net模块。

  1. 通过使用Nuget添加log4net的依赖

  2. HardwareGatewayProductization项目中添加log4net.config文件,并将其属性复制到输出路径改为:如果较新则复制。

    log4net.config配置文件信息为

    <?xml version="1.0" encoding="utf-8" ?>
    <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="WebLog//LogError//" />
          <!--是否追加到文件-->
          <param name="AppendToFile" value="true" />
          <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
          <param name="MaxSizeRollBackups" value="100" />
          <param name="MaxFileSize" value="1024" />
          <!--是否只写到一个文件中-->
          <param name="StaticLogFileName" value="false" />
          <!--这是按日期产生文件夹,并在文件名前也加上日期-->
          <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <param name="RollingStyle" value="Date" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%l][%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n " />
          </layout>
        </appender>
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
          <!--设置日志存储路径-->
          <param name="File" value="WebLog//LogInfo//" />
          <!--是否追加到文件-->
          <param name="AppendToFile" value="true" />
          <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
          <param name="MaxSizeRollBackups" value="100" />
          <param name="MaxFileSize" value="1024" />
          <!--是否只写到一个文件中-->
          <param name="StaticLogFileName" value="false" />
          <!--这是按日期产生文件夹,并在文件名前也加上日期-->
          <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <param name="RollingStyle" value="Date" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="日志时间:%d [%t] %n日志级别:%-5p %n消息描述:%m [%l] %n " />
          </layout>
        </appender>
      </log4net>
    </configuration>
    

    该xml表述了有两种类型的logger,分别为logerrorlogerinfo,分别代表错误日志和日常输出日志。

  3. HardwareGatewayProductization项目的Properties->AssemblyInfo.cs添加

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
    
  4. HardwareGatewayProductization项目中添加log4net的声明,如果不添加系统会默认不引用,这样子就导致了硬件项目也无法引用成功

    #region 添加log日志变量
    readonly ILog _loginfo = LogManager.GetLogger("loginfo");
    readonly ILog _logerror = LogManager.GetLogger("logerror");
    #endregion
    

    综上所述:最外层的项目(启动项目)必须将log4net的配置,引用,声明都走完,其子项目才能使用,否则无法生效,而且还不会报错。

    只能通过调试发现_loginfo的相关属性都为false

    而真正成功时_loginfo的属性下图所示:

  5. 在空调硬件项目中添加代码:TestAirConditionClient文件中添加logger的引用

    #region 添加log日志变量
    readonly ILog _loginfo = LogManager.GetLogger("loginfo");
    readonly ILog _logerror = LogManager.GetLogger("logerror");
    #endregion
    

    我们以GetHardwareInfo方法为例,添加一个调用

    public override HardwareProperties GetHardwareInfo()
    {
        _loginfo.Info("空调测试的日志例子");
        return new HardwareProperties("04", "0401", IAriConditionClient.Type, Model, null, null, Version, Describe, typeof(AirConditionInfo), OperationFun, null, TimeingFun, null);
    }
    
  6. UtilsLibaray也添加log4net的引用,将其他项目中关于log4net的属性复制到本地都改为false。

写在最后

运行后会发现在产品库文件中新建了一个WebLog文件夹,其中LogInfo文件夹下的日志如下:

日志时间:2023-08-05 17:27:00,167 [1] 
日志级别:INFO  
消息描述:空调测试的日志例子 [_01TestAirConditionLibrary.TestAirConditionClient.GetHardwareInfo(G:\Working\笔记\MD笔记\开源项目\HardwareGatewayProject\Hardware\AirConditionLibrary\01TestAirCondition\TestAirConditionClient.cs:30)] 
 日志时间:2023-08-05 17:27:00,181 [1] 
日志级别:ERROR 
消息描述:空调测试的日志例子 [_01TestAirConditionLibrary.TestAirConditionClient.GetHardwareInfo(G:\Working\笔记\MD笔记\开源项目\HardwareGatewayProject\Hardware\AirConditionLibrary\01TestAirCondition\TestAirConditionClient.cs:31)] 

可直接定位到具体文件的特定行,这样有助于我们查找问题。

标签:log4net,项目,产品库,硬件,添加,loginfo,日志
From: https://www.cnblogs.com/wanghun315/p/17608300.html

相关文章

  • 硬件管理平台-硬件产品库-导出zip
    硬件管理平台-硬件产品库-导出zip前言下一步工作主要围绕硬件项目的来进行,通过界面来展示硬件内容并可以进行勾选,勾选后导出zip压缩包来完成。本文不会像之前的文章一样通篇叙述的是一个功能或者说一个模块,而是由多个功能点来完成是,虽然题目是导出zip,不过本文会掺杂着一些其他......
  • SQL SERVER数据库日志清理
    新建查询,选择master数据库USE[master]GOALTERDATABASEblogSETRECOVERYSIMPLEWITHNO_WAIT----blog为需要清除日志的数据库名称GOALTERDATABASEblogSETRECOVERYSIMPLE--简单模式----blog为需要清除日志的数据库名称GOUSEblo......
  • 硬件管理平台-硬件产品库-硬件项目
    硬件管理平台-硬件产品库-硬件项目本篇主要描述的是如何创建一个硬件项目,并将硬件信息进行展示。讲了这么多至少应该能出个效果吧在产品库文件夹中创建一个硬件集合文件夹,该文件夹存放所有硬件项目,在创建硬件项目前我们需要创建某类硬件项目的硬件接口。我们在此以门禁和空......
  • Linux基础32 nginx多虚拟主机,日志,日志目录模块,访问限制模块
    虚拟主机方式一:基于主机多IP方式基于主机多ip的方式,主机多网卡,多外网ip(一般不使用这种方式)[[email protected]]#catchess.confserver{listen10.0.0.7:80;server_namelocalhost;location/{root/code/chess;indexindex.html;}}[r......
  • AndroidStudio2021.3logcat工具无法显示日志解决办法
    AndroidStudio2021.3logcat工具无法显示日志解决办法 https://blog.csdn.net/weixin_43623271/article/details/127876964  1.File->setting2.搜索logcat,->ExperimentalunChkEnablenewLogcattoolwindow以后提示时Dismissit ......
  • SpringBoot-日志系统
    1.Logback介绍Logback是由log4j创始人设计的又一个开源日志组件Logback当前分成三个模块:logback-core,logback-classic和logback-accesslogback-core是其它两个模块的基础模块,类似与springframeworklogback-classic是log4j的一个改良版本。此外logback-classic......
  • nginx 日志 failed (13: Permission denied) (失败:权限被拒绝)
    原文链接:https://blog.csdn.net/fengxiaolu311/article/details/124685505Nginx查看日志报错:(13:Permissiondenied)tail-f/var/log/nginx/error.logopen()"/var/log/cyberwing-webui-20220507.log"failed(13:Permissiondenied)whileloggingrequest12解决办法1、查......
  • 项目中日志文件夹的复制和删除
    起因在做的项目,在测试阶段,为了方便问题的排查和定位,需要复制或删除日志文件,提供给研发。由于日志比较分散,而且比较多,手动复制容易遗漏,固写此脚本方便管理(由chatGPT协助编写)脚本@echooffsetlocal&cls::设置你想要搜索的目录set"search_dir=C:\Users\Administrator\Des......
  • syslog日志发送、接收与展示
    三、展示1.tar-zxvf loganalyzer-3.6.0.tar.gz2. yum -y install httpdphp*cp -r src/* /var/www/html/loganalyzercp -r contrib/* /var/www/html/loganalyzerchown -R daemon.daemon /var/www/html/loganalyzer 通过web向导安装loganalyzer前,......
  • 三个实例演示 Java Thread Dump 日志分析
    jstackDump日志文件中的线程状态dump文件里,值得关注的线程状态有:死锁,Deadlock(重点关注) 执行中,Runnable  等待资源,Waitingoncondition(重点关注) Waitingonmonitorentry(重点关注)暂停,Suspended对象等待中,Object.wait()或TIMED_WAITING阻塞,Blocked(重点关注)......