Xshell 是方便好用的ssh管理软件,在重装操作系统时,之前的会话不想重复配置一遍,需要保存当前的会话配置,在新系统下运行,本文记录方案。...原理 会话都是 Xshell 存下来的配置文件,只需要备份文件,放在新软件配置文件的位置即可。...会话配置文件 配置文件路径: 文档 -> NetSarang Computer -> 7 -> Xshell -> Sessions 将会话文件保存,在新软件中复制过去即可 注意:复用配置会话时密码会置空
最近服务器总是重启,导致实验中断,同时运行多个实验,tmux包括运行的命令全部消失,重新恢复又要不少时间,所以配置了一下tmux自动保存以及恢复。...# 进入相应位置 cd ~/.tmux/plugins # 下载插件 git clone https://github.com/tmux-plugins/tmux-resurrect.git # 保存...tmux会话到disk git clone https://github.com/tmux-plugins/tmux-continuum.git # 定时保存,自动加载 在~/.tmux.conf中配置...run -b '~/.tmux/plugins/tpm/tpm' 重载配置文件使之生效 tmux source-file ~/.tmux.conf 手动保存以及恢复 保存会话 CTRL+b + CTRL...+s 保存到~/.tmux/resurrect目录 加载会话 CTRL+b + CTRL+r
前言 为什么要保存会话呢?举个很简单的场景,你在上海测试某个功能接口的时候,发现了一个BUG,而开发这个接口的开发人员是北京的一家合作公司。...一、保存为文本 1.以博客园登录为例,抓到登录的请求会话 2.点左上角File>Save>Selected Sessions>as Text,保存到电脑上就是文本格式的 ?...二、几种保存方式 1.save-All Sessions :保存所有的会话,saz文件 2.save-Selected Session:保存选中的会话 --in ArchiveZIP :保存为saz文件...2.遇到这种情况,主要是需要解码,用前面学到的decode方法 ? 3.点击箭头区域后,重新保存就没乱码了。 4.还有一个最简单办法就是选中上图会话框上的decode按钮,这样就自动解码了。...四、保存与导入全部会话 1.我们可以打开fiddler,操作完博客园后,选中save>All Sessions,保存全部会话 2.保存后,在fiddler打开也很方便,直接把刚才保存的会话按住拽进来就可以了
前言 在一些实际开发场景中,我们在使用 Selenium 做自动化测试时需要保留用户的会话信息,从而避免重复登录,今天这篇文章就带大家实战如何使用 Selenium 保存会话信息。...版本 Python 3.x 整体思路 当我们打开页面时,检测会话信息文件是否存在,如果存在直接加载会话信息,如果不存在,则进行登录并保存会话信息到本地文件中。...实践 当我们第一次打开页面时,登录并保存会话信息。...保存到名为"cookies.pkl"的文件中 pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb")) # 关闭 driver driver.close...("cookies.pkl", "rb")) for cookie in cookies: driver.add_cookie(cookie) 除此之外,如果你访问的目标页面为一级域名,而保存的
序 本文主要研究一下golang的zap的WriteSyncer WriteSyncer zap@v1.16.0/zapcore/write_syncer.go type WriteSyncer interface...;Lock方法用于创建lockedWriteSyncer multiWriteSyncer zap@v1.16.0/zapcore/write_syncer.go type multiWriteSyncer...Sync方法会遍历multiWriteSyncer,挨个执行w.Sync(),然后会用multierr.Append(writeErr, err)来包装err;NewMultiWriteSyncer方法用于创建...zap.Open先通过newSink创建fileSink的zapcore.WriteSyncer,再通过CombineWriteSyncers将这些fileSink包装为带锁的multiWriteSyncer...doc zap
序 本文主要研究一下golang的zap的CheckedEntry Entry zap@v1.16.0/zapcore/entry.go type Entry struct { Level...ce = getCheckedEntry() ce.Entry = ent } ce.should = should return ce } Should用于更新...CheckedEntry的CheckWriteAction _cePool zap@v1.16.0/zapcore/entry.go var ( _cePool = sync.Pool{New:...添加core,其Write会遍历cores挨个执行core的Write方法,其reset方法用于在从pool中取出CheckedEntry时重置其属性。...doc zap
序 本文主要研究一下golang的zap的NewExample 91573_bust=0-Logging Request Bodies For Golang REST APIs-true.png NewExample...为JSONEncoder,WriteSyncer使用的是os.Stdout,LevelEnabler使用的是DebugLevel;使用的JSONEncoder的zapcore.EncoderConfig...还会以非json的形式(普通堆栈形式)打印stacktrace 实例 func exampleDemo() { logger := zap.NewExample() defer logger.Sync...() /zap_demo.go:10 +0x25 exit status 2 小结 NewExample使用通过core来创建Logger,其中core使用的Encoder为JSONEncoder...doc zap
序 本文主要研究一下golang的zap的NewTee java-streams-1.png NewTee zap@v1.16.0/zapcore/tee.go type multiCore []Core...return cores[0] default: return multiCore(cores) } } NewTee方法根据cores个数来返回不同的Core...mc[i].Sync()) } return err } multiCore提供了With、Enabled、Check、Write、Sync方法,它们都是遍历multiCore执行对应的操作...()), zapcore.Lock(os.Stdout), zap.InfoLevel), ) logger := zap.New(teeCore) logger.Info("hello...doc zap
序 本文主要研究一下golang的zap的Sink OIP - 2020-12-22T232221.489.jpeg Sink zap@v1.16.0/sink.go type Sink interface...,如果scheme为空则默认为file,然后从_sinkFactories找到对应的factory,创建sink返回 open zap@v1.16.0/writer.go func Open(paths...来注册一个mq的sink factory,然后通过zap.Open来创建MqWriteSyncer;MqWriteSyncer实现了zapcore.WriteSyncer的Write、Sync方法,同时也实现了...Sink的Close方法 小结 Sink接口内嵌了zapcore.WriteSyncer(Write、Sync)、io.Closer(Close)接口;zap.RegisterSink用于注册指定scheme...的sink factory,而zap.Open则会解析url来找到对应的sink factory创建对应的sink,即writer。
序 本文主要研究一下golang的zap的ZapKafkaWriter OIP (99).jpeg ZapKafkaWriter package logger import ( "errors..." "sync" "sync/atomic" "syscall" ) // ZapKafkaWriter is a zap WriteSyncer (io.Writer) that...doc zap zap_writer
序 本文主要研究一下golang的zap的level Level zap@v1.16.0/zapcore/level.go // A Level is a logging priority....是否大于等于core的level,如果满足条件才执行c.core.Check(ent, ce),否则直接返回 IncreaseLevel zap@v1.16.0/options.go func IncreaseLevel...,它包装了原来的core,并设置了zapcore.LevelEnabler 实例 func levelDemo() { logger, err := zap.NewDevelopment()...)判断entry的level是否大于等于core的level,如果满足条件才执行c.core.Check(ent, ce),否则直接返回。...doc zap
序 本文主要研究一下golang的zap的Sink Sink zap@v1.16.0/sink.go type Sink interface { zapcore.WriteSyncer...,如果scheme为空则默认为file,然后从_sinkFactories找到对应的factory,创建sink返回 open zap@v1.16.0/writer.go func Open(paths...来注册一个mq的sink factory,然后通过zap.Open来创建MqWriteSyncer;MqWriteSyncer实现了zapcore.WriteSyncer的Write、Sync方法,同时也实现了...Sink的Close方法 小结 Sink接口内嵌了zapcore.WriteSyncer(Write、Sync)、io.Closer(Close)接口;zap.RegisterSink用于注册指定scheme...的sink factory,而zap.Open则会解析url来找到对应的sink factory创建对应的sink,即writer。
序 本文主要研究一下golang的zap的hook image1.png 实例 func hookDemo() { count := &atomic.Int64{} logger,..._ := zap.NewProduction(zap.Hooks(func(entry zapcore.Entry) error { fmt.Println("count:", count.Inc...: 1 msg: failed to fetch URL {"level":"info","ts":1608045721.769826,"caller":"zap/zap_demo.go:35","msg...,然后在Write的时候就可以执行到自己注册的hooks。...一般可以将metrics等简单的操作通过hook来实现,而复杂的逻辑则最好通过实现zapcore.Core来做。 doc zap
序 本文主要研究一下golang的zap的hook 实例 func hookDemo() { count := &atomic.Int64{} logger, _ := zap.NewProduction...: 1 msg: failed to fetch URL {"level":"info","ts":1608045721.769826,"caller":"zap/zap_demo.go:35","msg...使用zapcore.RegisterHooks包装了一下;RegisterHooks方法创建hooked,hooks赋值给hooked的funcs属性;hooked包装了core,因而需要在Check的时候把自己注册进去...,然后在Write的时候就可以执行到自己注册的hooks。...一般可以将metrics等简单的操作通过hook来实现,而复杂的逻辑则最好通过实现zapcore.Core来做。 doc zap
序 本文主要研究一下golang的zap的SugaredLogger SugaredLogger zap@v1.16.0/sugar.go type SugaredLogger struct {...),另外还有带f的支持format,带w的方法则支持with键值对 level zap@v1.16.0/level.go const ( // DebugLevel logs are typically...FatalLevel = zapcore.FatalLevel ) zap内部的level分为debug、info、warn、error、dpanic、panic、fatal这几种 DPanic DPanic...panic效果类似,最后的info不会被输出 DPanic in production func dpanicInProduction() { logger, _ := zap.NewProduction...、fatal这几种方法(使用fmt.Sprint的默认格式),另外还有带f的支持format,带w的方法则支持with键值对 DPanic在development下的效果跟panic效果类似,在非development
序 本文主要研究一下golang的zap的SugaredLogger using-apache-kafka-from-go-23-638.jpg SugaredLogger zap@v1.16.0/...),另外还有带f的支持format,带w的方法则支持with键值对 level zap@v1.16.0/level.go const ( // DebugLevel logs are typically...FatalLevel = zapcore.FatalLevel ) zap内部的level分为debug、info、warn、error、dpanic、panic、fatal这几种 DPanic...panic效果类似,最后的info不会被输出 DPanic in production func dpanicInProduction() { logger, _ := zap.NewProduction...、fatal这几种方法(使用fmt.Sprint的默认格式),另外还有带f的支持format,带w的方法则支持with键值对 DPanic在development下的效果跟panic效果类似,在非development
序 本文主要研究一下golang的zap的zapgrpc OIP (100).jpeg zapgrpc zap@v1.16.0/zapgrpc/zapgrpc.go package zapgrpc...// import "go.uber.org/zap/zapgrpc" import "go.uber.org/zap" // An Option overrides a Logger's default...(l *Logger) Println(args ...interface{}) { l.print(l.log, args...) } zapgrpc提供了对grpclog.Logger的适配...(zapLogger, opts...), ), ) } 小结 zapgrpc提供了对grpclog.Logger的适配,NewLogger将zap.Logger适配为zapgrpc.Logger...doc zap logging/zap
序 本文主要研究一下golang的zap的marshaler ObjectMarshaler zap@v1.16.0/zapcore/marshaler.go type ObjectMarshaler...OpenNamespace(key string) } ObjectEncoder的AddArray方法需要ArrayMarshaler参数,AddObject方法需要ObjectMarshaler参数...;Users类型实现了MarshalLogArray方法;之后在logger添加Field的时候,就可以使用zap.Object或者zap.Array方法 输出 {"level":"info","ts"...的marshaler定义了ObjectMarshaler(MarshalLogObject)及ArrayMarshaler(MarshalLogArray)接口;在logger若想使用zap.Object...或者zap.Array方法就要求对应的类型实现对应的接口。
序 本文主要研究一下golang的zap的ZapKafkaWriter ZapKafkaWriter package logger import ( "errors" "sync"..."sync/atomic" "syscall" ) // ZapKafkaWriter is a zap WriteSyncer (io.Writer) that writes messages...doc zap zap_writer
序 本文主要研究一下golang的zap的encoder OIP - 2020-12-18T013420.291.jpeg encoder zap@v1.16.0/zapcore/encoder.go...OpenNamespace(key string) } ObjectEncoder接口定义了各种类型的一系列Add方法 MapObjectEncoder zap@v1.16.0/zapcore/memory_encoder.go...,然后将原enc的buf拷贝到clone的encoder EncodeEntry zap@v1.16.0/zapcore/json_encoder.go func (enc *jsonEncoder...进行注册,之后创建logger的时候设置Config的Encoding就可以根据指定的name找到对应的方法进行创建 小结 Encoder接口内嵌了ObjectEncoder,定义了Clone、EncodeEntry...doc zap
领取专属 10元无门槛券
手把手带您无忧上云