2012-04-04 11 views
7

मैं Symfony2 और एकलाप उपयोग कर रहा हूँ एक परिभाषित लॉगफ़ाइल में विशिष्ट लॉग में लिखने के लिए (mylogfile.log):सिम्फनी 2/मोनोलॉग: लॉग स्तर - केवल ऐप दिखाएं .INFO?

#config_dev.yml 
monolog: 
    handlers: 
     main: 
      type: stream 
      path: %kernel.logs_dir%/%kernel.environment%.log 
      level: debug 
     file: 
      type: stream 
      path: %kernel.logs_dir%/mylogfile.log 
      level: info 

मैं के माध्यम से मेरी नियंत्रक में लॉगफ़ाइल तक पहुँचने हूँ:

$logger = $this->get('logger'); // Log 
    $logger->info('somelogcontent'); 

अब मेरी मुद्दा कि मेरे लॉग फ़ाइल जिसका अर्थ यह मुझे सभी app.INFO लॉग देता है (जो है जो मैं चाहता) और request.INFO (जो मैं वास्तव में जरूरत नहीं है), पूरी जानकारी के स्तर का होता है:

[2012-04-04 11:13:17] request.INFO: Matched route ... blablabla 
[2012-04-04 11:13:17] app.INFO: somelogcontent 
... 

क्या कोई तरीका नहीं है request.INFO लॉग इन करने के लिए?

माइक

उत्तर

9

आप एक नया लकड़हारा सेवा है, जो यह अपनी कक्षाओं में इस्तेमाल किया जाना चाहिए बनाने के लिए किया है। इस तरह, config.yml:

services: 
    my_logger: 
    class: Monolog\Logger 
    arguments: [my_info] 
    calls: 
     - [pushHandler, [@my_log_handler]] 

    my_log_handler: 
    class: Monolog\Handler\StreamHandler 
    arguments: [%kernel.root_dir%/logs/my_info.log, 100] 

उपयोग (Controller में, उदाहरण के लिए):

$this->get('my_logger')->info('info message'); 

symfony cookbook में अधिक विस्तृत जानकारी।

+0

यदि आप 'my_logger' हैंडलर को स्तरित करना चाहते हैं तो क्या होगा? यानी, कल्पना करें कि आप अपने सभी नियंत्रकों को विभिन्न स्तरों के संदेशों को सेट करते हैं। कई जानकारी, अलर्ट, गलती विधियों का उपयोग करना। आप कॉन्फ़िगरेशन या उच्च प्रासंगिकता (अलर्ट या गलती) वाले लॉग इन में लिखने और जानकारी और चेतावनी वाले लोगों को लिखने के लिए कुछ पल में कॉन्फ़िगरेशन कैसे बताते हैं? ऐसा करने का कोई मौका? – ElPiter

+3

सुनिश्चित नहीं है कि मैं सही तरीके से प्रश्न समझता हूं, लेकिन मैं जवाब देने का प्रयास करूंगा।आपको हैंडलर में तर्क बदलना है (अब यह '100') दूसरे नंबर पर है (कहें, '200' कम लॉग इन करने के लिए)। 'मोनोलॉग \ मोनोलॉग' में वास्तविक मूल्यों की जांच करें। ऐसा करने के लिए सामान्य रूप से आपकी कोड कॉल जानकारी/डीबग/त्रुटि विधियां करना, लेकिन मूल्य 200 और उच्चतर के साथ केवल thoso लॉग इन किया जाएगा। –

+1

आप पूरी तरह से मेरे प्रश्न को समझ गए और वास्तव में मेरी समस्या हल की। ईमानदार होने के लिए, मुझे नहीं पता था कि वह पैरामीटर क्या था। शर्म की बात। बहुत बहुत धन्यवाद – ElPiter

1

आप उपयोगकर्ता चेतावनी स्तर कर सकते हैं। फ़ाइल: प्रकार: धारा पथ:% kernel.logs_dir%/mylogfile.log का स्तर: चेतावनी

$logger = $this->get('logger'); // Log 
$logger->alert('somelogcontent'); 
1

यह लॉग संदेश router_listener सेवा से आता है। आप इसे सेवाओं विन्यास फाइल में फिर से परिभाषित कर सकते हैं।

मैं अपने मुख्य बंडल config/services.yml में क्या किया है:

services: 

    # ... 

    router_listener: 
     class: %router_listener.class% 
     arguments: ['@router', %request_listener.http_port%, %request_listener.https_port%] 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onEarlyKernelRequest } 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 

यह बनाता है "मिलान मार्ग ..." लोग इन संदेशों लॉग इन करने की नहीं (RouterListener एक लकड़हारा नहीं है के रूप में अपने कन्स्ट्रक्टर तर्क में सेवा)।

+0

यह वास्तव में बहुत अच्छा है। मैंने अपनी पुरानी पोस्ट को देखा, जबकि मैं एक ही मुद्दे में फिर से दौड़ रहा था। ;) बहुत धन्यवाद! – Mike

6

संस्करण 2.4 और ऊपर (सावधान रहें, मोनोलॉगबंडल का रिलीज चक्र अब सिम्फनी के साथ सिंक्रनाइज़ नहीं किया गया है), अब आप सेवाओं को परिभाषित किए बिना कॉन्फ़िगरेशन के माध्यम से नए चैनलों को बहुत सरल बना सकते हैं।

monolog: 
    channels: ["my_channel"] 
    handlers: 
     file: 
      type: stream 
      path: %kernel.logs_dir%/mylogfile.log 
      level: info 
      channels: my_channel 

अब बस अपने नियंत्रक में नए चैनल के लिए स्वचालित रूप से बनाया लकड़हारा मिलती है:

$logger = $this->get('monolog.logger.my_channel'); 
$logger->info('somelogcontent'); 

मैं पुराने सवाल पता है, लेकिन MonologBundle~2.4 से इस नई सुविधा उल्लेख किया जाना चाहिए।

+1

monolog.logger.my_logger - क्या वह monolog.logger.my_channel होना चाहिए? – gingerCodeNinja

+0

दरअसल, मुझे मिला;) –

संबंधित मुद्दे