PowerShell中实现一个最基本的日志器logger


李俊才 的 CSDN 博客
邮箱 :291148484@163.com
CSDN 主页https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
本文地址https://blog.csdn.net/qq_28550263/article/details/124024540

目 录


1. 场景介绍

2. 代码实现

3. 使用示例

  • 3.1 基本使用
  • 3.2 实例:检测网络情况,自动重启适配器并记录日志

1. 场景介绍

Powershell 是 IT 运维中绕不过去的一个语言,它不仅能在Windows中使用,同样也适用于Linux。对于运维人员来说,虽然不需要像后端开发人员一样制作日志器以记录大量的生产数据,但也同样存在记录某些运行过程的需求。

本文实现一个简单的Logger,但我们再运维中使用脚本自动化启停服务,测试系统运行状态,执行脚本时,可以通过该Logger方便地输出记录相应地信息,清晰地标注日志等级和记录发生的时间。

2. 代码实现

#*****************************************************************************
# Copyright Jack Lee. All rights reserved.
# Licensed under the MIT License.
# Email: 291148484@163.com
# https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
#*****************************************************************************class Logger {[string]$Lines[string]$SavePath[bool]$logLogger([string]$SavePath){$this.Lines = '';$this.log = $True;$this.SavePath = $SavePath;}Logger([string]$SavePath, [bool]$log){$this.Lines = '';$this.log = $log;$this.SavePath = $SavePath;}[string]getDataTime(){return  Get-Date -Format 'yyyy-MM-dd hh:mm:ss'}[void]writeLog($color,$logmessages){write-host -ForegroundColor $color $logmessages$logmessages >> $this.SavePath}[void]Trace($s){$msg = $this.getDataTime() + " [TRACE] " + $sif ($this.log){$this.writeLog('DarkGreen',$msg)}}[void]Info($s){$msg = $this.getDataTime() + " [INFO] " + $sif ($this.log){$this.writeLog('Gray',$msg)}}[void]Debug($s){$msg = $this.getDataTime() + " [DEBUG] " + $sif ($this.log){$this.writeLog('DarkBlue',$msg)}}[void]Warn($s){$msg = $this.getDataTime() + " [WARN] " + $sif ($this.log){$this.writeLog('Yellow',$msg)}}[void]Error($s){$msg = $this.getDataTime() + " [ERROR] " + $sif ($this.log){$this.writeLog('Red',$msg)}}[void]Critical($s){$msg = $this.getDataTime() + " [CRITICAL] " + $sif ($this.log){$this.writeLog('Magenta',$msg)}}
}

3. 使用示例

3.1 基本使用

【例】简单测试各个日志方法的使用,代码如下:

$SavePath = 'C:\Users\Administrator\Desktop\mylog.log';$logger = [Logger]::new($SavePath);
$logger.Trace('tracetracetrace')
$logger.Info('InfoInfoInfo')
$logger.Debug('debugdebugdebug')
$logger.Warn('warnwarnwarn')
$logger.Error('errorerrorerror')
$logger.Critical('criticalcriticalcritical')

其效果如图:

其中mylog.log是运行该ps1脚本后所生产的历史日志记录,使用 VSCode 等工具打开,可以看到高亮显示的输出日志如图所示:

注意:如果你想要像使用 bat 脚本那样运行 ps1 脚本,需要设置执行策略,你可以先使用Get-ExecutionPolicy查看你当前的执行策略:

Get-ExecutionPolicy

将执行策略设置为 Unrestricted 以直接运行ps1脚本:

Set-ExecutionPolicy Unrestricted

3.2 实例:检测网络情况,自动重启适配器并记录日志

【需求介绍】
Windows 系统上的网络适配器出现问题时,可能导致服务器与外界无法通信。有时,这种故障将会随着网络适配器的重启而解决。
手动打开 网络与贡献中心 => 高级网络配置

图:Windows Server 2016 网络适配器界面

图:Windows 11 网络适配器界面

你当然可以在这里手动点击 禁用(Disable),然后再手动点击 启用(Enable)。但是设想当一台服务器运行时,人工发现网络适配器故障需要重启比较缓慢,我们希望一旦电掉线则自动地重启某个网络适配器,以此减小由于网络适配器故障(假定每次重启后一定可以恢复)带来生产上更大的损失,这时我们可以考虑使用定时测试网络的方式。

  • 执行某次定时任务时,先尝试 Ping 某个正常情况下可以Ping 通的主机;
  • 若本次Ping测试顺利,则网络正常,无需重启网络适配器,日志记录测试成功,程序结束;
  • 若本次Ping测试失败,输出Ping失败到日志,尝试先禁用网络适配器;
  • 若网络适配器禁用成功,输出禁用成功到日志,并执行启用刚刚禁用的网络适配器;
  • 若网络适配器禁用失败,输出失败信息到日志,程序结束;
  • 若禁用成功且启用仍然成功,则重启网络适配器全过程顺利执行完成,程序结束。

【代码实现】

