I use Python and Logging facility for Python.
I have config.py:
MY_VARIABLE = ''
I have main.py:
from log import *
from config import MY_VARIABLE
for i in range(3):
global MY_VARIABLE
print(f"main.py Old: '{MY_VARIABLE}'")
MY_VARIABLE = i
print(f"main.py New: '{MY_VARIABLE}'")
logging.info("The process is running...")
I have log.py:
import logging
from config import MY_VARIABLE
class AppFilter(logging.Filter):
def filter(self, record):
global MY_VARIABLE
print(f"log.py MY_VARIABLE:{MY_VARIABLE}")
record.my_variable = MY_VARIABLE
return True
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s (%(my_variable)s) > %(message)s',
datefmt='%H:%M:%S'
)
logging.getLogger('').addFilter(AppFilter())
I get:
main.py Old: ''
main.py New: '0'
log.py MY_VARIABLE:''
main.py Old: '0'
main.py New: '1'
log.py MY_VARIABLE:''
main.py Old: '1'
main.py New: '2'
log.py MY_VARIABLE:''
14:23:28 INFO file № > The process is running...
14:23:28 INFO file № > The process is running...
14:23:28 INFO file № > The process is running...
Why variable MY_VARIABLE is empty in log.py? How to fix it?
When main.py
executes the line of code MY_VARIABLE = i
, this rebinds that variable name to a brand new object. The connection to the original import is lost.
Do it this way instead:
import config
config.MY_VARIABLE = <something>