1 #include <log4cpp/Category.hh>
2 #include <log4cpp/RollingFileAppender.hh>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <errno.h>
6 #include <iostream>
7 
8 using namespace log4cpp;
9 using namespace std;
10 static const char* const test_message = "message";
11 
remove_impl(const char * filename)12 bool remove_impl(const char* filename)
13 {
14    int res = remove(filename);
15 
16    if (res != 0 && errno != ENOENT)
17       cout << "Can't remove file '" << filename << "'.\n";
18 
19    return res == 0 || (res != 0 && errno == ENOENT);
20 }
21 
remove_files()22 bool remove_files()
23 {
24    if (!remove_impl("rolling_file.log"))
25       return false;
26    if (!remove_impl("rolling_file.log.1"))
27       return false;
28    if (!remove_impl("rolling_file.log.2"))
29       return false;
30 
31    return true;
32 }
33 
setup()34 bool setup()
35 {
36    if (!remove_files())
37       return false;
38 
39    Category& root = Category::getRoot();
40    root.addAppender(new RollingFileAppender("rolling-appender", "rolling_file.log", 40, 3));
41    root.setPriority(Priority::DEBUG);
42 
43    return true;
44 }
45 
make_log_files()46 void make_log_files()
47 {
48    Category::getRoot().debugStream() << test_message << 1;
49    Category::getRoot().debugStream() << test_message << 2;
50    Category::getRoot().debugStream() << test_message << 3;
51    Category::getRoot().debugStream() << test_message << 4;
52    Category::getRoot().debugStream() << test_message << 5;
53 }
54 
exists(const char * filename)55 bool exists(const char* filename)
56 {
57    FILE* f = fopen(filename, "r");
58    if (f == NULL)
59    {
60       cout << "File '" << filename << "' doesn't exists.\n";
61       return false;
62    }
63 
64    fclose(f);
65 
66    return true;
67 }
68 
check_log_files()69 bool check_log_files()
70 {
71    bool result = exists("rolling_file.log") &&
72                  exists("rolling_file.log.1") &&
73                  exists("rolling_file.log.2");
74 
75    Category::shutdown();
76    return result && remove_files();
77 }
78 
main()79 int main()
80 {
81    if (!setup())
82    {
83       cout << "Setup has failed. Check for permissions on files 'rolling_file.log*'.\n";
84       return -1;
85    }
86 
87    make_log_files();
88 
89    if (check_log_files())
90       return 0;
91    else
92       return -1;
93 }