Djangoにデバッグログ出力機能をつける

Djangoは"本気"なのだろうか。
例えば、Djangoを本気でビジネスユースで利用しようとすると、致命的に足りない物がいくつかある。

1つは日本語入力。
「このフィールドは日本語のみ」「このフィールドはひらがなのみ」「このフィールドはカタカナのみ」がない。
ようは、標準のDjangoのFormField系ではこれらが制限不可能なので、韓国語だろうがタガログだろうが
受け付けられるものは全部受け付けてしまう。

これについては仕方ない。Djangoは海外で生まれた物だし。
しかし、これもフレームワークの仕事であるが故に、誰かContribを!と思ったこともある。
が、自分で作った物をOSSにする、それすなわち「誰かに見られたら恥ずかしいし・・・」となる。

なので、苦労を知る上でも自分で作ってみることも勉強の一環だと思う。

ただ、「何でコレがねーんだよ!」の2つめとしてロギング機能。

ビジネスユースで利用するとして、この機能がないと、O/Rマッパーがバグってた場合や、
View中で何らかの特殊な動作をさせてたと仮定し、エラーになったらログに残せない。メールは飛ぶけど。

それじゃだーめなんだよ!
ということで、こういう風にした。

settings.py中で

def PREPARE_LOG_HANDLE():
 num = 0
def PREPARE_LOG_HANDLE():
  num = 0
  try:
    
    fh = open("./.debug.lock", 'r+')
  except:
    print "./.debug.lockが開けない!!"
    raise IOError('Cant open file("./.debug.lock)')
  
  num = fh.readline(1)
  fh.close
  if num == '1':
    fh = open("./.debug.lock", 'w')
    fh.write("2")
    fh.close()

  else:
    fh = open("./.debug.lock", 'w')
    fh.write("1")
    fh.close()
    return

  print "Make Debugging Handle"
  LOG_DIR = "./"
  LOG_NAME = "test.log"
    # Access time, filename/function#line-number message
  log_formatter = logging.Formatter("[%(asctime)s ] %(message)s")
  
    # This should roll logs over at midnight and date-stamp them appropriately
  handler = logging.handlers.TimedRotatingFileHandler(filename = "%s/%s" % (LOG_DIR, LOG_NAME), when='D', interval=1)
  
  handler.setFormatter(log_formatter)
  log = logging.getLogger('')
  log.setLevel(logging.DEBUG)
  log.addHandler(handler)
  
  return log

LOGGER = PREPARE_LOG_HANDLE()

これで、Viewsとかあらゆる場所で from django.conf import settingsしたあとに

settings.LOGGER.debug("死ねばいいのに")<<<

とやると、./test.logにログを残せるようになるよ