Как правильно отключить логгеры строронних библиотек в Django приложении?
Я пытаюсь отключить логгеры библиотеки colormath, поскольку они мне бесполезны и только мешают.
Я не могу использовать фильтрацию, потому что речь идёт о логе docker контейнера, к которому я подключаюсь таким образом: docker logs -f djangopostgre-web-1 --details
Я пытался сделать это в методе AppConfig.ready() моего приложения, как указано в документации:
from django.apps import AppConfig
import logging
from colormath import chromatic_adaptation
from colormath import color_appearance_models
from colormath import color_conversions
from colormath import color_objects
logger = logging.getLogger(__name__)
def disable_logging(module):
module_logger = logging.getLogger(module.__name__)
module_logger.disabled = True
logger.debug(f'{module_logger} logger is disabled')
class MainConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'main'
def ready(self) -> None:
disable_logging(chromatic_adaptation)
disable_logging(color_appearance_models)
disable_logging(color_conversions)
disable_logging(color_objects)
return super().ready()
Это не работает, логи всё равно появляются. У меня есть причины не изменять исходный код библиотеки. В исходной библиотеке логгеры регистрируются следующим образом:
# colormath.chromatic_adaptation.py
import logging
import numpy
from numpy.linalg import pinv
from colormath import color_constants
logger = logging.getLogger(__name__)
#...
Пример мусорного вывода в лог:
Converting LCHabColor (lch_l:85.0000 lch_c:40.0000 lch_h:250.5600) to <class 'colormath.color_objects.sRGBColor'>
@ Conversion path: [<function LCHab_to_Lab at 0x7f6129552980>, <function Lab_to_XYZ at 0x7f6129552840>, <function XYZ_to_RGB at 0x7f61295531a0>]
* Conversion: LCHabColor passed to <function LCHab_to_Lab at 0x7f6129552980>()
|-> in LCHabColor (lch_l:85.0000 lch_c:40.0000 lch_h:250.5600)
|-< out LabColor (lab_l:85.0000 lab_a:-13.3128 lab_b:-37.7196)
* Conversion: LabColor passed to <function Lab_to_XYZ at 0x7f6129552840>()
|-> in LabColor (lab_l:85.0000 lab_a:-13.3128 lab_b:-37.7196)
|-< out XYZColor (xyz_x:0.5798 xyz_y:0.6601 xyz_z:0.9809)
* Conversion: XYZColor passed to <function XYZ_to_RGB at 0x7f61295531a0>()
|-> in XYZColor (xyz_x:0.5798 xyz_y:0.6601 xyz_z:0.9809)
\- Target RGB space: <class 'colormath.color_objects.sRGBColor'>
\- Target native illuminant: d65
\- XYZ color's illuminant: d50
\* Applying transformation from d50 to d65
\* Applying adaptation matrix: bradford
\* New values: 0.601, 0.671, 1.298
\* Applying RGB conversion matrix: type->xyz_to_rgb
|-< out sRGBColor (rgb_r:0.5551 rgb_g:0.8704 rgb_b:1.1100)
Converting LCHabColor (lch_l:85.0000 lch_c:40.0000 lch_h:250.5600) to <class 'colormath.color_objects.sRGBColor'>
@ Conversion path: [<function LCHab_to_Lab at 0x7f6129552980>, <function Lab_to_XYZ at 0x7f6129552840>, <function XYZ_to_RGB at 0x7f61295531a0>]
* Conversion: LCHabColor passed to <function LCHab_to_Lab at 0x7f6129552980>()
|-> in LCHabColor (lch_l:85.0000 lch_c:40.0000 lch_h:250.5600)
|-< out LabColor (lab_l:85.0000 lab_a:-13.3128 lab_b:-37.7196)
* Conversion: LabColor passed to <function Lab_to_XYZ at 0x7f6129552840>()
|-> in LabColor (lab_l:85.0000 lab_a:-13.3128 lab_b:-37.7196)
|-< out XYZColor (xyz_x:0.5798 xyz_y:0.6601 xyz_z:0.9809)
* Conversion: XYZColor passed to <function XYZ_to_RGB at 0x7f61295531a0>()
|-> in XYZColor (xyz_x:0.5798 xyz_y:0.6601 xyz_z:0.9809)
\- Target RGB space: <class 'colormath.color_objects.sRGBColor'>
\- Target native illuminant: d65
\- XYZ color's illuminant: d50
\* Applying transformation from d50 to d65
\* Applying adaptation matrix: bradford
\* New values: 0.601, 0.671, 1.298
\* Applying RGB conversion matrix: type->xyz_to_rgb
|-< out sRGBColor (rgb_r:0.5551 rgb_g:0.8704 rgb_b:1.1100)
Converting LCHabColor (lch_l:85.0000 lch_c:40.0000 lch_h:323.2800) to <class 'colormath.color_objects.sRGBColor'>
@ Conversion path: [<function LCHab_to_Lab at 0x7f6129552980>, <function Lab_to_XYZ at 0x7f6129552840>, <function XYZ_to_RGB at 0x7f61295531a0>]
* Conversion: LCHabColor passed to <function LCHab_to_Lab at 0x7f6129552980>()
|-> in LCHabColor (lch_l:85.0000 lch_c:40.0000 lch_h:323.2800)
|-< out LabColor (lab_l:85.0000 lab_a:32.0627 lab_b:-23.9162)
* Conversion: LabColor passed to <function Lab_to_XYZ at 0x7f6129552840>()
|-> in LabColor (lab_l:85.0000 lab_a:32.0627 lab_b:-23.9162)
|-< out XYZColor (xyz_x:0.7877 xyz_y:0.6601 xyz_z:0.8014)
* Conversion: XYZColor passed to <function XYZ_to_RGB at 0x7f61295531a0>()
|-> in XYZColor (xyz_x:0.7877 xyz_y:0.6601 xyz_z:0.8014)
\- Target RGB space: <class 'colormath.color_objects.sRGBColor'>
\- Target native illuminant: d65
\- XYZ color's illuminant: d50
\* Applying transformation from d50 to d65
\* Applying adaptation matrix: bradford
\* New values: 0.788, 0.661, 1.062
\* Applying RGB conversion matrix: type->xyz_to_rgb
|-< out sRGBColor (rgb_r:1.0036 rgb_g:0.7488 rgb_b:1.0137)
Converting LCHabColor (lch_l:85.0000 lch_c:40.0000 lch_h:323.2800) to <class 'colormath.color_objects.sRGBColor'>
Таких записей очень много, ведь я конвертирую десятки цветов, пользуясь colormath.
Ответы (1 шт):
Да решение менять исходники сторонней либы не лучшее. Но к сожалению в своем вопросе Вы не приводите как именно делали конфигурацию. Однако в другом файле документации #configuring-logging Есть пример:
settings.py
import os
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'root': {
'handlers': ['console'],
'level': 'WARNING',
},
}
И я полагаю первая опция disable_existing_loggers установленная в True должна отключить все существующие логеры.
Путем настройки конфига удалось избавиться от выводимых логов таким образом:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'root': {
'handlers': ['console'],
'level': 'DEBUG',
},
'loggers': {
'colormath': {
'handlers': ['console'],
'level': 'ERROR',
'propagate': False,
},
},
}
Т.е. теперь логи будут выводиться только в случае ошибок.