Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

Tôi đã tìm thấy một giải pháp cho việc này:

logger = logging.getLogger('my-logger')
logger.propagate = False
# now if you use logger it will not log to console.

Điều này sẽ ngăn chặn việc đăng nhập được gửi đến logger trên bao gồm ghi nhật ký bảng điều khiển.

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

ereon

52.1K37 Huy hiệu vàng159 Huy hiệu bạc233 Huy hiệu Đồng37 gold badges159 silver badges233 bronze badges

Đã trả lời ngày 15 tháng 2 năm 2010 lúc 17:04Feb 15, 2010 at 17:04

Sorinsorinsorin

154K171 Huy hiệu vàng518 Huy hiệu bạc770 Huy hiệu đồng171 gold badges518 silver badges770 bronze badges

5

Tôi sử dụng:

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False

Đã trả lời ngày 25 tháng 6 năm 2010 lúc 6:42Jun 25, 2010 at 6:42

Infinitoinfinitoinfinito

1.8451 Huy hiệu vàng15 Huy hiệu bạc16 Huy hiệu đồng1 gold badge15 silver badges16 bronze badges

5

Bạn có thể dùng:

logging.basicConfig(level=your_level)

Trường hợp của bạn là một trong những điều đó:your_level is one of those:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL

Vì vậy, nếu bạn đặt của bạn_Level thành Logging.Critical, bạn sẽ chỉ nhận được các tin nhắn quan trọng được gửi bởi:your_level to logging.CRITICAL, you will get only critical messages sent by:

logging.critical('This is a critical error message')

Đặt your_level để ghi nhật ký.debug sẽ hiển thị tất cả các cấp độ đăng nhập.your_level to logging.DEBUG will show all levels of logging.

Để biết thêm chi tiết, xin vui lòng xem các ví dụ về ghi nhật ký.

Theo cách tương tự để thay đổi cấp độ cho mỗi người xử lý sử dụng hàm Handler.setLevel ().

import logging
import logging.handlers

LOG_FILENAME = '/tmp/logging_rotatingfile_example.out'

# Set up a specific logger with our desired output level
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
          LOG_FILENAME, maxBytes=20, backupCount=5)

handler.setLevel(logging.CRITICAL)

my_logger.addHandler(handler)

vallentin

22.2K6 Huy hiệu vàng56 Huy hiệu bạc76 Huy hiệu đồng6 gold badges56 silver badges76 bronze badges

Đã trả lời ngày 15 tháng 2 năm 2010 lúc 16:25Feb 15, 2010 at 16:25

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

VadikusvadikusVadikus

9915 Huy hiệu bạc5 Huy hiệu Đồng5 silver badges5 bronze badges

4

Sử dụng Trình quản lý ngữ cảnh - [đơn giản nhất]most simple ]

import logging 

class DisableLogger():
    def __enter__(self):
       logging.disable(logging.CRITICAL)
    def __exit__(self, exit_type, exit_value, exit_traceback):
       logging.disable(logging.NOTSET)

Ví dụ về việc sử dụng:

with DisableLogger():
    do_something()

Nếu bạn cần một giải pháp hạt mịn [phức tạp hơn], bạn có thể nhìn vào AdvancedLoggermore COMPLEX] fine-grained solution you can look at AdvancedLogger

AdvancedLogger can be used for fine grained logging temporary modifications

How it works:
Modifications will be enabled when context_manager/decorator starts working and be reverted after

Usage:
AdvancedLogger can be used
- as decorator `@AdvancedLogger()`
- as context manager `with  AdvancedLogger():`

It has three main functions/features:
- disable loggers and it's handlers by using disable_logger= argument
- enable/change loggers and it's handlers by using enable_logger= argument
- disable specific handlers for all loggers, by using  disable_handler= argument

All features they can be used together

Các trường hợp sử dụng cho AdvancedLogger

# Disable specific logger handler, for example for stripe logger disable console
AdvancedLogger(disable_logger={"stripe": "console"})
AdvancedLogger(disable_logger={"stripe": ["console", "console2"]})

# Enable/Set loggers
# Set level for "stripe" logger to 50
AdvancedLogger(enable_logger={"stripe": 50})
AdvancedLogger(enable_logger={"stripe": {"level": 50, "propagate": True}})

