Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将完全异常写入日志文件_Linux_Shell_Unix_Terminal_Sh - Fatal编程技术网

Linux 将完全异常写入日志文件

Linux 将完全异常写入日志文件,linux,shell,unix,terminal,sh,Linux,Shell,Unix,Terminal,Sh,我有一个shell脚本文件和命令行: mkdir test 当我执行shell脚本文件时,将创建测试文件夹。 第二次执行相同的shell脚本文件时,它抛出错误“已存在测试文件夹” 需要: 在这种情况下,我需要创建一个日志文件,并在日志文件中写入确切的异常。首先,要创建一个日志文件: import logging logging.basicConfig(filename='example.log',level=logging.DEBUG) 对于,您可以执行以下操作: try: # yo

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

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

需要


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

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

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")

它会将所有回溯放在日志文件中,这样您就可以首先查看错误,以便创建日志文件:

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")
它会将所有回溯放在日志文件中,这样您就可以查看错误了,只需执行以下操作:-

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测试
失败,O/S会将输出重定向到
标准错误
。在这种情况下,它不会存储在
日志缓冲区
变量中。为了存储输出,我们需要将标准错误重定向到
standard-output
,而
2>&1
正是这样做的

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

只需执行以下操作:-

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测试
失败,O/S会将输出重定向到
标准错误
。在这种情况下,它不会存储在
日志缓冲区
变量中。为了存储输出,我们需要将标准错误重定向到
standard-output
,而
2>&1
正是这样做的


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

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

#!/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目录文件不是磁盘文件,它们在重新启动时不存在。

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

#!/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目录文件不是磁盘文件,它们在重新启动时不存在。

谢谢您的快速回复。我需要动态异常而不是硬代码值。可能吗?@Mano,是的,可能。我修改了我的计划answer@Mano,请试一下我的例子,让我知道它是否工作。@Abhijit很棒。它工作得很好,而且有详细的解释。@Abhijit这里还有一个疑问。这是一个步骤,所以按这种方式处理。当我使用更多命令行时,那怎么处理呢?谢谢你的快速回复。我需要动态异常而不是硬代码值。可能吗?@Mano,是的,可能。我修改了我的计划answer@Mano,请试一下我的例子,让我知道它是否工作。@Abhijit很棒。它工作得很好,而且有详细的解释。@Abhijit这里还有一个疑问。这是一个步骤,所以按这种方式处理。当我使用更多的命令行时,如何处理它?