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数据库中的技巧。在实际应用中,我们可以根据实际需求来修改日志记录的级别和存储方式,例如可以将日志信息存储到其他类型的数据库,或是将日志信息发送到邮件、微信等渠道通知相关人员。
相关问题拓展阅读:
1.获取
日志路径
2.建立一个
自早州敏动更新的软件
3.利用Timer设置
自动
把路径下的文件读取并
导入
数据库迹旁
这是一个陆枝思路。。
看看这篇文章
在
www.isacn.org
上宽缺很多
比如这洞型里纳巧猜
www.isacn.org
/info/list.php?sessid=&sortid=17
日志是用来记录首备数ISA服务的所有进出通讯的.
ISA日志有W3C(TXT),MSDE和滚塌SQL三种格者首式.
最后一种是真正写入数据库(SQL)的.
瞎销
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里面应该支持导入语句的)
成都服务器托管选创新互联,先上架开通再付费。
创新互联(www.cdcxhl.com)专业-网站建设,软件开发老牌服务商!微信小程序开发,APP开发,网站制作,网站营销推广服务众多企业。电话:028-86922220
文章题目:Python实现日志写进数据库的示例(Demo) (日志写进数据库demo)
文章网址:http://www.shufengxianlan.com/qtweb/news23/1723.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联