使用Logstash记录日志,并记录用户何时执行操作。不幸的是,它似乎每个'动作'或错误发送多个条目,而不是每个动作或错误发送一个条目。例如,如果用户提交表单,我将其设置为记录他们已提交的表单。有时它会记录1个日志条目,有时会记录5个,3个或2个。这是非常不一致的。记录到同一服务器的其他工具和应用程序不会执行此操作。这是我设置logstash的地方:
Dim strSQL As String
strSQL = "SELECT * FROM [MY_TABLE] WHERE [MY_TEXT_COLUMN_NAME] LIKE %?%"
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DATABASE_PATH & ";Persist Security Info=False;"
conn.Open
Dim adoCommand As ADODB.Command
Set adoCommand = New ADODB.Command
With adoCommand
.ActiveConnection = conn
.CommandType = adCmdText
.CommandText = strSQL
.Prepared = True
.Parameters.Append .CreateParameter(, adVarChar, adParamInput, 255, strMYTEXT)
Dim rs As ADODB.Recordset
Set rs = .Execute
End With
我使用这个我想记录的东西。
class LogStashExp(object):
@staticmethod
def log(exc, request, servfrom, erlevel, email):
if str(request.url).startswith('http://localhost'):
host = 'localhost'
else:
host = '*******'
prlogger = logging.getLogger(str(servfrom))
prlogger.setLevel(logging.INFO)
prlogger.addHandler(logstash.LogstashHandler(host, 6123, version=1))
extra = {
'email': email
}
if erlevel == "warn":
prlogger.warning(exc, extra=extra)
elif erlevel == "error":
prlogger.error(exc, extra=extra)
elif erlevel == "info":
prlogger.info(exc, extra=extra)
else:
prlogger.error(exc)
想法?
答案 0 :(得分:2)
Python logging
具有全局状态。
prlogger = logging.getLogger(str(servfrom))
prlogger.setLevel(logging.INFO)
prlogger.addHandler(logstash.LogstashHandler(host, 6123, version=1))
首次执行此代码时,它会创建一个记录器。第二次执行此代码时,它返回相同的记录器。每次执行代码时,新的日志处理程序都会添加到现有的记录器。
我认为如果你想动态创建你的记录器,你应该在继续添加新的记录器之前检查它是否有任何处理程序。