精华内容
下载资源
问答
  • 如何写日志

    2017-05-18 20:16:00
    在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方。写好程序的日志可以帮助我们大大减轻后期维护压力。 在实际的工作中,开发人员往往迫于的巨大时间压力,而写日志又是一个非常繁琐的事情,往往没有...

    在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方。写好程序的日志可以帮助我们大大减轻后期维护压力。

    在实际的工作中,开发人员往往迫于的巨大时间压力,而写日志又是一个非常繁琐的事情,往往没有引起足够的重视。

    如果我们的开发人员在一开始就养成一个良好的习惯将非常有帮助。并且在实际的工作中也应当为写日志预留足够的时间。

     

     

     

     

    我们为什要写日志呢?

    一般来讲,我们在程序中记录日志出自下面几个方面的需求。

     

    * 记录用户操作的审计日志,甚至有的时候就是监管部门的要求。

    * 快速定位问题的根源,

    * 追踪程序执行的过程

    * 追踪数据的变化

    * 数据统计和性能分析

    * 采集运行环境数据

     

    多数情况下,在我们的程序上线(Go Live)之后,一旦发生异常,我们要做的第一件事就是要弄清楚当时倒底发生了什么,

    例如:用户当时做了什么操作,环境有无异常,数据有什么变化,是不是反复发生,等等。

    然后再进一步的确定大致是哪个方面的问题。 确定是程序的问题之后再交由开发人员去重现,研究,提出解决方案。

     

    这个时候日志就给我们提供了第一手的资料。

     

    在生产环境和测试环境分开的情况下,在开发人员拿到日志的时候离问题发生已经过去很长时间。

    所以清晰详尽的日志信息对于我们迅速定位问题根源就显得非常重要。它既是我们找寻原因的地图,也是最直接的证据。

    对于稍大一点的系统来讲,做维护的人员和开发者通常都不是同一组人,这个过程所花费的时间和人力要远远超过开发本身数倍甚至数十倍。

     

    都有哪些人要看日志?

    正如前面所讲,产品支持,运维人员,开发人员,测试人员都需要查看日志。当然自己也是要看的。

     

    写日志有些什么要求?

    上面需求对我们在程序中记录日志提出了一定的要求:

     

    * 日志的可读性

    日志是给人读的,不仅仅是让自己明白同时也要让没有接触过我们源代码的其他程序员也能够一目了然。

    我常常见到很多同事在日志中打印特殊的标识符号,例如 “+++++++++++”,“--------------”和“==============”,这些符号往往让人眼花缭乱。他们的本意也仅仅是在自己调试的时候能一眼就发现这是自己的日志。既然如此,把自己名字写入日志中岂不是更明确?

    把日志分类输出到不同的文件中也有利于我们排除干扰,迅速找到我们需要的信息。

     

    * 日志的性能

    无论我们把日志写到文件还是数据库,都需要消耗IO资源。适当的控制日志的输出也有利于提高程序的性能。例如:

    尽量避免在在大的循环中打印意义不大的日志内容。

    输出日志之前最好能判断日志的级别(例如. debug前先调用isDebugEnabled()作出判断)。 

    * 占用的磁盘空间

    通常,我们都是把日志写入磁盘上的日志文件中。适当的使用滚动日志并且定时清除旧文件是有好处的。

    我见过这样一个例子,程序运行几次后就跑不起来了,前几次都是正常的。怎么都想不明白程序有什么问题,最后才发现居然是日志文件占满了磁盘空间。

    在实际的应用中出现上G的日志文件也往往不少见。要在这样规模的日志文件中找出对解决问题有用的信息也是一大挑战。

     

    * 日志的时效性

    有的时候我们并不能及时的发现问题。需要追溯之前的日志。所以我们是需要保留一段时间以内的日志便于追溯。

     

    * 日志的级别

    通常我们在产品环境中日志的级别都在INFO以上,所以我们必须保证在这样的情况下程序仍然能够输出足够我们作出判断的信息。

     

    * 日志的内容

    我们在写日志的时候,需要注意输出适当的内容。

    首先,尽量使用业务相关的描述。我们的程序是实现某种业务的,那么就最好能描述清楚这个时候走到了业务过程的哪一步。

    其次,避免在日志中输出一些敏感信息,例如用户名和密码。

    以及,要保持编码的一致。如果不能保证就尽量使用英文而不是中文。这样当我们拿到日志之后就不会因为看到一堆乱码而不知所云了。

     

    怎么样写出好的日志来?

    其实写好日志并不难,只要我们能在写代码的时候能体会到后面的维护工作的压力和艰辛,多点关注和理解就一定能做好这件事。

    文章转载自 http://www.cnblogs.com/sentakee/p/5630466.html

    转载于:https://www.cnblogs.com/zyjfire/p/6875384.html

    展开全文
  • 一日一技:更优雅地在 Python 中写日志摄影:产品经理买单:kingname原来我们在 Python 中写日志,使用的是 Python 自带的 logging 模块,要实现既在终端输出,又能写文件,并且日志文件还能 rotate ,代码需要十...

    一日一技:更优雅地在 Python 中写日志

    摄影:产品经理

    买单:kingname

    原来我们在 Python 中写日志,使用的是 Python 自带的 logging 模块,要实现既在终端输出,又能写文件,并且日志文件还能 rotate ,代码需要十多行:

    import logging

    from logging.handlers import RotatingFileHandler

    os.makedirs('Logs', exists_ok=True)

    logger = logging.getLogger('Robot')

    handler = logging.StreamHandler()

    handler.setLevel(logging.DEBUG)

    file_handler = RotatingFileHandler(os.path.join('Logs', 'robot.log'),

    maxBytes=5 * 1024 * 1024,

    backupCount=10,

    encoding='utf-8')

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    handler.setFormatter(formatter)

    file_handler.setFormatter(formatter)

    logger.addHandler(handler)

    logger.addHandler(file_handler)

    logger.setLevel(logging.DEBUG)

    logger.info('终于可以写日志了...')

    那有没有什么简单好用,for human的写日志方案呢?

    当然有,那就是使用loguru[1]这个模块。

    它有多好用呢?我们用一段代码来演示:

    from loguru import logger

    logger.add('logs/z_project.log',

    level='DEBUG',

    format='{time:YYYY-MM-DD HH:mm:ss} - {level} - {file} - {line} - {message}',

    rotation="10 MB")

    logger.info('可以写日志了')

    不需要提前创建文件夹。不需要设置奇奇怪怪的handler。

    甚至你可以直接把它当做装饰器使用,当一个函数报错的时候,自动记录日志:

    from loguru import logger

    @logger.catch

    def test():

    'a' + 1

    函数报错时,自动记录报错信息到日志中。

    他记录的报错信息有多准确呢?我们来看这个图:

    每个变量的值都给你标出来了。

    使用 loguru 也只需要定义一次格式。只需要在入口文件定义好格式,在同一个项目中的其他文件中,直接

    from loguru import logger

    logger.info('可以用了')

    参考资料

    展开全文
  • nginx如何写日志

    2015-06-19 15:36:00
    写日志函数为ngx_log_error_core,位于src/core/ngx_log.c:89行核心代码如下:while (log) { if (log->log_level < level && !debug_connection) { break; } (void) ngx_write_fd(log-...

    写日志函数为ngx_log_error_core,位于src/core/ngx_log.c:89行
    核心代码如下:
    while (log) {

            if (log->log_level < level && !debug_connection) {
                break;
            }

            (void) ngx_write_fd(log->file->fd, errstr, p - errstr);

            if (log->file->fd == ngx_stderr) {
                wrote_stderr = 1;
            }

            log = log->next;
        }

    其中ngx_write_fd为
    static ngx_inline ssize_t
    ngx_write_fd(ngx_fd_t fd, void *buf, size_t n)
    {
        return write(fd, buf, n);
    }

    即nginx中写日志是没有作什么特别的优化处理,完全依赖操作系统提供的异步写来保证性能

    转载于:https://www.cnblogs.com/szprg/p/4588863.html

    展开全文
  • 这篇文章不是给开发者的文档,它更像是一个指导手册,来说明 Python 的 logging 模板是如何搭建的,并且激发感兴趣的人深入研究。为什么使用 logging 模块?也许会有开发者会问,为什么不是简单的 print 语句呢? ...

    39b5c36ad23b9ef0299c786999796645.png

    这篇文章介绍了 Python 的 logging 模块,包括它的设计以及针对更多复杂案例的适用方法。这篇文章不是写给开发者的文档,它更像是一个指导手册,来说明 Python 的 logging 模板是如何搭建的,并且激发感兴趣的人深入研究。

    为什么使用 logging 模块?

    也许会有开发者会问,为什么不是简单的 print 语句呢? Logging 模块有很多优势,包括:

    多线程支持

    通过不同级别的日志分类

    灵活性和可配置性

    将如何记录日志与记录什么内容分离

    最后一点,将我们记录内容从记录方式中真正分离,保证了软件不同部分的合作。举个例子,它允许一个框架或库的开发者增加日志并且让系统管理员或负责运行配置的人员决定稍后应该记录什么。

    Logging 模块中有什么

    Logging 模块完美地将它的每个部分的职责分离(遵循 Apache Log4j API 的方法)。让我们看看一个日志线是如何通过这个模块的代码,并且研究下它的不同部分。

    记录器(Logger)

    记录器是开发者经常交互的对象。那些主要的 API 说明了我们想要记录的内容。

    举个记录器的例子,我们可以分类请求发出一条信息,而不用担心它们是如何从哪里被发出的。

    日志记录

    日志记录是 logging 模块用来满足所有需求信息的包。它们包含了需要记录日志的地方、变化的字符串、参数、请求的信息队列等信息。

    它们都是被记录的对象。每次我们调用记录器时,都会生成这些对象。但这些对象是如何序列化到流中的呢?通过处理器!

    处理器

    处理器将日志记录发送给其他输出终端,他们获取日志记录并用相关函数中处理它们。

    比如,一个文件处理器将会获取一条日志记录,并且把它添加到文件中。

    标准的 logging 模块已经具备了多种内置的处理器,例如:

    多种文件处理器(TimeRotated, SizeRotated, Watched),可以写入文件中,

    StreamHandler 输出目标流比如 stdout 或 stderr,

    SMTPHandler 通过 email 发送日志记录,

    SocketHandler 将日志文件发送到流套接字,

    SyslogHandler、NTEventHandler、HTTPHandler及MemoryHandler等。

    展开全文
  • 背景起因是这次的项目用thrift来连接算法(python)和业务逻辑(java),因此有必要在python中添加日志来记录传入的参数。...如何日志落成日志文件?import logging​logging.basicConfig(filename='examp...
  • 有时候在容器内部需要写日志到主机的syslog,以便统一处理日志,需要把/dev/log映射给容器就行 -v /dev/log:/dev/log
  • 在kettle作业中JavaScript脚本有时候也扮演非常重要的角色,此时我们希望有...job的js写日志的方法。 得到日志输出实例 1 org.pentaho.di.core.logging.LogWriter.getInstance(); 按照日志的级别输出...
  • 针对这样的情况,我们一般会将需要打印出来的信息在一个文件里面,即使隔了很多天,我们依旧可以回过头来查看程序的运行状况,这就是日志的作用。 日志的等级 首先,我们要明确,日志是分等级的。有些事情很重要,...
  • 在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方。写好程序的日志可以帮助我们大大减轻后期维护压力。 在实际的工作中,开发人员往往迫于的巨大时间压力,而写日志又是一个非常繁琐的事情,往往没有...
  • [img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/26.gif][/img]
  • 大概就是如上代码,我希望当log.txt文件内长度大于1000的时候清空整个文件的内容,然后从文件第一行写入日志 因为不清空,文件会越来越大. 或者说当文件的容量大于100KB的时候清空掉 请教一下,该怎么? 上面的...
  • 平时如果要看异步执行完的日志需要kill调swoole进程然后会将日志记录到我们设置的文件中,但是不想每次都去kill进程,然后再重启进程,这样十分繁琐。 先看yii手册文档: Class yii\log\Logger 所有类|属性|...
  • kafka日志如何读写

    2020-08-24 09:39:37
    kafka日志如何读写
  • 如何写开发日志

    2011-08-17 22:54:45
    请问如何写开发日志?都包括哪些内容?
  • unigui写日志

    2019-03-13 15:06:32
    uniGUI本身提供了日志功能,利用uniServerModule.ServerLogger来控制如何写日志: 有两种方法: 一种是利用当前Session来写: uniMainForm.Session.Log('我的日志'); 这一种写出的格式是: KFWeb: 00001694: 08:...
  • 如何写错误日志

    2014-08-15 14:04:00
    但是,任何一个产品在投入使用后,都难免会有错误出现,那么如何记录一些对开发者有用的错误报告呢?我们可以在单独的文本文件中将错误报告作为日志记录。错误日志的记录,可以帮助开发人员或者管理人员查看系统是否...
  • web中如何写log日志

    2019-09-26 16:33:43
    web中如何写log日志 说明:在平时,我们经常会遇到,系统出错的时候,不知道错误出在什么地方,这时候就需要把错误信息记录到到一个文件中应用:cs代码:using System; ...
  • 如何优雅的写日志

    千次阅读 2018-02-27 11:02:08
    前言在代码中编写日志是日常开发中的基本要求,记录日志一方面是方便日后通过日志能够查找问题原因,另一方面也可以用于后续的审计工作。我以前对团队编写日志的要求是,通过打印的日志就可以看出整个代码的业务逻辑...
  • 如何写调研日志

    2013-05-29 22:57:00
    调研日志有三个要求:工作过程清晰化、调研内容结构化、不明内容有后续计划。 首先调研日志上要看处本日你调研了哪些部门、走访了哪些人、用了多少时间、获取了哪些业务的信息,这就叫工作过程清晰化。然后调研内容...
  • 程序员如何写工作日志

    万次阅读 2012-06-20 13:41:06
    日志,但过工作日志,可是这次培训实习要求每人每天一篇工作日志,且发布到博客上,不知道工作日志该怎么,也偷偷看过其他同学交的日志,有的看起来跟小学生的流水账日志一样,感觉不太靠谱啊,然后上网搜...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,618
精华内容 1,847
关键字:

如何写日志