python3 log to file AND stdout
import logging
logging.basicConfig(handlers=[logging.FileHandler('/var/log/runner/process1.log'),logging.StreamHandler()],format='%(asctime)s %(levelname)s %(message)s',level=logging.INFO)
logging.info('foo')
Encore mieux pour supporter le logrotate sans copytruncate :
import logging.handlers
logging.basicConfig(handlers=[logging.handlers.WatchedFileHandler('/var/log/worker/worker1.log'),logging.StreamHandler()],format='%(asctime)s %(levelname)s %(message)s',level=logging.INFO)
/var/log/worker/*.log {
monthly
rotate 12
compress
delaycompress
missingok
notifempty
create 644 root root
}
Python 2:
import logging as loggingg
logging = loggingg.getLogger('simple_example')
logging.setLevel(loggingg.INFO)
formatter = loggingg.Formatter('%(asctime)s %(levelname)s %(message)s')
console_handler = loggingg.StreamHandler()
console_handler.setLevel(loggingg.INFO)
console_handler.setFormatter(formatter)
file_handler = loggingg.FileHandler('/var/log/worker/worker3.log')
file_handler.setLevel(loggingg.INFO)
file_handler.setFormatter(formatter)
logging.addHandler(console_handler)
logging.addHandler(file_handler)
Logrotate n'est pas vraiment fait pour tourner hourly, mais on peut s'en servir pour dépanner.
Pour ça créer la conf dans un autre répertoire que celui de logrotate (PAS ici : /etc/logrotate.d/). Car si vous la créez ici, elle sera executé daily avec les autres configuration !
Par exemple : /root/test-logrotate.conf
Dans la conf il faut préciser une extension qui ira bien pour les fichiers grâce à la directive dateformat :
/home/foo/bar.log {
daily
dateformat -%Y%m%d-%s
compress
copytruncate
missingok
rotate 100
notifempty
dateext
}
Noter aussi le copytruncate, et le daily
Ensuite mettre en cron toutes les heures cette commande : logrotate --force /root/test-logrotate.conf
Dans l'urgence on peut avoir besoin de forcer la rotation de logs un peu trop fat ^^
logrotate --force $CONFIG_FILE
Pour ne plus que le cron de logrotate gueule sur les vks ovh