Python实现日志写进数据库的示例(Demo) (日志写进数据库demo)

Python作为一门跨平台高级编程语言,因其简洁易学和强大的功能在越来越多的场景中被广泛使用。其中,运维是Python的一大应用领域,Python可以用来编写监控系统、自动化运维工具、系统管理等。日志记录是运维工作中必不可少的一部分,合理的日志记录可以帮助系统管理员快速排查故障、监控系统运行状态。本文将介绍如何用。

一、为什么要将日志写进数据库

在Web开发、系统管理等领域中,通常会产生大量的日志信息,包括业务逻辑日志、系统运行日志、错误日志等。这些日志信息对于系统管理员来说非常重要,它们可以帮助管理员快速发现和解决问题,提高系统的运行效率和稳定性。但是,日志记录会占用大量的磁盘空间,需要定期清理和归档。如果将日志写进数据库,不仅可以快速查询和统计日志信息,还可以避免因为硬盘容量不足而导致日志记录被截断的情况发生。

二、Python实现日志写进数据库的步骤

接下来,我们将以Python的 logging 模块为例,演示如何将日志写进MySQL数据库。在实现过程中,我们需要进行以下步骤:

1.建立数据库和表

我们需要在MySQL数据库中建立一个数据库和一个日志表,用于存储我们的日志信息。可以使用以下命令:

“`

CREATE DATABASE logging_db;

USE logging_db;

CREATE TABLE `logs` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`logdate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

`levelname` varchar(50) NOT NULL,

`message` text NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

“`

以上命令会创建一个名为 logging_db 的数据库,和一个名为 logs 的表。logs 表有三个字段,分别是 id、logdate、levelname 和 message。其中,id 字段为主键,自增长的整数;logdate 字段为时间类型,用于记录日志时间;levelname 字段用于记录日志级别(INFO、WARNING、ERROR);message 字段用于记录日志信息。

2.创建 Python 日志实例

接下来,我们需要在 Python 中创建一个 logging 实例,用于记录日志信息。可以使用以下代码:

“`

import logging

import pymysql

# 配置数据库连接信息

DB_CONFIG = {

‘host’: ‘localhost’,

‘port’: 3306,

‘user’: ‘root’,

‘password’: ‘password’,

‘database’: ‘logging_db’,

‘charset’: ‘utf8mb4’

}

# 创建数据库连接

conn = pymysql.connect(**DB_CONFIG)

# 创建日志实例

logger = logging.getLogger(‘mylogger’)

logger.setLevel(logging.INFO)

# 定义日志存储到数据库的处理器

class DBHandler(logging.Handler):

def emit(self, record):

sql = “INSERT INTO logs (logdate, levelname, message) VALUES (‘%s’, ‘%s’, ‘%s’)”

log_message = self.format(record)

conn.ping(reconnect=True)

conn.cursor().execute(sql % (record.created, record.levelname, log_message))

conn.commit()

# 将日志处理器加入到日志实例中

dbhandler = DBHandler()

logger.addHandler(dbhandler)

“`

以上代码会建立一个名为 mylogger 的日志实例,并设置默认的日志级别为 INFO。同时,我们还定义了一个名为 DBHandler 的日志处理器,它用于将日志信息存储到数据库中。在 DBHandler 类的 emit 方法中,我们使用 pymysql 库连接到 MySQL 数据库,并执行插入数据的操作。在我们将 DBHandler 对象加入到 logger 实例中。

3.记录日志信息

接下来,我们可以使用 logger 实例记录任何日志信息。例如:

“`

logger.info(‘testing info message’)

logger.warning(‘testing warning message’)

logger.error(‘testing error message’)

