[PYTHON] 데이터베이스에 파이썬 로깅
PYTHON데이터베이스에 파이썬 로깅
나는 파이썬 로거 모듈이 데이터베이스에 로그 할 수있는 방법을 찾고 있으며, db가 다운되었을 때 파일 시스템으로 돌아 간다.
그래서 기본적으로 2 가지 : 로거 로그를 데이터베이스로 보내는 방법과 데이터베이스가 다운되었을 때 로깅을 파일로 만드는 방법.
해결법
-
==============================
1.문제의 데이터베이스로 로그를 전달하는 처리기를 직접 작성하십시오. 실패하면 로거의 핸들러 목록에서 제거 할 수 있습니다. 고장 모드를 다루는 방법은 여러 가지가 있습니다.
문제의 데이터베이스로 로그를 전달하는 처리기를 직접 작성하십시오. 실패하면 로거의 핸들러 목록에서 제거 할 수 있습니다. 고장 모드를 다루는 방법은 여러 가지가 있습니다.
-
==============================
2.이런 ... 시간이 많이 흘렀지 만, 최근에 필자의 데이터베이스 로거를 파이썬으로 작성했습니다. 내가 어떤 예를 찾을 수 없었기 때문에 나는 여기에 나의 것을 게시 할 것이라고 생각했다. 어쩌면 누군가가 도움이 될 것입니다 :) MS SQL과 작동합니다.
이런 ... 시간이 많이 흘렀지 만, 최근에 필자의 데이터베이스 로거를 파이썬으로 작성했습니다. 내가 어떤 예를 찾을 수 없었기 때문에 나는 여기에 나의 것을 게시 할 것이라고 생각했다. 어쩌면 누군가가 도움이 될 것입니다 :) MS SQL과 작동합니다.
데이터베이스 테이블은 다음과 같습니다.
CREATE TABLE [db_name].[log]( [id] [bigint] IDENTITY(1,1) NOT NULL, [log_level] [int] NULL, [log_levelname] [char](32) NULL, [log] [char](2048) NOT NULL, [created_at] [datetime2](7) NOT NULL, [created_by] [char](32) NOT NULL, ) ON [PRIMARY]
클래스 자체 :
class LogDBHandler(logging.Handler): ''' Customized logging handler that puts logs to the database. pymssql required ''' def __init__(self, sql_conn, sql_cursor, db_tbl_log): logging.Handler.__init__(self) self.sql_cursor = sql_cursor self.sql_conn = sql_conn self.db_tbl_log = db_tbl_log def emit(self, record): # Set current time tm = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(record.created)) # Clear the log message so it can be put to db via sql (escape quotes) self.log_msg = record.msg self.log_msg = self.log_msg.strip() self.log_msg = self.log_msg.replace('\'', '\'\'') # Make the SQL insert sql = 'INSERT INTO ' + self.db_tbl_log + ' (log_level, ' + \ 'log_levelname, log, created_at, created_by) ' + \ 'VALUES (' + \ '' + str(record.levelno) + ', ' + \ '\'' + str(record.levelname) + '\', ' + \ '\'' + str(self.log_msg) + '\', ' + \ '(convert(datetime2(7), \'' + tm + '\')), ' + \ '\'' + str(record.name) + '\')' try: self.sql_cursor.execute(sql) self.sql_conn.commit() # If error - print it out on screen. Since DB is not working - there's # no point making a log about it to the database :) except pymssql.Error as e: print sql print 'CRITICAL DB ERROR! Logging to database not possible!'
사용 예 :
import pymssql import time import logging db_server = 'servername' db_user = 'db_user' db_password = 'db_pass' db_dbname = 'db_name' db_tbl_log = 'log' log_file_path = 'C:\\Users\\Yourname\\Desktop\\test_log.txt' log_error_level = 'DEBUG' # LOG error level (file) log_to_db = True # LOG to database? class LogDBHandler(logging.Handler): [...] # Main settings for the database logging use if (log_to_db): # Make the connection to database for the logger log_conn = pymssql.connect(db_server, db_user, db_password, db_dbname, 30) log_cursor = log_conn.cursor() logdb = LogDBHandler(log_conn, log_cursor, db_tbl_log) # Set logger logging.basicConfig(filename=log_file_path) # Set db handler for root logger if (log_to_db): logging.getLogger('').addHandler(logdb) # Register MY_LOGGER log = logging.getLogger('MY_LOGGER') log.setLevel(log_error_level) # Example variable test_var = 'This is test message' # Log the variable contents as an error log.error('This error occurred: %s' % test_var)
위의 코드는 데이터베이스와 파일 모두에 기록됩니다. 파일이 필요하지 않은 경우 'logging.basicConfig (filename = log_file_path)'행을 건너 뛰십시오. 'log'를 사용하여 기록 된 모든 것은 MY_LOGGER로 기록됩니다. 일부 외부 오류 (즉, 가져온 모듈 또는 무언가)가 나타나면 오류가 'root'로 표시됩니다. 'root'로거도 활성화되어 있으며 데이터베이스 처리기를 사용하고 있습니다.
-
==============================
3.log4mongo library를 보셨습니까? https://pypi.python.org/pypi/log4mongo/ Mongo에 대한 핸들을 제공합니다. 대체는 거기에 있지 않지만 추가하기가 상대적으로 쉽다고 생각합니다.
log4mongo library를 보셨습니까? https://pypi.python.org/pypi/log4mongo/ Mongo에 대한 핸들을 제공합니다. 대체는 거기에 있지 않지만 추가하기가 상대적으로 쉽다고 생각합니다.
-
==============================
4.나는 이것을 다시 파고있다.
나는 이것을 다시 파고있다.
SqlAlchemy를 사용하는 솔루션이 있습니다 (피라미드는이 제조법에 필요하지 않습니다) :
https://docs.pylonsproject.org/projects/pyramid-cookbook/en/latest/logging/sqlalchemy_logger.html
추가 필드를 추가하여 로깅을 향상시킬 수 있습니다. 다음은 안내서입니다. https://stackoverflow.com/a/17558764/1115187
이것이 100 % 정확함을 확신하지 못하지만 2 개의 핸들러를 가질 수 있습니다 :
try-except로 DB 커밋을 마무리하면된다. 그러나 파일에는 모든 로그 항목이 포함되지만 DB 저장에 실패한 항목은 제외됩니다.
-
==============================
5.오래된 질문이지만, 다른 사람들에게 이것을 떨어 뜨린다. 파이썬 로깅을 사용하려면 두 개의 핸들러를 추가 할 수 있습니다. 하나는 파일에 쓰기, 하나는 회전하는 파일 핸들러입니다. 이것은 견고하며 dB가 올라가도 상관없이 수행 할 수 있습니다. 다른 하나는 pymongo 통합과 같은 다른 서비스 / 모듈에 쓸 수 있습니다.
오래된 질문이지만, 다른 사람들에게 이것을 떨어 뜨린다. 파이썬 로깅을 사용하려면 두 개의 핸들러를 추가 할 수 있습니다. 하나는 파일에 쓰기, 하나는 회전하는 파일 핸들러입니다. 이것은 견고하며 dB가 올라가도 상관없이 수행 할 수 있습니다. 다른 하나는 pymongo 통합과 같은 다른 서비스 / 모듈에 쓸 수 있습니다.
코드 또는 json에서 핸들러를 설정하는 방법은 logging.config를 참조하십시오.
from https://stackoverflow.com/questions/2314307/python-logging-to-database by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python을 사용하여 다른 Excel 파일에서 복사 된 열이있는 Excel 파일을 작성합니다. [닫힘] (0) | 2018.11.01 |
---|---|
[PYTHON] 다른 URL 데이터를 얻기 위해 url을 구문 분석하는 아름다운 수프 (0) | 2018.11.01 |
[PYTHON] numpy 배열을 사용하여 열 벡터 연결 (0) | 2018.10.31 |
[PYTHON] 파이썬 : 내 함수는 "무효"를 반환합니다. (0) | 2018.10.31 |
[PYTHON] PyChObject는 PyGObject 3.0을 해결할 수 없지만 코드는 정상적으로 실행됩니다. (0) | 2018.10.31 |