function Main(){$tracepath='C:\tmp\restart_jboss';$SavePath = "$tracepath\$env:COMPUTERNAME _restartNetAdapter.log";$logger = [Logger]::new($SavePath);$adapterName = 'Ethernet0 2'Ping www.baidu.com;if($?){$logger.Info('Pingִ Execution succeeded.')}else{$logger.Warn('Pingִ Execution failed, attempting to restore the network adapter.')$logger.Info('Disable NetAdapter...');Disable-NetAdapter -Name $adapterName;if($?){$logger.Info('The network adapter has been disabled');$logger.Info('Enable NetAdapter...');Enable-NetAdapter -Name $adapterName;if($?){$logger.Info('The network adapter is enabled.')}else{$logger.Critical('Failed to enable the network adapter, which requires manual processing.');}}else{}}
};Main

PowerShell中实现一个最基本的日志器logger相关推荐

  1. python读取多通道信号中的一个通道_RFID多通道读写器的具体应用

    RFID读写器通过无线射频识别,实现对RFID标签识别和内存数据的读出和写入操作.工作时,RFID读写器发出查询信号,RFID标签收到后,将信号的一部分能量用于标签内部工作电源,另一部分信号经过RFI ...

  2. Django 3 配置日志器,时区,修改静态文件,创建应用

    用于记录系统运行过程中的各种日志信息. 在项目根目录中创建一个logs文件夹,用于存放日志文件 # 在setting.py文件中加入如下配置: # 配置日志器,记录网站的日志信息 LOGGING = ...

  3. Activiti5第七弹,自己实现一个ProcessEngineConfiguration同时自定义拦截器

    首先是我自己定义的MyProcessEngineConfiguration的activiti.cfg.xml文件的内容 <?xml version="1.0"?> &l ...

  4. linux运行powershell,linux – 是否可以编写一个在bash / shell和PowerShell中运行的脚本?...

    我需要创建一个集成脚本来设置一些环境变量,使用wget下载文件并运行它. 挑战在于它需要是可以在Windows PowerShell和bash / shell上运行的SAME脚本. 这是shell脚本 ...

  5. 一个或多个筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到 29-Apr-2020 16:41:28.331 严重 [RMI TCP Connection(3)-127.0.0.1] org

    出现该问题最后尝试为打包没有jar包导致,在idea中file-project Structure-Artifacts,在web-inf中新建一个lib文件夹并把jar包导进去,亲测可用 记录...

  6. powershell提取html字段,Windows PowerShell:PowerShell 中的 HTML 报告

    Windows PowerShell:PowerShell 中的 HTML 报告 08/17/2016 本文内容 事实上,您可以使用 Microsoft Windows PowerShell Cmdl ...

  7. (8)Powershell中变量的定义和使用

    上一节介绍了Powershell中的算术运算符,详细内容参考这里,这些运算符主要用于字符串的连接,组成bool表达式等用于对管道中的命令执行结果进行筛选,我们将会后续的文章中讲到. 这一节主要介绍Po ...

  8. [原创][PowerShell教程][06]PowerShell中格式化命令和输出命令

    好久不见, 我又食言了, 一直没有更新教程, 我也不想找借口, 因为我花了很多时间跑去玩大蛇无双和魔王再临. 今天, 我将为您介绍如何使用格式化和输出命令. 在PowerShell中,负责进行格式化和 ...

  9. linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。

    I'm trying to run this at Windows PowerShell: 我試着在Windows PowerShell中運行它: svn ci -m "" dir ...

最新文章

  1. 微信小程序中的tabBar设置
  2. AD9288的介绍和使用
  3. mongodb 只查询某个字段
  4. 性能测试——美团国内机票网站(Badboy、JMeter)
  5. Server.Transfer()與Response.Redirect()的區別
  6. java web 之间通信,【Java】Web发展中通信的方式有哪些呢?
  7. 关于区块链技术的10本书
  8. Flask之flask-script 指定端口
  9. 【应用篇】WCF学习笔记(一):Host、Client、MetadataExchage
  10. 坑爹BUG,没有详细的看还真看不出问题
  11. XML 文档对象模型 (DOM)细说
  12. NRF24L01+模块:一对一双向通信,成功!
  13. 多实例下的定时任务如何避免重复执行——分布式定时任务
  14. android什么意思!读完我这份《Android开发核心源码精编解析》面试至少多要3K!面试建议
  15. java实现上位机与下位机串口通信
  16. Sprig的EL表达式和读取Properties文件教程
  17. dockerfile unknown instruction:jar
  18. 【 随笔 】 为什么要写技术文章
  19. 音视频互动平台应用分析
  20. HP CQ40安装XP详细步骤(刷BIOS)

热门文章

  1. 程序员面试金典——2.4链表分割
  2. 【递归】剑指offer——面试题19:二叉树的镜像
  3. symbol lookup error: undefined symbol:PySlice_Unpack
  4. CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...
  5. 09-js数组常用方法
  6. MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual..........
  7. Video 视频播放防作弊和禁止下载
  8. 三级联动(ajax)
  9. zoj1022 Parallel Expectations(DP)
  10. 【Vegas改编】发布infopath模板到sharepoint2007站点