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

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


咨詢
建站咨詢
