Проблема заключается в том, что Paste Deploy создает один объект ConfigParser для хранения тега 'here' в его наборе значений по умолчанию, и logging.config.fileConfig () никогда не передает этот набор значений по умолчанию. Поэтому, когда fileConfig () читает файл .ini, у него нет доступа к тегу 'here', и интерполяция ConfigParser не может его найти.
Вы могли бы сделать что-то вроде этого:
[DEFAULT]
my_log_dir = '/var/pylons/myapp/logs'
...
[handler_debugging-logger-file]
args = (%(my_log_dir)s + '/myapp-debugging-errors.log', 'a')
Не совсем то, что вы ищете, но чуть более настраиваемый.
Другая возможность:
args = (os.getcwd() + '/myapp-debugging-errors.log', 'a')
(Это работает, потому что 'os' является допустимой переменной в пространстве имен модуля ведения журнала, когда он вызывает eval () для значения args. Но это деталь реализации пакета ведения журнала, которая может быть ненадежной в долгосрочной перспективе.) Но это, скорее всего, не даст вам того, что вы хотите - скорее всего, оно будет использовать рабочий каталог процесса Apache.
Вы даже можете установить переменную окружения вне программы и использовать ее следующим образом:
args = (os.environ['MY_LOG_DIR'] + '/myapp-debugging-errors.log', 'a')
И еще одна возможность - переопределить поведение некоторых функций или методов класса в модуле ведения журнала или в пакете вставки.
Надеюсь, что они дают вам некоторые идеи.