# Adjust already registered handlers
AdvancedLogger(enable_logger={"stripe": {"handlers": "console"}

Đã trả lời ngày 27 tháng 11 năm 2013 lúc 19:19Nov 27, 2013 at 19:19

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

Pymenpymenpymen

4.98540 Huy hiệu bạc33 Huy hiệu đồng40 silver badges33 bronze badges

5

(Câu hỏi chết lâu, nhưng đối với những người tìm kiếm trong tương lai)

Gần hơn với mã/ý định của poster ban đầu, điều này phù hợp với tôi dưới Python 2.6

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
0

Gotcha tôi phải làm việc là loại bỏ trình xử lý stdout sau khi thêm một cái mới; Mã logger dường như tự động thêm lại stdout nếu không có trình xử lý.

IndexOutoFbound Fix: Nếu bạn gặp lỗi indexOutoFbound trong khi khởi tạo lhstdout, hãy di chuyển khởi tạo thành sau khi thêm trình xử lý tệp của bạn, tức là. If you get a IndexOutOfBound Error while instantiating lhStdout, move the instantiation to after adding your file handler i.e.

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
1

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

Đã trả lời ngày 23 tháng 6 năm 2011 lúc 19:31Jun 23, 2011 at 19:31

l82kyl82kyl82ky

5334 Huy hiệu bạc2 Huy hiệu Đồng4 silver badges2 bronze badges

1

Để vô hiệu hóa hoàn toàn ghi nhật ký::

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
2

Để cho phép ghi nhật ký::

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
3

Các câu trả lời khác cung cấp các công việc xung quanh không giải quyết đầy đủ vấn đề, chẳng hạn như

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
4

và, đối với một số

logging.critical('This is a critical error message')
1 lớn hơn 50,

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
5

Vấn đề với giải pháp đầu tiên là nó chỉ hoạt động cho bộ ghi gốc. Các trình ghi nhật ký khác được tạo bằng cách sử dụng, giả sử,

logging.critical('This is a critical error message')
2 không bị vô hiệu hóa bằng phương pháp này.

Giải pháp thứ hai không ảnh hưởng đến tất cả các nhật ký. Nhưng nó giới hạn đầu ra ở mức trên mức được đưa ra, vì vậy người ta có thể ghi đè nó bằng cách đăng nhập với mức lớn hơn 50.

Có thể được ngăn chặn bởi

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
6

theo như tôi có thể nói (sau khi xem xét nguồn) là cách duy nhất để vô hiệu hóa hoàn toàn ghi nhật ký.

Thị trấn

1922 Huy hiệu bạc9 Huy hiệu Đồng2 silver badges9 bronze badges

Đã trả lời ngày 21 tháng 5 năm 2017 lúc 19:36May 21, 2017 at 19:36

STARFREMFRYstarfry

8.7856 Huy hiệu vàng61 Huy hiệu bạc93 Huy hiệu Đồng6 gold badges61 silver badges93 bronze badges

1

Có một số câu trả lời thực sự tốt ở đây, nhưng rõ ràng đơn giản nhất không được xem xét quá nhiều (chỉ từ Infinito).

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
7

Điều này vô hiệu hóa logger gốc, và do đó tất cả các logger khác. Tôi chưa thực sự thử nghiệm nhưng nó cũng nên là nhanh nhất.

Từ mã ghi nhật ký trong Python 2.7 Tôi thấy điều này

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
8

Điều đó có nghĩa là khi nó bị vô hiệu hóa, không có trình xử lý nào được gọi và nó sẽ hiệu quả hơn khi lọc đến giá trị rất cao hoặc thiết lập một trình xử lý không có người điều khiển chẳng hạn.

Đã trả lời ngày 13 tháng 12 năm 2011 lúc 19:59Dec 13, 2011 at 19:59

andrea_crottiandrea_crottiandrea_crotti

2.9022 Huy hiệu vàng27 Huy hiệu bạc33 Huy hiệu Đồng2 gold badges27 silver badges33 bronze badges

4

Ghi nhật ký có cấu trúc sau:

  • Loggers được sắp xếp theo hệ thống phân cấp không gian tên với các dấu phân cách chấm;
  • Mỗi logger có một cấp độ (
    logging.critical('This is a critical error message')
    
    3 theo mặc định cho bộ ghi Root và
    logging.critical('This is a critical error message')
    
    4 theo mặc định cho các bộ ghi nhật ký không root) và mức hiệu quả (mức hiệu quả của bộ ghi nhật ký cha mẹ đối với các bộ ghi nhật ký không có root với mức
    logging.critical('This is a critical error message')
    
    4 và mức của bộ ghi nếu không thì);
  • Mỗi logger có một danh sách các bộ lọc;
  • Mỗi logger có một danh sách các trình xử lý;
  • Mỗi trình xử lý có một cấp độ (
    logging.critical('This is a critical error message')
    
    4 theo mặc định);
  • Mỗi người xử lý có một danh sách các bộ lọc.

Ghi nhật ký có quy trình sau (được biểu thị bằng sơ đồ):

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

Do đó, để vô hiệu hóa một bộ ghi âm cụ thể, bạn có thể áp dụng một trong các chiến lược sau:

  1. Đặt mức của logger thành

    logging.critical('This is a critical error message')
    
    7.

    • Sử dụng API chính:

      logger = logging.getLogger()
      logger.disabled = True
      ... whatever you want ...
      logger.disabled = False
      
      9
    • Sử dụng API config:

      logging.basicConfig(level=your_level)
      
      0
  2. Thêm bộ lọc

    logging.critical('This is a critical error message')
    
    8 vào logger.

    • Sử dụng API chính:

      logging.basicConfig(level=your_level)
      
      1
    • Sử dụng API config:

      logging.basicConfig(level=your_level)
      
      2
  3. Thêm bộ lọc

    logging.critical('This is a critical error message')
    
    8 vào logger.

    • Sử dụng API chính:

      logging.basicConfig(level=your_level)
      
      3
    • Sử dụng API config:

      logging.basicConfig(level=your_level)
      
      4

Thêm bộ lọc

logging.critical('This is a critical error message')
8 vào logger.

Ghi chú. - Đặt thuộc tính

import logging
import logging.handlers

LOG_FILENAME = '/tmp/logging_rotatingfile_example.out'

# Set up a specific logger with our desired output level
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
          LOG_FILENAME, maxBytes=20, backupCount=5)

handler.setLevel(logging.CRITICAL)

my_logger.addHandler(handler)
7 của logger thành
import logging
import logging.handlers

LOG_FILENAME = '/tmp/logging_rotatingfile_example.out'

# Set up a specific logger with our desired output level
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
          LOG_FILENAME, maxBytes=20, backupCount=5)

