Tidak melihat log Django di Heroku

14

Saya tidak melihat entri log (pada tingkat INFO) dibuat oleh Django di log Heroku saya.

Ini adalah konfigurasi saya:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
        'not_development_filter': {
            '()': NotDevelopmentFilter,
        },
    },
    'handlers': {
        'console':{
            'level': 'INFO',
            'class': 'logging.StreamHandler',
        },
        'null': {
            'class': 'django.utils.log.NullHandler',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['not_development_filter'],
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        }
    },
    'loggers': {
        '': {
            'handlers': ['mail_admins', 'console'],
            'level': 'INFO',
        },
        'django': {
            'handlers': ['console'],
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'py.warnings': {
            'handlers': ['console'],
        },
    }
}

Saya ingin melihat entri log di antarmuka Heroku. Tahu kenapa aku tidak melihat mereka di sana?

Ram Rachum
sumber
Apakah Anda melihat sesuatu jika Anda hanya ingin printsesuatu stdout?
anatoly techtonik
Sudah dua tahun;)
Ram Rachum
3
Saya menemukan itu masih belum terjawab. =)
anatoly techtonik
1
@RamRachum Jika sudah terpecahkan, tulis jawaban, atau tutup entah bagaimana - jika tidak maka akan terus muncul di radar orang.
Mike Fiedler

Jawaban:

1

Di aplikasi memulai python , untuk log yang tidak ditandai django, ERRORlog level muncul di herokulog, tetapi INFOlog tidak.

Untuk membuatnya berfungsi untuk log yang tidak ditandai django, diperlukan konfigurasi seperti berikut (mirip dengan milik Anda):

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
        },
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

Jadi, jika Anda menyesuaikan konfigurasi Anda menjadi seperti python-memulai, termasuk Procfile, semoga bekerja.

Berikut adalah log yang tidak ditandai django, yang saya tambahkan ke views/hello.py:

import logging
logger = logging.getLogger(__name__)

# Create your views here.
def index(request):
    logger.error('testing logging!')
    logger.info('testing info logging')
    logger.debug('testing debug logging')

    # return HttpResponse('Hello from Python!')
    return render(request, 'index.html')

Ketika saya pertama kali mencobanya, hanya log kesalahan yang muncul. Ketika saya menambahkan konfigurasi logging di potongan kode di atas yang sebelumnya, info dan log kesalahan muncul. Ini semua dengan DEBUG = False(diubah dari kode di repo, yang memiliki DEBUG = True).

Mungkin lebih baik daripada memiliki kunci string kosong, jadi semuanya dicatat, untuk memiliki loggersentri yang lebih spesifik daripada hanya string kosong ( '').

Akhirnya, dalam file log Anda, ada kasus di mana log INFO tidak akan muncul di konsol, atau Heroku log: Jika itu adalah log INFO ke django.request, dengan konfigurasi Anda hanya akan masuk 'mail_admins'karena propagatememang False. Saya pikir dalam hal ini, akan lebih masuk akal untuk propagatediatur True.

Benjamin Atkin
sumber