精华内容
下载资源
问答
  • Android一个简单实用把Log日志打印到手机本地文件,可以自行取出来上传到服务器开源代码
  • 吭呲了俩小时搞定,这效率真够可以的。扒一堆博客,个个写的都不爽利。 ...本地安装完成后,cmd查看:cmake --version。 glog从github下载。 glog文件夹下打开cmd,依次命令: cmake . cmak...

    吭呲了俩小时搞定,这效率真够可以的。扒一堆博客,个个写的都不爽利。

    预备:vs2017、cmake、glog

    cmake安装文件去官网找,个人下载的msi文件直接安装的,安装时默认是不添加到环境变量,修改为为所有用户添加到环境变量。本地安装完成后,cmd查看:cmake --version。

    glog从github下载

    glog文件夹下打开cmd,依次命令:

    cmake .
    cmake --build .

    编译成功后,会自动生成本机vs对应版本的lib库:glog\Debug\glogd.lib,默认生成win32的debug库。

    将文件夹glog\src\windows\glog与上述lib文件拷贝到新建项目中,工程添加宏定义:

    GLOG_NO_ABBREVIATED_SEVERITIES
    GOOGLE_GLOG_DLL_DECL=

    然后就可以正常使用了。

    #include "pch.h"
    #include <iostream>
    #include "glog/logging.h"
    
    int main(int argc, char* argv[])
    {
        system("mkdir Log && cd Log && mkdir info warning error fatal");
        google::InitGoogleLogging("");
        google::SetLogDestination(google::GLOG_INFO,"Log/info/");
        google::SetLogDestination(google::GLOG_WARNING, "Log/warning/");
        google::SetLogDestination(google::GLOG_ERROR, "Log/error/");
        google::SetLogDestination(google::GLOG_FATAL, "Log/fatal/");
        LOG(INFO) << "info 005";
        LOG(WARNING) << "warning 005";
        LOG(ERROR) << "error 005";
        //LOG(FATAL) << "fatal 005";
    
        google::ShutdownGoogleLogging();
    
        return 0;
    }
    

    如果想生成x64的debug或者release库,可以修改glog中cmake配置文件生成其它平台的lib库(我不会,第一次接触cmake,有点懵,这玩意跨平台能力这么强,相信以后肯定会普及起来的!),也可以使用cmake gui工具生成。

    注:Optional toolset to use填入:host=x64(其它博客写了这一点,截图时忘了。不过我没写,也照样生成行x64位的了);点击Configure执行完毕后,再点击Gernerate,会生成sln解决方案,打开sln后编译一下工程,再拷贝生成的64位的 lib 和 lib/dll 使用。

    下图箭头所指地方,如果打勾,debug和release都会生成 lib+dll;如果不打勾,仅生成lib。

    用的时候发现低级别日志会记录高级别日志,若要改动,参考一篇博客,然后重新cmake,生成新的lib库进行使用。

    另外,glog个人没有找到格式化输出设置,可以参考另一篇博客,我直接将俩功能函数添加进使用工程的 logging.h 里了。

    即在logging.h中添加以下代码:

    template<typename T>
    std::string pack_string(const T &value) {
        std::stringstream ss;
        ss << value;
        return ss.str();
    }
    template<typename T, typename... Args>
    std::string pack_string(const T &value, Args... args) {
        std::stringstream ss;
        ss << value << pack_string(args...);
        return ss.str();
    }
    #define ADDTAG LOG(INFO) << pack_string("Enter ", __FUNCTION__);
    #define ADDLEAVE LOG(INFO) << pack_string("Leave ", __FUNCTION__);

    同时设置:项目工程----> 属性 ---> c/c++ --> 语音 --> 符合模式 修改成否。

    展开全文
  • 它遵循 , 和程序包注册表来监视新发布的代码,然后检查每个程序包的Github中的changelog文件,解析该文件,然后使用changelog内容公开人类可读HTML和机器可读的JSON文件。 有关此体系结构的完整说明,请参见...
  • 基于之前基于Log4Net本地日志服务简单实现 实现本地日志服务,但是随着项目开发演进,本地日志服务满足不了需求,譬如在预发布环境或者生产环境,不可能让开发人员登录查看本地日志文件分析。 Kafka+ELK日志服务套件...

    背景

    1. 基于之前基于Log4Net本地日志服务简单实现 实现本地日志服务,但是随着项目开发演进,本地日志服务满足不了需求,譬如在预发布环境或者生产环境,不可能让开发人员登录查看本地日志文件分析。
    2. Kafka+ELK日志服务套件,可以在线日志服务可以解决上述问题,并且提供丰富报表分析等等;
    3. 具体源码:MasterChief
    4. Nuget:Install-Package MasterChief.DotNet.Core.KafkaLog
    5. 欢迎Star,欢迎Issues;

    源码

    1. 基于Log4Net来实现与kafka通讯Appender

       public class KafkaAppender : AppenderSkeleton
       {
           #region Fields
      
           /// <summary>
           ///     Kafka 生产者
           /// </summary>
           private Producer _kafkaProducer;
      
           #endregion Fields
      
           #region Properties
      
           /// <summary>
           ///     Brokers
           /// </summary>
           public string Brokers { get; set; }
      
           /// <summary>
           ///     Topic
           /// </summary>
           public string Topic { get; set; }
      
           #endregion Properties
      
           #region Methods
      
           /// <summary>
           ///     Initialize the appender based on the options set
           /// </summary>
           /// <remarks>
           ///     <para>
           ///         This is part of the <see cref="T:log4net.Core.IOptionHandler" /> delayed object
           ///         activation scheme. The <see cref="M:log4net.Appender.AppenderSkeleton.ActivateOptions" /> method must
           ///         be called on this object after the configuration properties have
           ///         been set. Until <see cref="M:log4net.Appender.AppenderSkeleton.ActivateOptions" /> is called this
           ///         object is in an undefined state and must not be used.
           ///     </para>
           ///     <para>
           ///         If any of the configuration properties are modified then
           ///         <see cref="M:log4net.Appender.AppenderSkeleton.ActivateOptions" /> must be called again.
           ///     </para>
           /// </remarks>
           public override void ActivateOptions()
           {
               base.ActivateOptions();
               InitKafkaProducer();
           }
      
           /// <summary>
           ///     Subclasses of <see cref="T:log4net.Appender.AppenderSkeleton" /> should implement this method
           ///     to perform actual logging.
           /// </summary>
           /// <param name="loggingEvent">The event to append.</param>
           /// <remarks>
           ///     <para>
           ///         A subclass must implement this method to perform
           ///         logging of the <paramref name="loggingEvent" />.
           ///     </para>
           ///     <para>
           ///         This method will be called by <see cref="M:DoAppend(LoggingEvent)" />
           ///         if all the conditions listed for that method are met.
           ///     </para>
           ///     <para>
           ///         To restrict the logging of events in the appender
           ///         override the <see cref="M:PreAppendCheck()" /> method.
           ///     </para>
           /// </remarks>
           protected override void Append(LoggingEvent loggingEvent)
           {
               try
               {
                   var message = GetLogMessage(loggingEvent);
                   var topic = GetTopic(loggingEvent);
      
                   _ = _kafkaProducer.SendMessageAsync(topic, new[] {new Message(message)});
               }
               catch (Exception ex)
               {
                   ErrorHandler.Error("KafkaProducer SendMessageAsync", ex);
               }
           }
      
           /// <summary>
           ///     Raises the Close event.
           /// </summary>
           /// <remarks>
           ///     <para>
           ///         Releases any resources allocated within the appender such as file handles,
           ///         network connections, etc.
           ///     </para>
           ///     <para>
           ///         It is a programming error to append to a closed appender.
           ///     </para>
           /// </remarks>
           protected override void OnClose()
           {
               base.OnClose();
               StopKafkaProducer();
           }
      
           private string GetLogMessage(LoggingEvent loggingEvent)
           {
               var builder = new StringBuilder();
               using (var writer = new StringWriter(builder))
               {
                   Layout.Format(writer, loggingEvent);
      
                   if (Layout.IgnoresException && loggingEvent.ExceptionObject != null)
                       writer.Write(loggingEvent.GetExceptionString());
      
                   return writer.ToString();
               }
           }
      
           private string GetTopic(LoggingEvent loggingEvent)
           {
               return string.IsNullOrEmpty(Topic) ? Path.GetFileNameWithoutExtension(loggingEvent.Domain) : Topic;
           }
      
           /// <summary>
           ///     初始化Kafka 生产者
           /// </summary>
           private void InitKafkaProducer()
           {
               try
               {
                   if (string.IsNullOrEmpty(Brokers)) Brokers = "http://localhost:9200";
      
                   if (_kafkaProducer == null)
                   {
                       var brokers = new Uri(Brokers);
                       var kafkaOptions = new KafkaOptions(brokers)
                       {
                           Log = new KafkaLog()
                       };
                       _kafkaProducer = new Producer(new BrokerRouter(kafkaOptions));
                   }
               }
               catch (Exception ex)
               {
                   ErrorHandler.Error("InitKafkaProducer", ex);
               }
           }
      
           /// <summary>
           ///     停止生产者
           /// </summary>
           private void StopKafkaProducer()
           {
               try
               {
                   _kafkaProducer?.Stop();
               }
               catch (Exception ex)
               {
                   ErrorHandler.Error("StopKafkaProducer", ex);
               }
           }
      
           #endregion Methods
       }
      
    2. 基于之前定义接口,来实现kafkaLogService

      public sealed class KafkaLogService : ILogService
      {
          #region Constructors
      
          /// <summary>
          ///     Initializes the <see cref="FileLogService" /> class.
          /// </summary>
          static KafkaLogService()
          {
              KafkaLogger = LogManager.GetLogger(KafkaLoggerName);
          }
      
          #endregion Constructors
      
          #region Fields
      
          /// <summary>
          ///     Kafka logger name
          /// </summary>
          public const string KafkaLoggerName = "KafkaLogger";
      
          /// <summary>
          ///     Kafka logger
          /// </summary>
          public static readonly ILog KafkaLogger;
      
          #endregion Fields
      
          #region Methods
      
          /// <summary>
          ///     Debug记录
          /// </summary>
          /// <param name="message">日志信息</param>
          public void Debug(string message)
          {
              if (KafkaLogger.IsDebugEnabled) KafkaLogger.Debug(message);
          }
      
          /// <summary>
          ///     Debug记录
          /// </summary>
          /// <param name="message">日志信息</param>
          /// <param name="ex">异常信息</param>
          public void Debug(string message, Exception ex)
          {
              if (KafkaLogger.IsDebugEnabled) KafkaLogger.Debug(message, ex);
          }
      
          /// <summary>
          ///     Error记录
          /// </summary>
          /// <param name="message">日志信息</param>
          public void Error(string message)
          {
              if (KafkaLogger.IsErrorEnabled) KafkaLogger.Error(message);
          }
      
          /// <summary>
          ///     Error记录
          /// </summary>
          /// <param name="message">日志信息</param>
          /// <param name="ex">异常信息</param>
          public void Error(string message, Exception ex)
          {
              if (KafkaLogger.IsErrorEnabled) KafkaLogger.Error(message, ex);
          }
      
          /// <summary>
          ///     Fatal记录
          /// </summary>
          /// <param name="message">日志信息</param>
          public void Fatal(string message)
          {
              if (KafkaLogger.IsFatalEnabled) KafkaLogger.Fatal(message);
          }
      
          /// <summary>
          ///     Fatal记录
          /// </summary>
          /// <param name="message">日志信息</param>
          /// <param name="ex">异常信息</param>
          public void Fatal(string message, Exception ex)
          {
              if (KafkaLogger.IsFatalEnabled) KafkaLogger.Fatal(message, ex);
          }
      
          /// <summary>
          ///     Info记录
          /// </summary>
          /// <param name="message">日志信息</param>
          public void Info(string message)
          {
              if (KafkaLogger.IsInfoEnabled) KafkaLogger.Info(message);
          }
      
          /// <summary>
          ///     Info记录
          /// </summary>
          /// <param name="message">日志信息</param>
          /// <param name="ex">异常信息</param>
          public void Info(string message, Exception ex)
          {
              if (KafkaLogger.IsInfoEnabled) KafkaLogger.Info(message, ex);
          }
      
          /// <summary>
          ///     Warn记录
          /// </summary>
          /// <param name="message">日志信息</param>
          public void Warn(string message)
          {
              if (KafkaLogger.IsWarnEnabled) KafkaLogger.Warn(message);
          }
      
          /// <summary>
          ///     Warn记录
          /// </summary>
          /// <param name="message">日志信息</param>
          /// <param name="ex">异常信息</param>
          public void Warn(string message, Exception ex)
          {
              if (KafkaLogger.IsWarnEnabled) KafkaLogger.Warn(message, ex);
          }
      
          #endregion Methods
      }
    3. 修改Log4Net.Config,定义Kafka的Topic以及Brokers

          <appender name="KafkaAppender" type="MasterChief.DotNet.Core.KafkaLog.KafkaAppender, MasterChief.DotNet.Core.KafkaLog">
              <param name="Topic" value="beats" />
              <param name="Brokers" value="http://localhost:9092" />
              <layout type="log4net.Layout.PatternLayout">
                  <conversionPattern value="发生时间:%date %newline事件级别:%-5level %newline事件来源:%logger%newline日志内容:%message%newline" />
              </layout>
          </appender>

    使用

    1. 由于基于上篇说的日志接口,所以可以通过Ioc切换,而且不影响在业务代码调用;
    2. 基于业务需求,您可以同时落地本地日志,保证网络抖动或者不正常的时候能够正常记录日志;

    结语

    1. 小弟不才,大佬轻拍;

    转载于:https://www.cnblogs.com/MeetYan/p/10693545.html

    展开全文
  • 开源中国源码

    2019-04-22 16:23:38
    FlyCms 是一个类似知乎以问答为基础的完全开源的JAVA语言开发的社交网络建站程序,基于 Spring Boot+Bootstrap3+MyBatis+MYSQL+Solr+Ehcache 应用架构,专注于社区内容的整理、归类和检索,它集合了问答,digg,wiki...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
  • Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...
  • Logstash 负责日志收集,把本地文件搬到ES里面,一个接受,处理,转发日志的工具。kibana 是开源的分析和可视化平台,和ES一起工作,实现ES可视化,用来搜索,查看,并和存储在ES中的数据进行交互。 二、ELK 安装 1、...

    一、简介

    分布式日志收集 ELK 为 Elasticsearch + Logstash + kibana,Elasticsearch负责存储日志。Logstash 负责日志收集,把本地文件搬到 ES 里面,一个接受,处理,转发日志的工具。kibana 是开源的分析和可视化平台,和 ES 一起工作,实现 ES 可视化,用来搜索,查看,并和存储在 ES 中的数据进行交互。

    二、ELK 安装

    1、Elasticsearch 安装
    2、Kibana 安装
    3、安装 Logstash

    下载

    https://mirrors.huaweicloud.com/logstash/6.4.3/

    解压
    `

    tar -zxvf logstash-6.4.3.tar.gz
    

    配置

    查询 Elasticsearch 的日志,在这个目录下可以找到

    /usr/local/elasticsearch/elasticsearch-6.4.3/logs

    创建配置文件 hly.conf ,填写以下内容

    input{
    
        file{
    	   path => "/usr/local/elasticsearch/elasticsearch-6.4.3/logs/hly.log"
    	   codec =>"json"
    	   type => "elasticsearch-test"
    	   start_position => "beginning"
    	}
    }
    
    output{
    	
    	stdout{ codec => rubydebug}
    	elasticsearch{
    		hosts => ["106.13.*.**:9200"]
    		index => "elasticsearch-log"
    	
    	}
    }	   
    

    然后把文件复制到 logstash 的配置目录里面

    /usr/local/logstash/logstash-6.4.3/config

    cd ../bin/
    

    启动 Elasticsearch

    ./elasticsearch -d
    

    启动 Logstash

    ./logstash -f ../config/hly.config &
    

    启动 Kibana

    ./kibana &
    

    三、测试

    我们访问 kibana 地址

    http://106.13.*.**:5601/app/kibana

    根据索引查询
    在这里插入图片描述

    GET elasticsearch-log/_mapping
    
    GET elasticsearch-log/_search
    
    GET elasticsearch-log/_search
    {
      "query": {
        "match": {
         "message":"2020-03"
        }
      }
    }
    GET /elasticsearch-log
    

    创建可视化界面
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    —— 完

    最后,感谢您阅读我的文章,如果觉得对您有帮助,麻烦点点关注,您的鼓励和支持是我最大的动力,我会坚持每天更新,努力写出好的文章,如果有什么错误,麻烦指正,我将不胜感激,最后祝您工作顺利,生活愉快!

    ABOUT

    我的 Github:Github
    CSDN: CSDN
    个人网站: sirius blog
    E-mail: 1136513099@qq.com

    推荐阅读
    史上最全,最完美的 JAVA 技术体系思维导图总结,没有之一!

    展开全文
  • DBShop开源电子商务网店系统 更新日志: DBShop V0.9.3 RC 2016-12-14 完美支持PHP7及以上版本 修正 客服样式1,在商品列表中,被商品遮盖的问题修正 修正 新客服样式中 客服组状态设置 及显示位置设置无效的问题 ...
  • 现在需要定期备份配置和查看日志检查隐患。可是用网页方式下载太费时间,安排2人轮着下载用了1天,而且ms1600的配置是二进制的,所以萌生研究python脚本的想法。二、方案:在Windows的NMS上运行脚本自动获取保存...

    一、背景:工作上掌管着近百台交换机,其中赫斯曼大概有60台。现在需要定期备份配置和查看日志检查隐患。可是用网页方式下载太费时间,安排2人轮着下载用了1天,而且ms1600的配置是二进制的,所以萌生研究python脚本的想法。

    二、方案:在Windows的NMS上运行脚本自动获取保存交换机配置到本地,下载日志网页。

    ①确认非运营时间下载②获取时间,作于文件夹名字③读取IpAddress文件,获取交换机ip④登陆交换机⑤按命令列表输入命令⑥读取返回值并保存文件⑦下载日志网页

    三、实现代码:

    ; "复制代码")

    1 #! python3

    2 # Download Hirschmann eventlog & configuration

    3 import os, requests, time, logging, telnetlib 4

    5 # TODO: Telnet登陆、命令、退出模块

    6 class TelnetClient(): 7 def __init__(self,):

    8 self.tn = telnetlib.Telnet() 9 def login_host(self,host_ip,username,password): 10 try:

    11 # self.tn = telnetlib.Telnet(host_ip,port=23) 另一种方法

    12 self.tn.open(host_ip,port=23)

    13 except:

    14 logging.warning('%s network connection failed' % k) #连接失败

    15 errorlog = open(os.path.join("D:\\%s" % DirName, "error.log"), 'a')

    16 errorlog.write('%s connection failed \n' % host_ip) 17 errorlog.close()

    18 return False 19 self.tn.read_until(b'User:', timeout=5) #接入后读取“User”的返回值,最多等5s,超出执行下一步

    20 self.tn.write(username.encode('utf-8') + b'\n') #写入用户名,换行符代表回车

    21 self.tn.read_until(b'Password:', timeout=5)

    22 self.tn.write(password.encode('utf-8') + b'\n')

    23 time.sleep(5) #等待5s反应时间

    24 command_result = self.tn.read_very_eager().decode('utf-8') #读取返回值,read_very_eager()获取到的是的是上次获取之后本次获取之前的所有输出

    25

    26 if '>' in command_result: #判断登陆成功

    27 print('%s Logging successfully' %host_ip)

    28 return True 29 else:

    30 logging.warning('%s Logging unsuccessfully' % host_ip) 31 errorlog = open(os.path.join("D:\\%s" % DirName, "error.log"), 'a')

    32 errorlog.write('%s Logging unsuccessfully \n' % host_ip) 33 errorlog.close()

    34 return False 35 def exec_command(self,command): 36 for i in range(len(command)): 37 self.tn.write(command[i].encode('utf-8') + b'\n') #执行命令列表

    38 time.sleep(5) #务必提供反应时间

    39 command_result = self.tn.read_very_eager().decode('utf-8')

    40 if "snooping" in command_result: #判断数据完整

    41 config_file = open(os.path.join("D:\\%s" % DirName, "%s" % k + "_config.txt"), 'a') #新建config文件

    42 config_file.write(command_result) #写入读取的数据

    43 config_file.close()

    44 else:

    45 Errorconfig = open(os.path.join("D:\\%s" % DirName, "error.log"), 'a') #打开error文件

    46 Errorconfig.write('%s configuration isn\'t complete \n' % v) #记录错误数据

    47 Errorconfig.close()

    48 def logout_host(self): 49 self.tn.write(b"exit\n") #输入exit退出

    50

    51

    52 # TODO:下载网页模块:

    53 class Dnld(): 54 def dnldevent(self, name, ip): 55 url = "http://" + ip + "/base/system/event_log.html" #制作url

    56 res = requests.get(url) #获取网页

    57 res.raise_for_status()

    58 EventFile = open(os.path.join("D:\\%s" % DirName, "%s" % name + "_eventlog.html"), 'wb') #新建html文件

    59 for chunk in res.iter_content(100000): #分片写入

    60 EventFile.write(chunk)

    61 EventFile.close()

    62 def dnldsys(self, name, ip): 63 url = "http://" + ip + "/base/system/systemInfo.html"

    64 res = requests.get(url) 65 res.raise_for_status()

    66 EventFile = open(os.path.join("D:\\%s" % DirName, "%s" % name + "systemInfo.html"), 'wb')

    67 for chunk in res.iter_content(100000):

    68 EventFile.write(chunk)

    69 EventFile.close()

    70

    71 # TODO:建立主程序,导入字典

    72 if __name__ == '__main__':

    73 confirm = input('请确认在非运营时段操作下载配置,确认请在下方输入"ok" \n')

    74 if confirm.lower() == 'ok':

    75 localtime = time.strftime("%Y%m%d%H%M", time.localtime()) #获取当前年月日时分

    76 DirName = localtime + "_dump" #生成文件夹名

    77 DirName2 = DirName #复式文件夹,为后面文件夹重名做容器

    78 Dic = [] #新建字典做ip地址容器

    79 i = 1

    80 while os.path.exists("D:\\%s" % DirName): #预防文件夹重名

    81 DirName = DirName2 + '_' + '%s' % i #末尾增加序号

    82 i += 1

    83 os.makedirs("D:\\%s" % DirName) # 新建文件夹

    84 f = open('IpAddress.txt', 'r') # IpAddress.txt中的url结尾不要有"/"

    85 for line in f.readlines(): 86 line = line.strip('\n') # 去掉换行符\n

    87 b = line.split(' ') # 将每一行以空格为分隔符转换成列表

    88 Dic.append(b) # 按行读取txt文件,然后转换成嵌套列表

    89 Dic = dict(Dic) # 通过dict方法将嵌套列表转换成字典

    90 else:

    91 exit() #未输入ok直接退出程序

    92

    93 # TODO:导入用户密码命令参数

    94 for k, v in Dic.items(): 95 host_ip = v 96 host_name = k 97 username = 'xxxxx'

    98 password = 'xxxxx'

    99 command = ['en', 'show running-config'] #命令列表

    100 #Respond = ['#'] #回应特征值,暂未用

    101 telnet_client = TelnetClient() 102 Download_web = Dnld() 103 if telnet_client.login_host(host_ip, username, password): 104 telnet_client.exec_command(command) 105 telnet_client.logout_host() 106 Download_web.dnldevent(host_name, host_ip) 107 Download_web.dnldsys(host_name, host_ip)

    ; "复制代码")

    后面是编译成exe,我使用的是Pyinstaller,使用pycharm安装编译器后就能在terminal上输入pyinstaller -F xxx.py编译成一个exe了,注意编译系统如果是64位的是不能放在32位系统上运行的。

    四、期间遇到如下问题:

    1、文件夹重名:本时间精确到分,故一分钟内重复运行os.makedirs会报文件已存在,故增加了文件夹存在的判断,若重名结尾递增数字。

    2、日志下载不完整:此问题主要是命令间给的反应时间不够导致,需要现场调试增加反应时间。同时增加了判断点,将配置末端的特征值作为判断,若不完整记录到errorlog里。

    3、网页下载若错误无记录:这点还在研究中,初步是换下顺序,先telnet连接,ok后下载网页。

    五、心得:

    这是我做的第一个相对实用性的脚本,的确是摸着石头过河,参考了网上大神的方案,遇到问题解决问题。最终还是要到现场实测才能验证功能的好坏,继续研究一些其他实用的脚本,做好自动化运维。

    展开全文
  • 1) 在一般情况下上传到服务器或者本地WEB目录双击IIS.exe后即可以运行查看。直接在浏览器中输入地址就可访问了。 2) 因自带的IIS迷你服务器不太好使用,最好是本地安装IIS查看。IIS6.0或者更高版本。
  • 开发者 ddev是一个开源工具,可让您在数分钟内启动并运行本地PHP开发环境,变得非常简单。 由于其每个项目的环境配置可扩展,版本控制和共享,因此它功能强大且灵活。... 查看来自Web和数据库容器的日志。 使用ddev
  • 阿赛文件上传系统 5.0 更新日志:2013年3月8日 修改无法插入已上传文件中除图片外的文件; 增加了可上传文件类别及大小提示。 功能介绍: 1、无组件图片上传,支持任意扩展名上传; 2、可以控制上传文件大小...
  • 码头工人 ... 参考 建立自己的合理 ...cd docker-ssp ...我们可以在配置文件config.inc.php添加以下选项,来进行调试日志输出跟踪: ldap_set_option ( NULL , LDAP_OPT_DEBUG_LEVEL , 7 ); 进入容器中,查看
  • git目录git是的优点与工作原理git定义git和svn的区别git与tortoiesgit的安装git的安装tortoiesgit的安装git的应用配置用户信息创建版本库提交文件到git版本库版本比较和查看日志删除文件共享版本库安装与使用共享...
  • 【console日志查看】 方便在端上查看每一个Weex文件中的console日志,提供分级和搜索功能; 【storage缓存查看】 将Weex中的storage模块的本地缓存数据可视化展示; 【容器信息】 查看每一个打开的Weex页面的基本...
  • 引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能 引入swagger文档支持,方便编写API接口文档 项目采用前后端分离架构,提升效率 前端组件丰富,集成layuiadmin,基本涵盖了所有...
  • Git 快速入门

    2020-03-22 17:14:40
    文章目录什么是Git?...查看日志6.查看提交记录7.从master分支push到github仓库8.回滚到上一步9.删除添加到暂存区的文件10.删除错误提交的commit11.git diff 什么是Git? Git 是一个开源的分布式版本控制系统...
  • 原文链接:点我 首先新司机接触 Git 和 Github 可能会搞不清楚两者之间的关系,这里稍微解释一下: 1.Git是一款免费、开源的分布式版本控制系统 2.Github是用Git做版本控制的代码托管平台 ...查看日志 ...
  • Git简介安装Git本地结构Git本地库操作本地库初始化 简介 Git 是一个开源的分布式版本控制系统 功能 (1)协同修改:多人可以同时...(5)历史记录:查看修改人、修改时间、修改内容、日志信息;将本地文件恢复到某一
  • Git常用命令

    2020-06-09 14:05:07
    文章目录Git常用命令1 本地用法1.1 初始化和配置git1.2 工作区-暂存区-本地库1.2.1 状态查看1.2.2 提交1.2.3 日志查看1.2.4 回撤1.2.5 文件比较1.3 分支branch2 Github与本地交互2.1 本地库联通GitHub2.2 创建远程库...
  • git应用

    2021-03-17 21:53:16
    git是开源分布式版本控制工具,分为两种类型的仓库:本地仓库和远程仓库。 二、常用命令 命令如下(示例): git init:初始化,创建 git 仓库 git status: 查看 git 状态 (文件是否进行了添加、提交操作) git add...
  • Git是一款开源的分布式版本控制工具,主要应用于“团队协作开发”;可以满足我们在开发中进行:“代码备份”,“版本控制”,“协同开发”,"代码追溯"等工作的需求。 官网下载地址: ...查看git提交日志 git
  • Rsync是一款开源的、快速的、多功能的、可...1 排错必备思想 1)部署流程步骤熟练 2)rsync原理理解 3)学会看日志,rsync命令行输出,日志文件/var/log/rsyncd.log2 排错思路2.1 rsync服务端排错思路 1)查看rsyn...
  • Rsync是一款开源的、快速的、多功能的、可实现全量...1排错必备思想1)部署流程步骤熟练2)rsync原理理解3)学会看日志,rsync命令行输出,日志文件/var/log/rsyncd.log2排错思路2.1 rsync服务端排错思路1)查看rsy...
  • Git 的常用功能简介

    2020-12-15 13:25:44
    git初始化仓库,添加文件,提交文件查看日志 历史版本切换(理解) 分支操作 远程仓库 Git是什么 Git是在2005年,Linux系统的创建者Linus Torvalds,为了帮助全球的开发者,维护Linux系统内核的开发 而开发了...
  • 望远镜-源码

    2021-02-21 10:45:30
    Telescope提供了对进入您的应用程序的请求,异常,日志条目,数据库查询,排队的作业,邮件,通知,缓存操作,计划任务,变量转储等的深入了解。 望远镜是您本地Laravel开发环境的绝佳伴侣。 官方文件 可在上找到望...
  • 都会生成一个日志文件,随着系统的运行,日志文件越来越多,占用了文件句柄数越来越多,触发了上面的异常,我觉得这个是日志的机制问题,在我看来, 要么去掉log,...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 130
精华内容 52
关键字:

本地日志文件查看开源