move debug logging into libanki
we want to be able to log the initial automatic sync, which happens before the debug logging was set up in ankiqt also skip the flush, as it should eventually get written
This commit is contained in:
parent
2e22b6218b
commit
5dfe95aa67
@ -2,12 +2,15 @@
|
||||
# Copyright: Damien Elmes <anki@ichi2.net>
|
||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
|
||||
import pprint
|
||||
import re
|
||||
import time
|
||||
import os
|
||||
import random
|
||||
import stat
|
||||
import datetime
|
||||
import copy
|
||||
import traceback
|
||||
|
||||
from anki.lang import _, ngettext
|
||||
from anki.utils import ids2str, fieldChecksum, stripHTML, \
|
||||
@ -48,9 +51,12 @@ defaultConf = {
|
||||
# this is initialized by storage.Collection
|
||||
class _Collection(object):
|
||||
|
||||
debugLog = False
|
||||
|
||||
def __init__(self, db, server=False):
|
||||
self.db = db
|
||||
self.path = db._path
|
||||
self._openLog()
|
||||
self.log(self.path, anki.version)
|
||||
self.server = server
|
||||
self._lastSave = time.time()
|
||||
@ -773,4 +779,25 @@ and queue = 0""", intTime(), self.usn())
|
||||
##########################################################################
|
||||
|
||||
def log(self, *args, **kwargs):
|
||||
runHook("log", args, kwargs)
|
||||
if not self.debugLog:
|
||||
return
|
||||
def customRepr(x):
|
||||
if isinstance(x, basestring):
|
||||
return x
|
||||
return pprint.pformat(x)
|
||||
path, num, fn, y = traceback.extract_stack(
|
||||
limit=2+kwargs.get("stack", 0))[0]
|
||||
buf = u"[%s] %s:%s(): %s" % (intTime(), os.path.basename(path), fn,
|
||||
", ".join([customRepr(x) for x in args]))
|
||||
self._logHnd.write(buf.encode("utf8") + "\n")
|
||||
if os.environ.get("ANKIDEV"):
|
||||
print buf
|
||||
|
||||
def _openLog(self):
|
||||
if not self.debugLog:
|
||||
return
|
||||
lpath = re.sub("\.anki2$", ".log", self.path)
|
||||
self._logHnd = open(lpath, "ab")
|
||||
|
||||
def _closeLog(self):
|
||||
self._logHnd = None
|
||||
|
28
aqt/main.py
28
aqt/main.py
@ -3,7 +3,6 @@
|
||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
|
||||
import os
|
||||
import pprint
|
||||
import sys
|
||||
import re
|
||||
import traceback
|
||||
@ -32,6 +31,8 @@ class AnkiQt(QMainWindow):
|
||||
self.state = "startup"
|
||||
aqt.mw = self
|
||||
self.app = app
|
||||
from anki.collection import _Collection
|
||||
_Collection.debugLog = True
|
||||
if isWin:
|
||||
self._xpstyle = QStyleFactory.create("WindowsXP")
|
||||
self.app.setStyle(self._xpstyle)
|
||||
@ -268,7 +269,6 @@ To import into a password protected profile, please open the profile before atte
|
||||
|
||||
def loadCollection(self):
|
||||
self.hideSchemaMsg = True
|
||||
self._openLog()
|
||||
try:
|
||||
self.col = Collection(self.pm.collectionPath())
|
||||
except anki.db.Error:
|
||||
@ -865,7 +865,6 @@ Difference to correct time: %s.""") % diffText
|
||||
def setupHooks(self):
|
||||
addHook("modSchema", self.onSchemaMod)
|
||||
addHook("remNotes", self.onRemNotes)
|
||||
addHook("log", self.onLog)
|
||||
|
||||
# Log note deletion
|
||||
##########################################################################
|
||||
@ -883,29 +882,6 @@ Difference to correct time: %s.""") % diffText
|
||||
f.write(("\t".join([str(id), str(mid)] + fields)).encode("utf8"))
|
||||
f.write("\n")
|
||||
|
||||
# Debug logging
|
||||
##########################################################################
|
||||
|
||||
def onLog(self, args, kwargs):
|
||||
if not self._logHnd:
|
||||
return
|
||||
def customRepr(x):
|
||||
if isinstance(x, basestring):
|
||||
return x
|
||||
return pprint.pformat(x)
|
||||
path, num, fn, y = traceback.extract_stack(
|
||||
limit=4+kwargs.get("stack", 0))[0]
|
||||
buf = u"[%s] %s:%s(): %s" % (intTime(), os.path.basename(path), fn,
|
||||
", ".join([customRepr(x) for x in args]))
|
||||
self._logHnd.write(buf.encode("utf8") + "\n")
|
||||
self._logHnd.flush()
|
||||
if os.environ.get("ANKIDEV"):
|
||||
print buf
|
||||
|
||||
def _openLog(self):
|
||||
lpath = re.sub("\.anki2$", ".log", self.pm.collectionPath())
|
||||
self._logHnd = open(lpath, "ab")
|
||||
|
||||
# Schema modifications
|
||||
##########################################################################
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user