ansible的logging模块用来写日志

[root@node-1 library]# cat dolog.py 
#!/bin/env python
ANSIBLE_METADATA =  { 'metadata_version': 'alpha',
            'status': ['preview'],
            'supported_by': 'lin.wang',
            'release_date': '2018-05-09'}
DEOCUMENTATION = """
---
module: dolog
version_added: "1.0"
short_descriptions: logging with log level
description: 
    - write the logs for doctor ,use "delegate_to: localhost" ,will write log at local logfile.
opetions:
  level:
    - [debug,info,warn,error,critical]
  host: "task inventory_hostname"
  message: "message info"
  path: logfile path|default("{{ logfile }}")
delegate_to: localhost 
cause log file be created at localhost 
"""
EXAMPLES = """
# Example from Ansible Playbooks
dolog:
  message: "xxxxxxxxx."
  path: "{{ logfile }}"
  host: "{{ hostname }}"
  format: "{{ LOGFMT }}"
delegate_to: localhost  
"""
import os
import time
import logging
from ansible.module_utils.basic import AnsibleModule
date = time.strftime("%Y-%m-%d",time.localtime())
DIS_LEVEL = "INFO"
def path_logfile(path=None):
    """
    default the log path is /tmp/escloud-2018-*
    """
    if not path:
          filename = 'escloud-%s.log'%date
        path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        path = '%s%s%s'%(path,os.sep,filename)
    if not os.path.exists(path):
        os.popen('touch %s'%path)
    return path

def get_logger(logpath=None):
    ret = logging.getLogger()
    fh = logging.FileHandler(logpath)
    fm = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
    fh.setFormatter(fm)
    ret.addHandler(fh)
    return ret

def main():
    module = AnsibleModule(
        argument_spec = dict(
        message = dict(required=True, type='str'),
        level = dict(choice=['debug','info','warn','error','critical'], required=False, default='warn', type='str'),
        path = dict(aliases=['dest', 'name'], required=False, type='path'),
        host = dict(required=False, type='str'),
        format = dict(choice=['txt','html'], required=False, default='txt', type='str'),
        )
    )

    params = module.params
    loglevel = params['level'] 
    host = params['host']
    message = params['message']
    fmt = params['format']

    if params['path']:        #if path is none then call function path_logfile() getout tmppath
        path = params['path']
    else:
        path = path_logfile()

    logger = get_logger(path)

    logger.setLevel(DIS_LEVEL)

    if fmt == "txt":
       messages = "%s\t%s"%(host,params['message'])
    elif fmt == "html":
       messages = "%s\t%s<br />"%(host,params['message'])

    displaymsg = getattr(logger,loglevel)
    displaymsg('%s'%messages)

    #result = dict(changded=True)
    return module.exit_json(changed=True)
    #return module.exit_json(**result)
if __name__ == '__main__':
    main()

 

posted @ 2018-05-10 15:17  ishmaelwanglin  阅读(3304)  评论(0编辑  收藏  举报