1ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe#include <unistd.h> 2ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe#include <fcntl.h> 3ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe#include <string.h> 4ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe#include <stdarg.h> 5e46d809110bd4ad2980ca64931b683673444454bJens Axboe#include <syslog.h> 63c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe 7ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe#include "fio.h" 83c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe 9e46d809110bd4ad2980ca64931b683673444454bJens Axboeint log_valist(const char *str, va_list args) 10e46d809110bd4ad2980ca64931b683673444454bJens Axboe{ 11734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe char buffer[1024]; 12734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe size_t len; 13734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe 14734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe len = vsnprintf(buffer, sizeof(buffer), str, args); 1598ffb8f3ecebed9984d1744f142eb8be10c14dbdKen Raeburn len = min(len, sizeof(buffer) - 1); 16734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe 1703a0825286c82d79b8d489faf33a76d50713474bJens Axboe if (is_backend) 1803a0825286c82d79b8d489faf33a76d50713474bJens Axboe len = fio_server_text_output(FIO_LOG_INFO, buffer, len); 19734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe if (log_syslog) 20734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe syslog(LOG_INFO, "%s", buffer); 21734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe else 22734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe len = fwrite(buffer, len, 1, f_out); 23734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe 24734f38cb03e03390cddfd2d31cdbbd3f3d7f9e7fJens Axboe return len; 25e46d809110bd4ad2980ca64931b683673444454bJens Axboe} 26e46d809110bd4ad2980ca64931b683673444454bJens Axboe 2713755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboeint log_local_buf(const char *buf, size_t len) 2813755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe{ 2913755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe if (log_syslog) 3013755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe syslog(LOG_INFO, "%s", buf); 3113755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe else 3213755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe len = fwrite(buf, len, 1, f_out); 3313755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe 3413755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe return len; 3513755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe} 3613755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe 37ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboeint log_info(const char *format, ...) 383c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe{ 39ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe char buffer[1024]; 40ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe va_list args; 41ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe size_t len; 423c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe 43ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe va_start(args, format); 44ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe len = vsnprintf(buffer, sizeof(buffer), format, args); 45ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe va_end(args); 4698ffb8f3ecebed9984d1744f142eb8be10c14dbdKen Raeburn len = min(len, sizeof(buffer) - 1); 47f29b25a370598d387e539c3dcae126274c6cbf4dJens Axboe 48ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe if (is_backend) 49084d1c6f817eacaaefa1de4f0637ef6c1405d74bJens Axboe return fio_server_text_output(FIO_LOG_INFO, buffer, len); 5013755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe else if (log_syslog) { 5113755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe syslog(LOG_INFO, "%s", buffer); 5213755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe return len; 5313755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe } else 54ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe return fwrite(buffer, len, 1, f_out); 55f29b25a370598d387e539c3dcae126274c6cbf4dJens Axboe} 56f29b25a370598d387e539c3dcae126274c6cbf4dJens Axboe 57fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fuint log_info_flush(void) 58fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fu{ 59fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fu if (is_backend || log_syslog) 60fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fu return 0; 61fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fu 62fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fu return fflush(f_out); 63fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fu} 64fdd5f15f8231e8c91c4deff22e630a34addd0fefVincent Kang Fu 65ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboeint log_err(const char *format, ...) 66fb71fbd73027a2d6202be9b9b1480bb845ea52dfJens Axboe{ 67ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe char buffer[1024]; 68ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe va_list args; 69ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe size_t len; 70f29b25a370598d387e539c3dcae126274c6cbf4dJens Axboe 71ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe va_start(args, format); 72ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe len = vsnprintf(buffer, sizeof(buffer), format, args); 73ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe va_end(args); 7498ffb8f3ecebed9984d1744f142eb8be10c14dbdKen Raeburn len = min(len, sizeof(buffer) - 1); 75fb71fbd73027a2d6202be9b9b1480bb845ea52dfJens Axboe 76ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe if (is_backend) 77084d1c6f817eacaaefa1de4f0637ef6c1405d74bJens Axboe return fio_server_text_output(FIO_LOG_ERR, buffer, len); 7813755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe else if (log_syslog) { 7913755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe syslog(LOG_INFO, "%s", buffer); 8013755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe return len; 8113755d946d034eb7395a818db7ace2c9cb60b4cbJens Axboe } else { 821f39e5556fc0418ac6d1bd8531a91c94836a6350Jens Axboe if (f_err != stderr) { 831f39e5556fc0418ac6d1bd8531a91c94836a6350Jens Axboe int fio_unused ret; 841f39e5556fc0418ac6d1bd8531a91c94836a6350Jens Axboe 851f39e5556fc0418ac6d1bd8531a91c94836a6350Jens Axboe ret = fwrite(buffer, len, 1, stderr); 861f39e5556fc0418ac6d1bd8531a91c94836a6350Jens Axboe } 87fb71fbd73027a2d6202be9b9b1480bb845ea52dfJens Axboe 88ac9b9101f1ef57965d6ffd51f143274a1eb665efJens Axboe return fwrite(buffer, len, 1, f_err); 89f29b25a370598d387e539c3dcae126274c6cbf4dJens Axboe } 90e3cedca76d9fc104eb4f6f869606fb5bf4c0d59cJens Axboe} 913ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe 923ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboeconst char *log_get_level(int level) 933ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe{ 943ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe static const char *levels[] = { "Unknown", "Debug", "Info", "Error", 953ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe "Unknown" }; 963ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe 973ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe if (level >= FIO_LOG_NR) 983ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe level = FIO_LOG_NR; 993ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe 1003ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe return levels[level]; 1013ad04399c576bb7935b9a7b8c07d5acf373a7bc4Jens Axboe} 102