mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
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 changed files with 30 additions and 27 deletions
|
@ -2,12 +2,15 @@
|
||||||
# Copyright: Damien Elmes <anki@ichi2.net>
|
# Copyright: Damien Elmes <anki@ichi2.net>
|
||||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
|
|
||||||
|
import pprint
|
||||||
|
import re
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import stat
|
import stat
|
||||||
import datetime
|
import datetime
|
||||||
import copy
|
import copy
|
||||||
|
import traceback
|
||||||
|
|
||||||
from anki.lang import _, ngettext
|
from anki.lang import _, ngettext
|
||||||
from anki.utils import ids2str, fieldChecksum, stripHTML, \
|
from anki.utils import ids2str, fieldChecksum, stripHTML, \
|
||||||
|
@ -48,9 +51,12 @@ defaultConf = {
|
||||||
# this is initialized by storage.Collection
|
# this is initialized by storage.Collection
|
||||||
class _Collection(object):
|
class _Collection(object):
|
||||||
|
|
||||||
|
debugLog = False
|
||||||
|
|
||||||
def __init__(self, db, server=False):
|
def __init__(self, db, server=False):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.path = db._path
|
self.path = db._path
|
||||||
|
self._openLog()
|
||||||
self.log(self.path, anki.version)
|
self.log(self.path, anki.version)
|
||||||
self.server = server
|
self.server = server
|
||||||
self._lastSave = time.time()
|
self._lastSave = time.time()
|
||||||
|
@ -773,4 +779,25 @@ and queue = 0""", intTime(), self.usn())
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
def log(self, *args, **kwargs):
|
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
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import pprint
|
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -32,6 +31,8 @@ class AnkiQt(QMainWindow):
|
||||||
self.state = "startup"
|
self.state = "startup"
|
||||||
aqt.mw = self
|
aqt.mw = self
|
||||||
self.app = app
|
self.app = app
|
||||||
|
from anki.collection import _Collection
|
||||||
|
_Collection.debugLog = True
|
||||||
if isWin:
|
if isWin:
|
||||||
self._xpstyle = QStyleFactory.create("WindowsXP")
|
self._xpstyle = QStyleFactory.create("WindowsXP")
|
||||||
self.app.setStyle(self._xpstyle)
|
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):
|
def loadCollection(self):
|
||||||
self.hideSchemaMsg = True
|
self.hideSchemaMsg = True
|
||||||
self._openLog()
|
|
||||||
try:
|
try:
|
||||||
self.col = Collection(self.pm.collectionPath())
|
self.col = Collection(self.pm.collectionPath())
|
||||||
except anki.db.Error:
|
except anki.db.Error:
|
||||||
|
@ -865,7 +865,6 @@ Difference to correct time: %s.""") % diffText
|
||||||
def setupHooks(self):
|
def setupHooks(self):
|
||||||
addHook("modSchema", self.onSchemaMod)
|
addHook("modSchema", self.onSchemaMod)
|
||||||
addHook("remNotes", self.onRemNotes)
|
addHook("remNotes", self.onRemNotes)
|
||||||
addHook("log", self.onLog)
|
|
||||||
|
|
||||||
# Log note deletion
|
# 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(("\t".join([str(id), str(mid)] + fields)).encode("utf8"))
|
||||||
f.write("\n")
|
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
|
# Schema modifications
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue