新聞中心
Python作為一門(mén)跨平臺(tái)高級(jí)編程語(yǔ)言,因其簡(jiǎn)潔易學(xué)和強(qiáng)大的功能在越來(lái)越多的場(chǎng)景中被廣泛使用。其中,運(yùn)維是Python的一大應(yīng)用領(lǐng)域,Python可以用來(lái)編寫(xiě)監(jiān)控系統(tǒng)、自動(dòng)化運(yùn)維工具、系統(tǒng)管理等。日志記錄是運(yùn)維工作中必不可少的一部分,合理的日志記錄可以幫助系統(tǒng)管理員快速排查故障、監(jiān)控系統(tǒng)運(yùn)行狀態(tài)。本文將介紹如何用。

成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站服務(wù)團(tuán)隊(duì)是一支充滿(mǎn)著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶(hù)提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)公司把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來(lái)開(kāi)發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!
一、為什么要將日志寫(xiě)進(jìn)數(shù)據(jù)庫(kù)
在Web開(kāi)發(fā)、系統(tǒng)管理等領(lǐng)域中,通常會(huì)產(chǎn)生大量的日志信息,包括業(yè)務(wù)邏輯日志、系統(tǒng)運(yùn)行日志、錯(cuò)誤日志等。這些日志信息對(duì)于系統(tǒng)管理員來(lái)說(shuō)非常重要,它們可以幫助管理員快速發(fā)現(xiàn)和解決問(wèn)題,提高系統(tǒng)的運(yùn)行效率和穩(wěn)定性。但是,日志記錄會(huì)占用大量的磁盤(pán)空間,需要定期清理和歸檔。如果將日志寫(xiě)進(jìn)數(shù)據(jù)庫(kù),不僅可以快速查詢(xún)和統(tǒng)計(jì)日志信息,還可以避免因?yàn)橛脖P(pán)容量不足而導(dǎo)致日志記錄被截?cái)嗟那闆r發(fā)生。
二、Python實(shí)現(xiàn)日志寫(xiě)進(jìn)數(shù)據(jù)庫(kù)的步驟
接下來(lái),我們將以Python的 logging 模塊為例,演示如何將日志寫(xiě)進(jìn)MySQL數(shù)據(jù)庫(kù)。在實(shí)現(xiàn)過(guò)程中,我們需要進(jìn)行以下步驟:
1.建立數(shù)據(jù)庫(kù)和表
我們需要在MySQL數(shù)據(jù)庫(kù)中建立一個(gè)數(shù)據(jù)庫(kù)和一個(gè)日志表,用于存儲(chǔ)我們的日志信息。可以使用以下命令:
“`
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;
“`
以上命令會(huì)創(chuàng)建一個(gè)名為 logging_db 的數(shù)據(jù)庫(kù),和一個(gè)名為 logs 的表。logs 表有三個(gè)字段,分別是 id、logdate、levelname 和 message。其中,id 字段為主鍵,自增長(zhǎng)的整數(shù);logdate 字段為時(shí)間類(lèi)型,用于記錄日志時(shí)間;levelname 字段用于記錄日志級(jí)別(INFO、WARNING、ERROR);message 字段用于記錄日志信息。
2.創(chuàng)建 Python 日志實(shí)例
接下來(lái),我們需要在 Python 中創(chuàng)建一個(gè) logging 實(shí)例,用于記錄日志信息??梢允褂靡韵麓a:
“`
import logging
import pymysql
# 配置數(shù)據(jù)庫(kù)連接信息
DB_CONFIG = {
‘host’: ‘localhost’,
‘port’: 3306,
‘user’: ‘root’,
‘password’: ‘password’,
‘database’: ‘logging_db’,
‘charset’: ‘utf8mb4’
}
# 創(chuàng)建數(shù)據(jù)庫(kù)連接
conn = pymysql.connect(**DB_CONFIG)
# 創(chuàng)建日志實(shí)例
logger = logging.getLogger(‘mylogger’)
logger.setLevel(logging.INFO)
# 定義日志存儲(chǔ)到數(shù)據(jù)庫(kù)的處理器
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()
# 將日志處理器加入到日志實(shí)例中
dbhandler = DBHandler()
logger.addHandler(dbhandler)
“`
以上代碼會(huì)建立一個(gè)名為 mylogger 的日志實(shí)例,并設(shè)置默認(rèn)的日志級(jí)別為 INFO。同時(shí),我們還定義了一個(gè)名為 DBHandler 的日志處理器,它用于將日志信息存儲(chǔ)到數(shù)據(jù)庫(kù)中。在 DBHandler 類(lèi)的 emit 方法中,我們使用 pymysql 庫(kù)連接到 MySQL 數(shù)據(jù)庫(kù),并執(zhí)行插入數(shù)據(jù)的操作。在我們將 DBHandler 對(duì)象加入到 logger 實(shí)例中。
3.記錄日志信息
接下來(lái),我們可以使用 logger 實(shí)例記錄任何日志信息。例如:
“`
logger.info(‘testing info message’)
logger.warning(‘testing warning message’)
logger.error(‘testing error message’)
“`
以上代碼會(huì)依次記錄 INFO、WARNING、ERROR 三個(gè)級(jí)別的日志信息到數(shù)據(jù)庫(kù)中。
三、
到此為止,我們已經(jīng)成功地實(shí)現(xiàn)了將日志寫(xiě)進(jìn)數(shù)據(jù)庫(kù)的示例程序。通過(guò)以上示例,相信讀者已經(jīng)掌握了如何使用 Python logging 模塊將日志信息存儲(chǔ)到MySQL數(shù)據(jù)庫(kù)中的技巧。在實(shí)際應(yīng)用中,我們可以根據(jù)實(shí)際需求來(lái)修改日志記錄的級(jí)別和存儲(chǔ)方式,例如可以將日志信息存儲(chǔ)到其他類(lèi)型的數(shù)據(jù)庫(kù),或是將日志信息發(fā)送到郵件、微信等渠道通知相關(guān)人員。
相關(guān)問(wèn)題拓展閱讀:
- 怎么將系統(tǒng)日志內(nèi)容添加到數(shù)據(jù)庫(kù)中,通過(guò)用c#語(yǔ)言
- 日記的作用是什么,ISA 有幾種日志格式,如何把日記寫(xiě)入數(shù)據(jù)庫(kù)
- 怎么將logback的日志信息異步到oracle數(shù)據(jù)庫(kù)
怎么將系統(tǒng)日志內(nèi)容添加到數(shù)據(jù)庫(kù)中,通過(guò)用c#語(yǔ)言
1.獲取
日志路徑
2.建立一個(gè)
自早州敏動(dòng)更新的軟件
3.利用Timer設(shè)置
自動(dòng)
把路徑下的文件讀取并
導(dǎo)入
數(shù)據(jù)庫(kù)跡旁
這是一個(gè)陸枝思路。。
日記的作用是什么,ISA 有幾種日志格式,如何把日記寫(xiě)入數(shù)據(jù)庫(kù)
看看這篇文章
在
www.isacn.org
上寬缺很多
比如這洞型里納巧猜
www.isacn.org
/info/list.php?sessid=&sortid=17
日志是用來(lái)記錄首備數(shù)ISA服務(wù)的所有進(jìn)出通訊的.
ISA日志有W3C(TXT),MSDE和滾塌SQL三種格者首式.
最后一種是真正寫(xiě)入數(shù)據(jù)庫(kù)(SQL)的.
怎么將logback的日志信息異步到oracle數(shù)據(jù)庫(kù)
瞎銷(xiāo)
oracle.jdbc.driver.OracleDriver
磨慎游 jdbc:oracle:thin:@localhost:1521:ZYD
scott
tiger
提示:不理解的,請(qǐng)認(rèn)真仔細(xì)看清楚
logback是log4j作者推出的新日志系統(tǒng),原生支持slf4j通用日志api,允許平滑切換日志系統(tǒng),并且對(duì)簡(jiǎn)化應(yīng)用部署中日志處理的工作做了有益的封裝。
官方地址為:
Logback日志需要依賴(lài)一下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會(huì)自動(dòng)加載
logback.xml的基本結(jié)構(gòu)如下:
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} – %msg%n
logback.xml的基本配置信息都包含在configuration標(biāo)簽中,需洞禪要含有至少一個(gè)appender標(biāo)簽用于指定日志輸出方式和輸出格式,root標(biāo)簽為系統(tǒng)默認(rèn)日志進(jìn)程,通過(guò)level指定日志級(jí)別,通過(guò)appender-ref關(guān)聯(lián)前面指定頂?shù)娜罩据敵龇绞健?/p>
例子中的appender使用的是ch.qos.logback.core.ConsoleAppender類(lèi),用于對(duì)控制臺(tái)進(jìn)行日志輸出
其中encoder標(biāo)簽指定日志輸出格式為“時(shí)間 線(xiàn)程 級(jí)別 類(lèi)路徑 信息”
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標(biāo)簽指定的是日志分包策略,ch.qos.logback.core.rolling.TimeBasedRollingPolicy類(lèi)實(shí)現(xiàn)的是基于時(shí)間的分包策略,分包間隔是根據(jù)fileNamePattern中指定的事件最小單位,比如例子中的鏈顫謹(jǐn)%d{yyyy-MM-dd_HH-mm}的最小事件單位為分,它的觸發(fā)方式就是1分鐘,策略在每次想日志中添加新內(nèi)容時(shí)觸發(fā),如果滿(mǎn)足條件,就將mylog.txt復(fù)制到E:/logs/目錄并更名為mylog_13-13.1.log,并刪除原mylog.txt。maxHistory的值為指定E:/logs目錄下存在的類(lèi)似mylog_13-13.1.log文件的更大個(gè)數(shù),當(dāng)超過(guò)時(shí)會(huì)刪除最早的文件。此外,策略還可以互相嵌套,比如本例中在時(shí)間策略中又嵌套了文件大小策略,ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP實(shí)現(xiàn)對(duì)單文件大小的判斷,當(dāng)超過(guò)maxFileSize中指定大大小時(shí),文件名中的變量%i會(huì)加一,即在不滿(mǎn)足時(shí)間觸發(fā)且滿(mǎn)足大小觸發(fā)時(shí),會(huì)生成mylog_13-13.1.log和mylog_13-13.2.log兩個(gè)文件。
2.數(shù)據(jù)庫(kù)日志
com.mysql.jdbc.Driver
jdbc:
root
root
數(shù)據(jù)庫(kù)輸出使用ch.qos.logback.classic.db.DBAppender類(lèi),數(shù)據(jù)源支持c3p0數(shù)據(jù)連接池,例子中使用的MySql,其他配置方式請(qǐng)參考官方文檔。
使用數(shù)據(jù)庫(kù)輸出需要在數(shù)據(jù)庫(kù)中建立3個(gè)表,建表腳本如下
# 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等多種日志輸出方式,你也可以通過(guò)繼承ch.qos.logback.core.AppenderBase 自己寫(xiě)appender實(shí)現(xiàn)
除了使用默認(rèn)的日志主線(xiàn)程外,還可以通過(guò)標(biāo)簽定制其他日志線(xiàn)程如:
其中name指定線(xiàn)程針對(duì)的包路徑,level是日志級(jí)別,定義使用那種appender。
例如要實(shí)現(xiàn)打印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
–>
總結(jié):logback提供了豐富而高效的日志輸出方式,并通過(guò)滾動(dòng)策略,將實(shí)施時(shí)復(fù)雜的備份策略整合,極大的簡(jiǎn)化的部署成本。
logback日志寫(xiě)入oracle數(shù)據(jù)庫(kù)的配置如下:
%-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,數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar。
1.將日志按一定約束做答頃好數(shù)據(jù),定時(shí)推送到Oracle服務(wù)器某一目錄
2.Oracle啟動(dòng)一個(gè)定時(shí)job,每小桐舉滾時(shí)局余,每天或者每周啟動(dòng),將新的日志文件導(dǎo)入(這里plsql里面應(yīng)該支持導(dǎo)入語(yǔ)句的)
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開(kāi)通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專(zhuān)業(yè)-網(wǎng)站建設(shè),軟件開(kāi)發(fā)老牌服務(wù)商!微信小程序開(kāi)發(fā),APP開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站營(yíng)銷(xiāo)推廣服務(wù)眾多企業(yè)。電話(huà):028-86922220
網(wǎng)頁(yè)標(biāo)題:Python實(shí)現(xiàn)日志寫(xiě)進(jìn)數(shù)據(jù)庫(kù)的示例(Demo) (日志寫(xiě)進(jìn)數(shù)據(jù)庫(kù)demo)
轉(zhuǎn)載注明:http://www.dlmjj.cn/article/cdcojii.html


咨詢(xún)
建站咨詢(xún)