handler.setLevel(logging.CRITICAL)

my_logger.addHandler(handler)
8 chưa phải là một chiến lược khác, vì nó không phải là một phần của API công khai (xem https://bugs.python.org/issue36318):

logging.basicConfig(level=your_level)
5

Đã trả lời ngày 20 tháng 4 năm 2020 lúc 22:27Apr 20, 2020 at 22:27

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

MaggyeromaggyeroMaggyero

5.0663 Huy hiệu vàng33 Huy hiệu bạc54 Huy hiệu đồng3 gold badges33 silver badges54 bronze badges

2

Không cần chuyển hướng stdout. Đây là cách tốt hơn để làm điều đó:

logging.basicConfig(level=your_level)
6

Một cách thậm chí đơn giản hơn là:

logging.basicConfig(level=your_level)
7

Đã trả lời ngày 15 tháng 2 năm 2010 lúc 16:05Feb 15, 2010 at 16:05

Ehsan foroughiehsan foroughiEhsan Foroughi

2.9302 Huy hiệu vàng18 Huy hiệu bạc19 Huy hiệu đồng2 gold badges18 silver badges19 bronze badges

2

logging.basicConfig(level=your_level)
8

Đầu ra bảng điều khiển:

logging.basicConfig(level=your_level)
9

Nội dung tệp test.log:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
0

Đã trả lời ngày 15 tháng 9 năm 2018 lúc 7:27Sep 15, 2018 at 7:27

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

Shawn Hushawn HuShawn Hu

3092 Huy hiệu bạc7 Huy hiệu đồng2 silver badges7 bronze badges

1

Xem xét bạn đã tạo trình xử lý của riêng mình, sau đó ngay trước khi bạn thêm chúng vào logger, bạn có thể làm:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
1

Sẽ loại bỏ StreamHandler mặc định. Điều này đã làm việc cho tôi trên Python 3.8 sau khi gặp phải các bản ghi không mong muốn đến Stderr, khi chúng đáng lẽ phải được ghi lại vào một tệp.

Đã trả lời ngày 13 tháng 12 năm 2021 lúc 17:08Dec 13, 2021 at 17:08

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

Elbudelbudelbud

556 Huy hiệu Đồng6 bronze badges

Tôi không biết rõ về mô -đun đăng nhập, nhưng tôi đang sử dụng nó theo cách mà tôi thường muốn vô hiệu hóa các tin nhắn gỡ lỗi (hoặc thông tin). Bạn có thể sử dụng

import logging
import logging.handlers

LOG_FILENAME = '/tmp/logging_rotatingfile_example.out'

# Set up a specific logger with our desired output level
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
          LOG_FILENAME, maxBytes=20, backupCount=5)

handler.setLevel(logging.CRITICAL)

my_logger.addHandler(handler)
9 để đặt mức ghi nhật ký thành quan trọng hoặc cao hơn.

Ngoài ra, bạn có thể thay thế sys.stderr và sys.stdout bằng một tệp mở để viết. Xem http://docs.python.org/l Library/sys.html#sys.stdout. Nhưng tôi sẽ không đề nghị điều đó.stdout. But I wouldn't recommend that.

Đã trả lời ngày 15 tháng 2 năm 2010 lúc 15:07Feb 15, 2010 at 15:07

KrabkrabKrab

2.08814 Huy hiệu bạc23 Huy hiệu đồng14 silver badges23 bronze badges

