1 /*
2 * Copyright (c) 2014, Juniper Networks, Inc.
3 * All rights reserved.
4 * This SOFTWARE is licensed under the LICENSE provided in the
5 * ../Copyright file. By downloading, installing, copying, or otherwise
6 * using the SOFTWARE, you agree to be bound by the terms of that
7 * LICENSE.
8 * Phil Shafer, July 2014
9 */
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <unistd.h>
15 #include <errno.h>
16 #include <time.h>
17 #include <ctype.h>
18 #include <syslog.h>
19
20 #include "xo.h"
21 #include "xo_encoder.h"
22
23 void
test_syslog_open(void)24 test_syslog_open (void)
25 {
26 printf("syslog open\n");
27 }
28
29 void
test_syslog_close(void)30 test_syslog_close (void)
31 {
32 printf("syslog close\n");
33 }
34
35 void
test_syslog_send(const char * full_msg,const char * v0_hdr,const char * text_only)36 test_syslog_send (const char *full_msg, const char *v0_hdr,
37 const char *text_only)
38 {
39 printf("{{%s}}\n{{%s}}\n{{%s}}\n\n", full_msg, v0_hdr, text_only);
40 }
41
42 int
main(int argc,char ** argv)43 main (int argc, char **argv)
44 {
45 int unit_test = 1;
46 int fire = 0;
47 const char *tzone = "EST";
48
49 argc = xo_parse_args(argc, argv);
50 if (argc < 0)
51 return 1;
52
53 for (argc = 1; argv[argc]; argc++) {
54 if (xo_streq(argv[argc], "full"))
55 unit_test = 0;
56 else if (xo_streq(argv[argc], "fire"))
57 fire = 1;
58 else if (xo_streq(argv[argc], "tz"))
59 tzone = argv[++argc];
60 }
61
62 setenv("TZ", tzone, 1);
63 tzset();
64
65 if (!fire) {
66 xo_set_syslog_handler(test_syslog_open, test_syslog_send,
67 test_syslog_close);
68 }
69
70 if (unit_test) {
71 xo_set_unit_test_mode(1);
72 xo_open_log("test-program", LOG_PERROR, 0);
73 }
74
75 xo_set_version("3.1.4");
76 xo_set_syslog_enterprise_id(42); /* SunOs */
77
78 xo_open_container_h(NULL, "top");
79
80 xo_syslog(LOG_INFO | LOG_KERN, "animal-status",
81 "The {:animal} is {:state}", "snake", "loose");
82 xo_syslog(LOG_INFO | LOG_MAIL, "animal-consumed",
83 "My {:animal} ate your {:pet}", "snake", "hamster");
84 xo_syslog(LOG_NOTICE | LOG_DAEMON, "animal-talk",
85 "{:count/%d} {:animal} said {:quote}", 1, "owl", "\"e=m\\c[2]\"");
86
87 /*
88 <165>1 2003-10-11T22:14:15.003Z mymachine.example.com
89 evntslog - ID47 [exampleSDID@32473 iut="3" eventSource=
90 "Application" eventID="1011"] BOMAn application
91 event log entry...
92
93 This example is modeled after Example 1. However, this time it
94 contains STRUCTURED-DATA, a single element with the value
95 "[exampleSDID@32473 iut="3" eventSource="Application"
96 eventID="1011"]". The MSG itself is "An application event log
97 entry..." The BOM at the beginning of MSG indicates UTF-8 encoding.
98 */
99
100 xo_set_syslog_enterprise_id(32473);
101 xo_syslog(LOG_LOCAL4 | LOG_NOTICE, "ID47",
102 "{e:iut/%u}An {:event-source} {:event-id/%u} log entry",
103 3, "application", 1011);
104
105 xo_close_container_h(NULL, "top");
106
107 xo_finish();
108
109 return 0;
110 }
111