New submission from Brian Hunt <[email protected]>:
Version: Python 3.9.3
Package: Logger + Windows 10 Task Scheduler
Error Msg: None
Behavior:
I built a logging process to use with a python script that will be scheduled
with Windows 10 task scheduler (this could be a bug in task scheduler too, but
starting here). I noticed it wasn’t working and started trying to trace the
root of the issue.
If I created a new file called scratch.py and ran some code, the logs showed
up. However, the exact same code in the exact same folder (titled: run_xyz.py)
didn’t log those same messages. It appears that something in either the task
scheduler or logger library doesn’t like the fact that my file name contains an
underscore because as soon as I pointed my task scheduler task that didn’t log
to my other file, it worked again. Also, when I finally removed the underscores
it started working. I believe it is Logger library related because the task
with underscores does in fact run the python code and generate the script
output.
Code in both files:
-----------------a_b_c.py code-----------
import os
import pathlib
import sys
pl_path = pathlib.Path(__file__).parents[1].resolve()
sys.path.append(str(pl_path))
from src.Core.Logging import get_logger
#
logger = get_logger(__name__, False)
logger.info("TESTING_USing taskScheduler")
-------src.Core.Logging.py get_logger code--------
import logging
import datetime
import time
import os
# from logging.handlers import SMTPHandler
from config import build_stage, log_config
from Pipelines.Databases import sqlAlchemy_logging_con
class DBHandler(logging.Handler):
def __init__(self, name):
"""
:param name: Deprecated
"""
logging.StreamHandler.__init__(self)
self.con = sqlAlchemy_logging_con()
self.sql = """insert into Logs (LogMessage, Datetime, FullPathNM,
LogLevelNM, ErrorLine) values ('{message}', '{dbtime}', '{pathname}',
'{level}', '{errLn}')"""
self.name = name
def formatDBTime(self, record):
record.dbtime = datetime.strftime("#%Y/%m/%d#",
datetime.localtime(record.created))
def emit(self, record):
creation_time = time.strftime("%Y-%m-%d %H:%M:%S",
time.localtime(record.created))
try:
self.format(record)
if record.exc_info:
record.exc_text =
logging._defaultFormatter.formatException(record.exc_info)
else:
record.exc_text = ""
sql = self.sql.format(message=record.message
, dbtime=creation_time
, pathname=record.pathname
, level=record.levelname
, errLn=record.lineno)
self.con.execute(sql)
except:
pass
def get_logger(name, use_local_logging=False):
"""
Returns a logger based on a name given. Name should be __name__ variable or
unique for each call.
Never call more than one time in a given file as it clears the logger. Use
config.log_config to define configuration
of the logger and its handlers.
:param name:
:return: logger
"""
logger = logging.getLogger(name)
logger.handlers.clear()
# used to send logs to local file location. Level set to that of logger
if use_local_logging:
handler = logging.FileHandler("Data\\Output\\log_" + build_stage +
str(datetime.date.today()).replace("-","") + ".log")
handler.setLevel(log_config['logger_level'])
logger.addHandler(handler)
dbhandler = DBHandler(name)
dbhandler.setLevel(log_config['db_handler_level'])
logger.addHandler(dbhandler)
logger.setLevel(log_config['logger_level'])
return logger
----------
components: IO, Library (Lib), Windows
messages: 401482
nosy: btjehunt, paul.moore, steve.dower, tim.golden, zach.ware
priority: normal
severity: normal
status: open
title: Logger library with task scheduler
type: behavior
versions: Python 3.9
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue45151>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com