“`

以上代码会依次记录 INFO、WARNING、ERROR 三个级别的日志信息到数据库中。

三、

到此为止,我们已经成功地实现了将日志写进数据库的示例程序。通过以上示例,相信读者已经掌握了如何使用 Python logging 模块将日志信息存储到MySQL数据库中的技巧。在实际应用中,我们可以根据实际需求来修改日志记录的级别和存储方式,例如可以将日志信息存储到其他类型的数据库,或是将日志信息发送到邮件、微信等渠道通知相关人员。

相关问题拓展阅读:

怎么将系统日志内容添加到数据库中,通过用c#语言

1.获取

日志路径

2.建立一个

自早州敏动更新的软件

3.利用Timer设置

自动

把路径下的文件读取并

导入

数据库迹旁

这是一个陆枝思路。。

日记的作用是什么,ISA 有几种日志格式,如何把日记写入数据库

看看这篇文章

www.isacn.org

上宽缺很多

比如这洞型里纳巧猜

www.isacn.org

/info/list.php?sessid=&sortid=17

日志是用来记录首备数ISA服务的所有进出通讯的.

ISA日志有W3C(TXT),MSDE和滚塌SQL三种格者首式.

最后一种是真正写入数据库(SQL)的.

怎么将logback的日志信息异步到oracle数据库

  

   瞎销

 oracle.jdbc.driver.OracleDriver  

磨慎游  jdbc:oracle:thin:@localhost:1521:ZYD  

 scott  

 tiger

    

   

 提示:不理解的,请认真仔细看清楚

logback是log4j作者推出的新日志系统,原生支持slf4j通用日志api,允许平滑切换日志系统,并且对简化应用部署中日志处理的工作做了有益的封装。

官方地址为:

Logback日志需要依赖一下jar包:

slf4j-api-1.6.0.jar

logback-core-0.9.21.jar

logback-classic-0.9.21.jar

logback-access-0.9.21.jar

主配置文件为logback.xml,放在src目录下或是WEB-INF/classes下,logback会自动加载

logback.xml的基本结构如下:

%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} – %msg%n

logback.xml的基本配置信息都包含在configuration标签中,需洞禅要含有至少一个appender标签用于指定日志输出方式和输出格式,root标签为系统默认日志进程,通过level指定日志级别,通过appender-ref关联前面指定顶的日志输出方式。

例子中的appender使用的是ch.qos.logback.core.ConsoleAppender类,用于对控制台进行日志输出

其中encoder标签指定日志输出格式为“时间 线程 级别 类路径 信息”

logback的文件日志输出方式还提供多种日志分包策略

1.文件日志

E:/logs/mylog.txt

E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log

MB

%date %level %logger{36} %msg%n

指定输入文件路径,encoder指定日志格式。其中,rollingPolicy标签指定的是日志分包策略,ch.qos.logback.core.rolling.TimeBasedRollingPolicy类实现的是基于时间的分包策略,分包间隔是根据fileNamePattern中指定的事件最小单位,比如例子中的链颤谨%d{yyyy-MM-dd_HH-mm}的最小事件单位为分,它的触发方式就是1分钟,策略在每次想日志中添加新内容时触发,如果满足条件,就将mylog.txt复制到E:/logs/目录并更名为mylog_13-13.1.log,并删除原mylog.txt。maxHistory的值为指定E:/logs目录下存在的类似mylog_13-13.1.log文件的更大个数,当超过时会删除最早的文件。此外,策略还可以互相嵌套,比如本例中在时间策略中又嵌套了文件大小策略,ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP实现对单文件大小的判断,当超过maxFileSize中指定大大小时,文件名中的变量%i会加一,即在不满足时间触发且满足大小触发时,会生成mylog_13-13.1.log和mylog_13-13.2.log两个文件。

2.数据库日志

com.mysql.jdbc.Driver

jdbc:

root

root

数据库输出使用ch.qos.logback.classic.db.DBAppender类,数据源支持c3p0数据连接池,例子中使用的MySql,其他配置方式请参考官方文档。

使用数据库输出需要在数据库中建立3个表,建表脚本如下

# Logback: the reliable, generic, fast and flexible logging framework.

# Copyright (C), QOS.ch. All rights reserved.

#

# See

license.html for the applicable licensing

# conditions.

# This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.

#

# It is intended for MySQL databases. It has been tested on MySQL 5.1.37

# on Linux

BEGIN;

DROP TABLE IF EXISTS logging_event_property;

DROP TABLE IF EXISTS logging_event_exception;

DROP TABLE IF EXISTS logging_event;

COMMIT;

BEGIN;

CREATE TABLE logging_event

(

timestmpBIGINT NOT NULL,

formatted_message TEXT NOT NULL,

logger_nameVARCHAR(254) NOT NULL,

level_string VARCHAR(254) NOT NULL,

thread_nameVARCHAR(254),

reference_flag ALLINT,

arg VARCHAR(254),

arg VARCHAR(254),

arg VARCHAR(254),

arg VARCHAR(254),

caller_filename VARCHAR(254) NOT NULL,

caller_class VARCHAR(254) NOT NULL,

caller_method VARCHAR(254) NOT NULL,

caller_lineCHAR(4) NOT NULL,

event_idBIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY

);

COMMIT;

BEGIN;

CREATE TABLE logging_event_property

(

event_idBIGINT NOT NULL,

mapped_keyVARCHAR(254) NOT NULL,

mapped_value TEXT,

PRIMARY KEY(event_id, mapped_key),

FOREIGN KEY (event_id) REFERENCES logging_event(event_id)

);

COMMIT;

BEGIN;

CREATE TABLE logging_event_exception

(

event_idBIGINT NOT NULL,

i ALLINT NOT NULL,

trace_lineVARCHAR(254) NOT NULL,

PRIMARY KEY(event_id, i),

FOREIGN KEY (event_id) REFERENCES logging_event(event_id)

);

COMMIT;

3.其他

此外logback还提供基于mail,基于jmx等多种日志输出方式,你也可以通过继承ch.qos.logback.core.AppenderBase 自己写appender实现

除了使用默认的日志主线程外,还可以通过标签定制其他日志线程如:

其中name指定线程针对的包路径,level是日志级别,定义使用那种appender。

例如要实现打印jdbc提交的sql,可以加入如下logger:

贴出我完整的logback.xml

E:/logs/mylog.txt

E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log

MB

%date %level %logger{36} %msg%n

%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} – %msg%n

com.mysql.jdbc.Driver

jdbc:

root

–>

总结:logback提供了丰富而高效的日志输出方式,并通过滚动策略,将实施时复杂的备份策略整合,极大的简化的部署成本。

 logback日志写入oracle数据库的配置如下:

%-20(%d{HH:mm:ss.SSS} ) %-5level %logger{80} – %msg%n

  ${log.base}.log 

${log.base}.%d{yyyy-MM-dd}.log.zip   %-20(%d{HH:mm:ss.SSS} ) %-5level %logger{80} –

%msg%n  

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:@192.168.3.250:1521:devdb

logback

logback

com.mysql.jdbc.Driver

jdbc:

root

qqqqqq

com.mysql.jdbc.Driver

jdbc:

root

qqqqqq

true

–>

com.mysql.jdbc.Driver

jdbc:

root

qqqqqq

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:@192.168.3.250:1521:devdb

logback

logback

注意:需要slf4j, logback-core, logback-classic,数据库驱动jar。

1.将日志按一定约束做答顷好数据,定时推送到Oracle服务器某一目录

2.Oracle启动一个定时job,每小桐举滚时局余,每天或者每周启动,将新的日志文件导入(这里plsql里面应该支持导入语句的)

返回列表

上一篇:无限网络安全风险

关于日志写进数据库demo的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Python实现日志写进数据库的示例(Demo) (日志写进数据库demo)