Файл журнала всегда пустPython

Программы на Python
Ответить
Anonymous
 Файл журнала всегда пуст

Сообщение Anonymous »

Вот фрагмент того, как ведется журналирование в моем тестовом скрипте:

Код: Выделить всё

logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(message)s",
datefmt="%Y%m%d %H:%M:%S",
handlers=[
logging.FileHandler(args.log_file),
logging.StreamHandler()
]
)
logger = logging.getLogger()
Path(args.log_file).chmod(0o644)
logger.info("this_is_a_test")
После завершения выполнения тестового примера создается файл журнала, но в нем ничего нет:

Код: Выделить всё

-rw-r--r-- 1 root root 0 Nov 30 12:50 /u/qiang/logs/mytest/01_test_with_simulator/001_TestWithSimulator.test_happy_path/simulator.log
Не знаете, что не так в коде?
Обновление 1:
пробовал очистить существующие обработчики перед добавлением новых, но это не имело никакого значения. Файл журнала по-прежнему пуст.

Код: Выделить всё

logger = logging.getLogger()
if logger.hasHandlers():
logger.handlers.clear()
handlers = [logging.FileHandler(args.log_file), logging.StreamHandler()]
for handler in handlers:
handler.setFormatter(logging.Formatter(fmt="%(asctime)s %(message)s"))
logger.addHandler(handler)
logger.setLevel(logging.INFO)
Path(args.log_file).chmod(0o644)
Программа ведения журнала определена в пространстве имен __main__, а пользователи средства ведения журнала, например do_POST и do_GET, находятся за его пределами.

Код: Выделить всё

class SimulatorRequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
logger.info(f"request path is {self.path}")
...

def do_GET(self):
logger.info(f"request path is {self.path}")
...

if __name__ == "__main__":
parser.add_argument("--log-file", help="Simulator log file")
args = parser.parse_args()
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(message)s",
# If this keyword argument is specified as true, any existing handlers
# attached to the root logger are removed and closed, before carrying
# out the configuration as specified by the other arguments.
force=True,
handlers=[
logging.FileHandler(args.log_file),
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger()
Path(args.log_file).chmod(0o644)
Может ли это быть связанным фактором?
Обновление 2: оказывается, что проблема была вызвана библиотекой Python компании, которая переопределяет исходный метод addHandler.

Код: Выделить всё

def addHandler(self, hdlr, add_parent=True):
if (not isinstance(hdlr, (StreamHandler, FileHandler, logging.NullHandler, RotatingFileHandler, SysLogHandler))):
return
...
И этот FileHandler является дочерним классом logging.FileHandler. Они родственны, но не одно и то же. Вот почему он нажал return в приведенной выше функции и не был успешно добавлен.
Извините, ребята. Чувствуете вину за то, что тратите свое время на проблему, вызванную кодом компании, а не стандартным пакетом ведения журналов.
Этот вопрос можно закрыть.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ways-empty
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»