【问题标题】:Write a exact exception to log file将确切的异常写入日志文件
【发布时间】:2018-09-04 13:33:18
【问题描述】:

我有一个 shell 脚本 文件和命令行是:

mkdir test

当我执行 shell 脚本文件时,会创建测试文件夹。 第二次执行相同的 shell 脚本文件并抛出错误“已经存在测试文件夹”。

需要

在这种情况下,我需要创建一个日志文件并将确切的异常写入日志文件。

【问题讨论】:

    标签: linux shell unix terminal sh


    【解决方案1】:

    只需执行以下操作:-

    log_buffer=$(mkdir test 2>&1)
    #you can put any command under $()
    if [ $? -ne 0 ]; then
       echo "$log_buffer" >> log.txt
    fi
    

    首先这里的2>&1 是什么?通常如果mkdir test 失败,输出将被操作系统重定向到standard error。在这种情况下,它不会存储在log_buffer 变量中。要存储输出,我们需要将标准错误重定向到 standard ouput2>&1 完全相同

    现在$? 是什么。执行 shell 命令后,命令的返回状态存储在 $? 变量中。如果命令在 Unix 中成功执行,则存储在 $? 中的值是 0,如果失败,它将是基于该程序退出状态的其他数字/值。希望这会有所帮助。

    【讨论】:

    • 感谢您的快速回复。我需要动态异常而不是硬代码值。可能吗?
    • @Mano,是的,这是可能的。我修改了答案
    • @Mano,试试我的例子,让我知道是否有效。
    • @Abhijit-Awesome 。它的工作完美且详细的解释。
    • @Abhijit-这里还有一个疑问。这是一个步骤,所以这样处理。当我使用更多命令行时,如何处理呢?
    【解决方案2】:

    首先,为了创建一个日志文件:

    import logging
    logging.basicConfig(filename='example.log',level=logging.DEBUG)
    

    你可以这样做:

    try:
        # your logic goes here
    except Exception e:
        logging.exception("Full traceback of your error")
    

    它将所有的回溯放在日志文件中,以便您能够探索错误

    【讨论】:

      【解决方案3】:

      尝试将确切的错误记录到日志文件中

      #!/bin/sh
      
      temp_file=$(mktemp)
      
      mkdir test 2>$temp_file
      if [ $? -ne 0 ]; then
              echo $(cat $temp_file) >> log.txt
              rm -f $temp_file
      fi
      

      mktemp 命令在 /tmp 目录中创建一个临时文件。 /tmp 目录文件不是磁盘文件,它们在重新启动后不存在。

      【讨论】:

        猜你喜欢
        • 2014-12-13
        • 2022-11-14
        • 1970-01-01
        • 2012-09-23
        • 2015-06-04
        • 2012-04-06
        • 2012-03-10
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多