рд╣реИрд▓реЛ% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд Django рдкреЛрд░реНрдЯрд▓ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмреЛрдирд╕ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд░реЗрдлрд░рд▓ рдХреА рдРрд╕реА рдкреНрд░рдгрд╛рд▓реАред рд▓реЗрдХрд┐рди рдмреЛрдирд╕ рддрднреА рдЕрд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдордВрддреНрд░рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп рд╣реЛред рдЖрдЬ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдореЗрд░реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЖрдЗрдП, рдЙрд╕реЗ рдЗрд╕рдХрд╛ рджреЛрд╖реА рдард╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ ...
рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ
рдХреЛрд░ apliku рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд░рдЦрддрд╛ рд╣реВрдВред рдЗрд╕ рдПрдкреНрд▓реЗрдЯ рдореЗрдВ рд╣рдо
рдорд┐рдбрд▓рд╡реЗрдпрд░ рдПрд░реЛ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗред
import logging import logging.handlers bytes=1024000 count=10 formatter = logging.Formatter("%(asctime)s-%(message)s") MODELS_FILE = '/home/ramovsky/users.log' logmodels = logging.getLogger('users') logmodels.setLevel(logging.DEBUG) handler = logging.handlers.RotatingFileHandler(MODELS_FILE, maxBytes=bytes, backupCount=count) handler.setFormatter(formatter) logmodels.addHandler(handler) class TrackUsersMiddleware(object): def process_request(self, request): ip = request.META.get('REMOTE_ADDR', '') or request.META.get('HTTP_X_FORWARDED_FOR', '') logmodels.debug('%s %s %s'%(request.user, request.path, ip))
рд╕реЗрдЯрд┐рдВрдЧрд╡реЗрдпрд░ рдореЗрдВ рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдЬреЛрдбрд╝реЗрдВ
MIDDLEWARE_CLASSES = (
рдФрд░ рдЖрдкрдХреЛ рд╣реЗрдбрд░ рдЬреЗрдирд░реЗрд╢рди
'HTTP_X_FORWARDED_FOR' рдХреЛ
/etc/nginx/nginx.conf рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛
рд╣реЛрдЧрд╛location / {
#---- cut -----
fastcgi_param REMOTE_ADDR $remote_addr;
}
Django рдФрд░ Nginx рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ред рд╣рдо рд▓реЙрдЧ
grep -E 'AnonymousUser | User1 | User2' рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ ред рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рддрдХрдиреАрдХреЛрдВ рдФрд░ рдмреЛрдирд╕ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдХрд┐рддрдирд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВ:
Noob рд╡рд░реНрддрдорд╛рди рдЖрдИрдкреА рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд░реЗрдЧрд╛ред рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ
2011-04-20 14:00:03,123-AnonymousUser /accounts/login/ 80.91.173.10
2011-04-20 14:00:22,967-User1
2011-04-20 14:00:22,967-User1 /logout/ 80.91.173.10
2011-04-20 14:01:03,123-AnonymousUser /accounts/login/ 80.91.173.10
2011-04-20 14:01:22,967-User2
2011-04-20 14:01:22,967-User2 /logout/ 80.91.173.10
рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд╣реА рдЖрдИрдкреА рд╕реЗ рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдУрд░ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдПрдХ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЖрдИрдкреА рдпрд╛ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред
2011-04-20 14:00:03,123-AnonymousUser /accounts/login/ 18.11.173.10
2011-04-20 14:00:22,967-User1
2011-04-20 14:00:22,967-User1 /logout/ 18.11.173.10
2011-04-20 14:01:03,123-AnonymousUser /accounts/login/ 34.91.173.10
2011-04-20 14:01:22,967-User2
2011-04-20 14:01:22,967-User2 /logout/ 34.91.173.10
рдЖрдИрдкреА тАЛтАЛрдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЫрджреНрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕рдЦреНрддреА рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╣реИред
рдпрджрд┐
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдкрдХрдбрд╝рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд╣ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЧрдВрднреАрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдордиреЛрд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рддрдХрдиреАрдХ рдХреАред рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмреЛрдирд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддрд╛рдХрд┐ рд▓рд╛рд▓рдЪ рдФрд░ рдЕрд╢реБрджреНрдзрддрд╛ рд╕реЗ рдЕрдВрдзрд╛ рд╣реЛ, рд╡рд╣ рдЕрдкрдиреА рд╕рддрд░реНрдХрддрд╛ рдЦреЛ рджреЗрдЧрд╛ рдФрд░ рд▓реЙрдЧ рдореЗрдВ рдЙрд╕рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧреАред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рд╕рднреА рдЕрдЪреНрдЫреЗ рдФрд░ рдИрдорд╛рдирджрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред рджрд░рдЕрд╕рд▓, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдирдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдкреЛрд░реНрдЯрд▓реНрд╕ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред