[运维技术]PowerShell中实现一个最基本的日志器logger

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: [运维技术]PowerShell中实现一个最基本的日志器logger

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


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]$log
    Logger([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] " + $s
        if ($this.log){
            $this.writeLog('DarkGreen',$msg)
        }
    }
    [void]Info($s){
        $msg = $this.getDataTime() + " [INFO] " + $s
        if ($this.log){
            $this.writeLog('Gray',$msg)
        }
    }
    [void]Debug($s){
        $msg = $this.getDataTime() + " [DEBUG] " + $s
        if ($this.log){
            $this.writeLog('DarkBlue',$msg)
        }
    }
    [void]Warn($s){
        $msg = $this.getDataTime() + " [WARN] " + $s
        if ($this.log){
            $this.writeLog('Yellow',$msg)
        }
    }
    [void]Error($s){
        $msg = $this.getDataTime() + " [ERROR] " + $s
        if ($this.log){
            $this.writeLog('Red',$msg)
        }
    }
    [void]Critical($s){
        $msg = $this.getDataTime() + " [CRITICAL] " + $s
        if ($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
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
存储 搜索推荐 大数据
阿里泛日志设计与实践问题之schema-on-read技术的发展对日志搜索的影响是啥,如何解决
阿里泛日志设计与实践问题之schema-on-read技术的发展对日志搜索的影响是啥,如何解决
|
4天前
|
运维 负载均衡 监控
提升系统性能:高效运维的秘密武器——负载均衡技术
在当今数字化时代,系统的高可用性和高性能成为各类企业和组织追求的目标。本文旨在探讨负载均衡技术在运维工作中的关键作用,通过深入分析其原理、类型及实际应用案例,揭示如何利用这项技术优化资源分配,提高系统的响应速度和可靠性,确保用户体验的稳定与流畅。无论是面对突如其来的高流量冲击,还是日常的运维管理,负载均衡都展现出了不可或缺的重要性,成为现代IT架构中的基石之一。
14 4
|
23天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
29 3
|
1月前
|
机器学习/深度学习 人工智能 运维
智能化运维:AI技术在IT管理中的创新应用
本文将探讨如何运用人工智能技术优化IT运维流程,提升效率并减少人为错误。我们将从智能监控、自动化响应到预测性维护等方面,分析AI在现代IT运维中的角色和价值。文章旨在为读者提供一种全新的视角,理解AI技术如何成为IT部门的强大盟友,并指出实施这些技术时可能遇到的挑战及应对策略。
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
2月前
|
运维 开发者 Docker
Docker容器化技术在运维中的应用实践
【8月更文挑战第27天】本文旨在探讨Docker容器化技术如何在现代运维工作中发挥核心作用,通过深入浅出的方式介绍Docker的基本概念、优势以及实际应用场景。文章将结合具体案例,展示如何利用Docker简化部署流程、提高资源利用率和加强应用的可移植性。读者将获得对Docker容器技术在实际运维中应用的全面认识,并能够理解其在提升运维效率与质量方面的重要性。
|
2月前
|
人工智能 运维 物联网
5G技术对网络运维的影响:挑战与机遇
【8月更文挑战第20天】5G技术对网络运维产生了深远影响,既带来了复杂性和挑战,也孕育了新的机遇和发展空间。通过积极应对挑战,抓住机遇,不断推进技术创新和应用实践,我们可以更好地利用5G技术的优势,提升网络运维的智能化水平,为数字经济的发展贡献力量。
|
2月前
|
存储 运维 监控
监控与日志管理:保障系统稳定运行与高效运维的基石
【8月更文挑战第16天】监控与日志管理是保障系统稳定运行和高效运维的基石。它们不仅能够帮助企业及时发现并解决问题,还能够为性能调优、资源优化和业务决策提供有力支持。因此,在构建系统架构时,企业应高度重视监控与日志管理的规划和实施,确保它们能够充分发挥作用,为企业的发展保驾护航。同时,随着技术的不断进步和应用场景的不断拓展,监控与日志管理也将持续演进和创新,为企业带来更多的价值和便利。
|
2月前
|
运维 分布式计算 DataWorks
DataWorks产品使用合集之运维中心中的运行日志可以保留多久
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
消息中间件 监控 搜索推荐
OpenFeign日志组件Logger原理与应用
该文章详细解释了如何在OpenFeign中配置并使用请求和响应的GZIP压缩功能。

热门文章

最新文章

下一篇
无影云桌面