2011-07-11 36 views

Trả lời

12

Như đã đề cập, các trình xử lý rất dễ tạo và thêm rằng bạn có thể sử dụng hai trình xử lý tốt hơn. Tuy nhiên, nếu vì lý do nào đó bạn muốn dính vào một, Python logging cookbook có phần mô tả nhiều hay ít những gì bạn muốn làm: đăng nhập vào cả bàn điều khiển và tệp, nhưng ở các cấp độ khác nhau (nó thậm chí còn cho bạn biết cách thực hiện định dạng khác). Nó thực hiện nó với một đơn StreamHandler chứ không phải là một FileHandler, mặc dù:

import logging 

# set up logging to file - see previous section for more details 
logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
        datefmt='%m-%d %H:%M', 
        filename='/temp/myapp.log', 
        filemode='w') 
# define a Handler which writes INFO messages or higher to the sys.stderr 
console = logging.StreamHandler() 
console.setLevel(logging.INFO) 
# set a format which is simpler for console use 
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
# tell the handler to use this format 
console.setFormatter(formatter) 
# add the handler to the root logger 
logging.getLogger('').addHandler(console) 

# Now, we can log to the root logger, or any other logger. First the root... 
logging.info('Jackdaws love my big sphinx of quartz.') 

# Now, define a couple of other loggers which might represent areas in your 
# application: 

logger1 = logging.getLogger('myapp.area1') 
logger2 = logging.getLogger('myapp.area2') 

logger1.debug('Quick zephyrs blow, vexing daft Jim.') 
logger1.info('How quickly daft jumping zebras vex.') 
logger2.warning('Jail zesty vixen who grabbed pay from quack.') 
logger2.error('The five boxing wizards jump quickly.') 

Edit: Như đã thảo luận trong các ý kiến ​​mã này vẫn tạo ra hai bộ xử lý, nhưng "giấu" một xây dựng thông qua việc sử dụng các basicConfig() . Tôi thực sự khuyến khích bạn tạo cả hai cách rõ ràng.

+0

Đây vẫn là hai trình xử lý. Chỉ bạn mới "che giấu" việc tạo ra 'FileHandler' bằng' basicConfig (...) ', tôi muốn tạo chúng một cách rõ ràng. – plundra

+0

Bạn nói đúng, tất nhiên. Tuy nhiên, tôi cho rằng điều này (hoặc tương tự) là những gì người hỏi có trong tâm trí khi anh ta nói rằng anh ta đã xuất ra hai nơi chỉ với một logger. Tôi cũng phải đồng ý với bạn về điểm khác của bạn: nó rõ ràng hơn và dễ hiểu hơn để khai báo cả hai trình xử lý IMO một cách rõ ràng. – bdeniker

2

Không. Đầu ra Tệp và Màn hình nghĩa là bạn cần hai trình xử lý.

+0

Với một trình xử lý, nó hiện đang ghi vào cả tệp và màn hình. Nhưng cả hai cùng cấp (logging.DEBUG). – cssndrx

+0

@cssndrx: "một trình xử lý, hiện tại nó đang ghi vào cả tệp và màn hình". Tôi thấy khó hiểu. Vui lòng ** cập nhật ** câu hỏi để bao gồm cấu hình ghi nhật ký bạn đang sử dụng để thực hiện điều này. –

+0

@eryksun: Nhiều điều "có thể được thực hiện". Chúng ta cần xem họ đang thực sự làm gì **. –

Các vấn đề liên quan