The logging is coming from here:
https://github.com/django/django/blob/43c471e81c27542e4dc392dfa2310c5a52db35d9/django/core/servers/basehttp.py#L103
where self.request is indeed a "socketobject"
I'm not sure if the WSGIRequest object is available at that point, so
possibly this just needs a documentation clarification.
On Thursday, September 15, 2016 at 7:32:25 PM UTC-4, Ben Whale wrote:
>
> Well my last reply was preemptery.
>
> A minimal working example can be produced via the following commands.
> First navigate to a suitable directory then,
> # virtualenv venv --no-site-packages
> # source venv/bin/activate
> # pip install django
> # django-admin startproject mwe
> # vim mwe/mwe/settings.y
>
> and then entering the following at the end of the settings.py file:
> LOGGING = {
>
> 'version': 1,
>
> 'disable_existing_loggers': False,
>
> 'formatters': {
>
> 'django.server': {
>
> '()': 'django.utils.log.ServerFormatter',
>
> 'format': '[%(server_time)s] %(message)s %(request)r',
>
> }
>
> },
>
> 'handlers': {
>
> 'django.server': {
>
> 'level': 'INFO',
>
> 'class': 'logging.StreamHandler',
>
> 'formatter': 'django.server',
>
> },
>
> },
>
> 'loggers': {
>
> 'django.server': {
>
> 'handlers': ['django.server'],
>
> 'level': 'INFO',
>
> 'propagate': False,
>
> },
>
> }
>
> }
>
> Then :wq
> # cd mwe
> # python manage.py runserver
>
> Navigate to http://127.0.0.1:8000/blargh
>
> The normal error message about routing will show. Switch back to the
> console and you'll see:
>
> # python manage.py runserver
> Performing system checks...
>
> System check identified no issues (0 silenced).
> September 15, 2016 - 23:12:05
> Django version 1.10.1, using settings 'mwe.settings'
> Starting development server at http://127.0.0.1:8000/
> Quit the server with CONTROL-C.
> Not Found: /blargh
> [15/Sep/2016 23:12:09] "GET /blargh HTTP/1.1" 404 1918
> <socket._socketobject object at 0x7fa14d58da60>
>
> That representation of the socket object is being produced by the
> "%(request)r" in the formatter.
>
> Chasing this back through the call stack the request object is set
> in /usr/lib/python2.7/SocketServer.py(652)__init__() as the socket. This is
> seems reasonable to me, so I guess some kind of processing of the request
> isn't being performed somewhere.
>
>
> On Friday, 16 September 2016 08:16:09 UTC+10, Ben Whale wrote:
>>
>> Thanks for the reply Tim
>>
>> Some testing seems to indicate that it is an issue with
>> django-rest-framework. When I contact the web server using urls managed by
>> django rest the issues occurs, when I do the same via url managed by
>> vanilla django the request variable in the context object is an instance of
>> WSGIRequest, which is far more sensible.
>>
>> I'm doing to do some more digging today to prove this and, assuming I'm
>> right, will pass the bug onto the django rest guys.
>>
>> Any hints on debugging this? I haven't entered the django code base much
>> before.
>>
>> On Thursday, 15 September 2016 23:21:59 UTC+10, Tim Graham wrote:
>>>
>>> If true, it does seem like a bug. Could you provide a test for Django's
>>> test suite or a sample project to reproduce it?
>>>
>>> On Thursday, September 15, 2016 at 6:53:55 AM UTC-4, Ben Whale wrote:
>>>>
>>>> Hi
>>>>
>>>> What I'd like to do is log the request body whenever the django.request
>>>> logger logs something. I had assumed that the extra context referred to as
>>>> request in
>>>> https://docs.djangoproject.com/en/1.10/topics/logging/#django-request
>>>> was something like an HTTPRequest object. It is, however, an instance
>>>> of socket._socketobject.
>>>>
>>>> Is it possible to get data for logging using the socket? For example
>>>> the get parameters, the post data, any information associated to a file
>>>> that was sent like what every has been read out of the socket? What about
>>>> the request headers?
>>>>
>>>> Why is a socket passed to the logger? I must admit that I assume this
>>>> to be a bug. The user has a very limited way of interacting with the
>>>> socket
>>>> via the string formatting syntax and the methods of the socket (as
>>>> introspected via dir) don't lend them selves to this form of access.
>>>>
>>>> I'm currently using django 1.10 if that helps.
>>>>
>>>> Thanks for any help.
>>>>
>>>>
>>>>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/16350e3f-2aba-497c-98cb-b8becbcff546%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.