使用 logger 在脚本中输出多个日志

最近在写一个小工具的时候,在某个脚本中需要为不同对象,输出单独的属于该对象的日志文件,方便查看。

通常在写 python 脚本的时候,习惯使用 logging 模块来输出日志,简单,方便。

#!/usr/bin/env python
# coding: utf-8

__author__ = "Glon Ho"

import logging


log_file = '/tmp/logging_test.log'

logging.basicConfig(level=logging.INFO,
        format='%(asctime)s %(levelname)s %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
        filename=log_file,
        filemode='a')

msg = 'Hi, this is Glon.'
logging.info('>>> test log msg: %s', msg)

---

Out:

[root@localhost]$ cat /tmp/logging_test.log
2017-03-03 17:53:08 INFO >>> test log msg: Hi, this is Glon.

但在这个需求中,如果使用 logging 模块通过复杂配置来实现的话,未免显得麻烦。

但是在查阅 logging 模块文档的时候,发现有一个 logger 的对象。写日志是针对对象来写的,如果有多个对象,那么应该就可以实现。

#!/usr/bin/env python
# coding: utf-8

__author__ = "Glon Ho"

import logging


def get_logger(logger_name, log_file, level=logging.INFO):
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter('%(asctime)s : %(message)s', "%Y-%m-%d %H:%M:%S")
    fileHandler = logging.FileHandler(log_file, mode='a')
    fileHandler.setFormatter(formatter)

    l.setLevel(level)
    l.addHandler(fileHandler)

    return logging.getLogger(logger_name)


if __name__ == '__main__':

    log_file1='/tmp/logger_test1.log'
    log_file2='/tmp/logger_test2.log'
    
    logger1 = get_logger('Glon', log_file1)
    logger2 = get_logger('GlonHo', log_file2)

    logger1.info('>>> test1 log msg: %s', "111111111111111111111")
    logger2.info('>>> test2 log msg: %s', "222222222222222222222")

---

Out:

[root@localhost]$ ls /tmp/logger_test*
/tmp/logger_test1.log  /tmp/logger_test2.log
[root@localhost]$ 
[root@localhost]$ cat /tmp/logger_test1.log 
2017-03-03 17:57:20 : >>> test1 log msg: 111111111111111111111
[root@localhost]$ 
[root@localhost]$ cat /tmp/logger_test2.log 
2017-03-03 17:57:20 : >>> test2 log msg: 222222222222222222222

注意

在通过 get_logger 来得到日志对象的时候,给定的对象名称不能相同,否则产生的是同一个日志对象。

如上面变成这样

    logger1 = get_logger('Glon', log_file1)
    logger2 = get_logger('Glon', log_file2)

    logger1.info('>>> test1 log msg: %s', "111111111111111111111")
    logger2.info('>>> test2 log msg: %s', "222222222222222222222")

运行程序时不会出错,但输出:

---

Out:

[root@localhost]$ ls /tmp/logger_test*
/tmp/logger_test1.log  /tmp/logger_test2.log
[root@localhost]$ 
[root@localhost]$ cat /tmp/logger_test1.log 
2017-03-03 17:59:41 : >>> test1 log msg: 111111111111111111111
2017-03-03 17:59:41 : >>> test2 log msg: 22222222222222222222
[root@localhost]$ 
[root@localhost]$ cat /tmp/logger_test2.log 
2017-03-03 17:59:41 : >>> test1 log msg: 111111111111111111111
2017-03-03 17:59:41 : >>> test2 log msg: 222222222222222222222

参考:

logging:https://docs.python.org/2/library/logging.html

中文译本:http://pythonguidecn.readthedocs.io/zh/latest/writing/logging.html

Loggers:https://docs.python.org/2/howto/logging.html#loggers

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 `udev` 这个 Linux 的用户空间设备管理工具来监控串口被连接并触发脚本。 首先,你需要在 `/etc/udev/rules.d` 目录下创建一个新的规则文件,然后按照以下格式编写你的规则: ``` ACTION=="add", KERNEL=="ttyUSB*", RUN+="/path/to/your/script.sh" ``` 其 `ttyUSB*` 是你的串口设备的名称,`/path/to/your/script.sh` 是你要触发的脚本的路径。 然后你可以使用 `udevadm control --reload-rules` 命令来重新加载规则,此时当你连接串口设备时,你的脚本就会被触发执行。 ### 回答2: 使用shell脚本监控调试串口连接的方法是通过读取系统的串口设备文件来实现。首先,可以使用`ls /dev/ttyUSB*`命令来查找系统是否存在调试串口设备,如果返回结果不为空,说明调试串口已经连接。接下来,可以在脚本添加一个循环,不断执行该命令检测串口连接状态。当串口连接成功时,可以设置一个标志位来触发相应的脚本。例如: ```shell #!/bin/bash while true; do result=$(ls /dev/ttyUSB*) if [[ ! -z "$result" ]]; then # 串口已连接,触发脚本 # 在此添加你的脚本逻辑 echo "调试串口已连接" # 退出循环,避免持续检测 break fi sleep 1s done ``` 上述脚本会不断执行`ls /dev/ttyUSB*`命令来检测串口设备是否存在,当串口连接成功时,会输出"调试串口已连接"并退出循环。你可以在`# 在此添加你的脚本逻辑`处添加你希望执行的脚本代码,根据实际需求进行调试或其他操作。 注意,该脚本是一个简单的示例,你可以根据实际需求对其进行扩展和修改,例如增加对其他串口设备的检测等。 ### 回答3: 使用shell脚本监控调试串口被连接可以通过以下步骤实现: 首先,需要编写一个shell脚本来监控串口的连接情况。可以使用Linux系统提供的udev服务来检测串口的插拔事件。在脚本使用udev监控器(udev monitor)来监听串口设备的状态变化。 在脚本创建一个udev规则文件,定义需要监控的串口设备。在规则文件设置SUBSYSTEMS=="tty"以及其他相关的属性过滤条件,以便只监控串口设备。当有新的串口设备插入时,udev服务会自动执行该规则文件指定的脚本。 在脚本使用inotify工具来监控udev服务输出日志文件,以获取串口设备的连接和断开信息。通过inotifywait命令,可以实时监控udev服务输出日志文件的变化,一旦有新的日志内容产生,即可触发脚本执行相关操作。 脚本执行相关操作可以是发送通知、记录日志、执行其他脚本等。根据需求可以自定义具体的操作。例如,可以使用mail命令发送邮件通知管理员有新的串口设备已连接,或者使用logger命令将日志写入系统日志文件。 为了使脚本可以持续运行,可以使用无限循环(while true)的方式,不断监控串口设备的连接情况。 需要注意的是,使用udev监控器和inotify工具需要先安装相应的软件包,例如udev和inotify-tools。具体的安装方法可以根据所使用的Linux发行版进行查找。 综上所述,以上是使用shell脚本监控调试串口被连接的基本思路和步骤,通过编写脚本并利用udev监控器和inotify工具,可以实现串口连接状态的实时监控和相应操作的触发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值