1

Bạn cũng có thể:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
2

Đã trả lời ngày 11 tháng 3 năm 2015 lúc 12:38Mar 11, 2015 at 12:38

ITALO MAIAITALO MAIAItalo Maia

1.9463 huy hiệu vàng18 Huy hiệu bạc29 Huy hiệu đồng3 gold badges18 silver badges29 bronze badges

1

Bằng cách thay đổi một cấp độ trong "logging.config.dictconfig", bạn sẽ có thể đưa toàn bộ cấp độ đăng nhập lên một cấp độ mới.

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
3

})

Đã trả lời ngày 13 tháng 11 năm 2019 lúc 17:03Nov 13, 2019 at 17:03

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

Tìm thấy một giải pháp thanh lịch bằng cách sử dụng các trình trang trí, giải quyết vấn đề sau: Điều gì sẽ xảy ra nếu bạn đang viết một mô -đun với một số chức năng, mỗi trong số chúng có một số tin nhắn gỡ lỗi và bạn muốn vô hiệu hóa việc đăng nhập tất cả các chức năng nhưng một chức năng bạn hiện đang tập trung vào?decorators, which addresses the following problem: what if you are writing a module with several functions, each of them with several debugging messages, and you want to disable logging in all functions but the one you are currently focusing on?

Bạn có thể làm điều đó bằng cách sử dụng các nhà trang trí:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
4

Sau đó, bạn có thể làm:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
5

Ngay cả khi bạn gọi

import logging 

class DisableLogger():
    def __enter__(self):
       logging.disable(logging.CRITICAL)
    def __exit__(self, exit_type, exit_value, exit_traceback):
       logging.disable(logging.NOTSET)
0 từ trong vòng
import logging 

class DisableLogger():
    def __enter__(self):
       logging.disable(logging.CRITICAL)
    def __exit__(self, exit_type, exit_value, exit_traceback):
       logging.disable(logging.NOTSET)
1, các tin nhắn gỡ lỗi từ
import logging 

class DisableLogger():
    def __enter__(self):
       logging.disable(logging.CRITICAL)
    def __exit__(self, exit_type, exit_value, exit_traceback):
       logging.disable(logging.NOTSET)
0 sẽ không được hiển thị. Điều này đảm bảo bạn sẽ chỉ thấy các tin nhắn gỡ lỗi từ chức năng bạn đang tập trung vào.

Hy vọng nó giúp!

Đã trả lời ngày 14 tháng 11 năm 2019 lúc 14:36Nov 14, 2019 at 14:36

Bạn có thể thay đổi mức độ của chế độ gỡ lỗi cho trình xử lý cụ thể thay vì vô hiệu hóa hoàn toàn.

Vì vậy, nếu bạn có một trường hợp bạn muốn dừng chế độ gỡ lỗi chỉ cho bảng điều khiển nhưng bạn vẫn cần giữ các cấp độ khác như lỗi. Bạn có thể làm điều này như những điều sau

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
6

Đã trả lời ngày 5 tháng 10 năm 2020 lúc 12:14Oct 5, 2020 at 12:14

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

aibrahimaibrahimaibrahim

2192 Huy hiệu bạc4 Huy hiệu đồng2 silver badges4 bronze badges

Nó không phải là giải pháp 100%, nhưng không có câu trả lời nào ở đây giải quyết vấn đề của tôi. Tôi có mô -đun ghi nhật ký tùy chỉnh xuất bản văn bản màu theo mức độ nghiêm trọng. Tôi cần phải vô hiệu hóa đầu ra stdout vì nó đang sao chép nhật ký của tôi. Tôi ổn với các nhật ký quan trọng được xuất ra vào bảng điều khiển vì tôi gần như không sử dụng nó. Tôi đã không kiểm tra nó cho Stderr vì tôi không sử dụng nó trong việc ghi nhật ký của mình, nhưng nên hoạt động giống như stdout. Nó đặt ra quan trọng là mức độ nghiêm trọng tối thiểu chỉ đối với stdout (stderr nếu được yêu cầu).

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
7

Đã trả lời ngày 25 tháng 3 lúc 10:46Mar 25 at 10:46

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

lớp con cái xử lý bạn muốn có thể vô hiệu hóa tạm thời:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
8

Tìm người xử lý theo tên là khá dễ dàng:

'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL
9

một khi được tìm thấy:

logging.critical('This is a critical error message')
0

Đã trả lời ngày 13 tháng 2 năm 2019 lúc 21:17Feb 13, 2019 at 21:17

Hướng dẫn python disable logger - trình ghi nhật ký vô hiệu hóa python

jake77jake77jake77

1.7462 huy hiệu vàng14 Huy hiệu bạc21 Huy hiệu đồng2 gold badges14 silver badges21 bronze badges