UnitTest( logger.asp )

### Prototype ###
(INFO)Myth turns to be truth.

### Text file ###
(DEBUG)	A working developer test Δ.	2016-11-22T18:43:48Z
(INFO)	Myth turns to be truth.	2016-11-22T18:43:48Z
(DEBUG)	A working developer test Δ.	2016-11-30T06:12:22Z
(INFO)	Myth turns to be truth.	2016-11-30T06:12:22Z
(DEBUG)	A working developer test Δ.	2016-11-30T11:00:27Z
(INFO)	Myth turns to be truth.	2016-11-30T11:00:27Z
(DEBUG)	A working developer test Δ.	2016-11-30T15:15:04Z
(INFO)	Myth turns to be truth.	2016-11-30T15:15:04Z
(DEBUG)	A working developer test Δ.	2016-12-01T01:12:12Z
(INFO)	Myth turns to be truth.	2016-12-01T01:12:12Z
(DEBUG)	A working developer test Δ.	2017-01-14T18:17:41Z
(INFO)	Myth turns to be truth.	2017-01-14T18:17:41Z
(DEBUG)	A working developer test Δ.	2017-01-15T05:41:07Z
(INFO)	Myth turns to be truth.	2017-01-15T05:41:07Z
(DEBUG)	A working developer test Δ.	2017-01-15T05:51:23Z
(INFO)	Myth turns to be truth.	2017-01-15T05:51:23Z
(DEBUG)	A working developer test Δ.	2017-01-15T22:48:10Z
(INFO)	Myth turns to be truth.	2017-01-15T22:48:10Z
(DEBUG)	A working developer test Δ.	2017-01-18T11:48:35Z
(INFO)	Myth turns to be truth.	2017-01-18T11:48:35Z
(DEBUG)	A working developer test Δ.	2017-01-19T02:58:30Z
(INFO)	Myth turns to be truth.	2017-01-19T02:58:30Z
(DEBUG)	A working developer test Δ.	2017-01-19T02:58:34Z
(INFO)	Myth turns to be truth.	2017-01-19T02:58:34Z
(DEBUG)	A working developer test Δ.	2017-01-27T20:32:32Z
(INFO)	Myth turns to be truth.	2017-01-27T20:32:32Z
(DEBUG)	A working developer test Δ.	2017-01-27T20:47:42Z
(INFO)	Myth turns to be truth.	2017-01-27T20:47:42Z
(DEBUG)	A working developer test Δ.	2017-01-27T22:50:11Z
(INFO)	Myth turns to be truth.	2017-01-27T22:50:11Z
(DEBUG)	A working developer test Δ.	2017-01-27T23:51:11Z
(INFO)	Myth turns to be truth.	2017-01-27T23:51:11Z
(DEBUG)	A working developer test Δ.	2017-01-28T06:31:21Z
(INFO)	Myth turns to be truth.	2017-01-28T06:31:21Z
(DEBUG)	A working developer test Δ.	2017-01-28T06:31:26Z
(INFO)	Myth turns to be truth.	2017-01-28T06:31:26Z
(DEBUG)	A working developer test Δ.	2017-01-28T11:32:04Z
(INFO)	Myth turns to be truth.	2017-01-28T11:32:04Z
(DEBUG)	A working developer test Δ.	2017-01-28T14:09:33Z
(INFO)	Myth turns to be truth.	2017-01-28T14:09:33Z
(DEBUG)	A working developer test Δ.	2017-01-28T22:42:13Z
(INFO)	Myth turns to be truth.	2017-01-28T22:42:13Z
(DEBUG)	A working developer test Δ.	2017-01-28T23:28:16Z
(INFO)	Myth turns to be truth.	2017-01-28T23:28:16Z
(DEBUG)	A working developer test Δ.	2017-01-28T23:28:20Z
(INFO)	Myth turns to be truth.	2017-01-28T23:28:20Z
(DEBUG)	A working developer test Δ.	2017-02-08T20:13:20Z
(INFO)	Myth turns to be truth.	2017-02-08T20:13:20Z
(DEBUG)	A working developer test Δ.	2017-02-09T07:10:36Z
(INFO)	Myth turns to be truth.	2017-02-09T07:10:36Z
(DEBUG)	A working developer test Δ.	2017-02-09T17:18:00Z
(INFO)	Myth turns to be truth.	2017-02-09T17:18:00Z
(DEBUG)	A working developer test Δ.	2017-02-09T19:32:05Z
(INFO)	Myth turns to be truth.	2017-02-09T19:32:05Z
(DEBUG)	A working developer test Δ.	2017-02-09T21:49:37Z
(INFO)	Myth turns to be truth.	2017-02-09T21:49:37Z
(DEBUG)	A working developer test Δ.	2017-02-10T12:36:08Z
(INFO)	Myth turns to be truth.	2017-02-10T12:36:08Z
(DEBUG)	A working developer test Δ.	2017-02-10T21:20:31Z
(INFO)	Myth turns to be truth.	2017-02-10T21:20:31Z
(DEBUG)	A working developer test Δ.	2017-02-11T11:11:53Z
(INFO)	Myth turns to be truth.	2017-02-11T11:11:53Z
(DEBUG)	A working developer test Δ.	2017-02-11T13:03:08Z
(INFO)	Myth turns to be truth.	2017-02-11T13:03:08Z
(DEBUG)	A working developer test Δ.	2017-02-11T21:02:28Z
(INFO)	Myth turns to be truth.	2017-02-11T21:02:28Z
(DEBUG)	A working developer test Δ.	2017-02-11T21:15:45Z
(INFO)	Myth turns to be truth.	2017-02-11T21:15:45Z
(DEBUG)	A working developer test Δ.	2017-02-12T00:11:22Z
(INFO)	Myth turns to be truth.	2017-02-12T00:11:22Z
(DEBUG)	A working developer test Δ.	2017-02-12T04:34:48Z
(INFO)	Myth turns to be truth.	2017-02-12T04:34:48Z
(DEBUG)	A working developer test Δ.	2017-02-12T10:20:49Z
(INFO)	Myth turns to be truth.	2017-02-12T10:20:49Z
(DEBUG)	A working developer test Δ.	2017-02-12T14:10:57Z
(INFO)	Myth turns to be truth.	2017-02-12T14:10:57Z
(DEBUG)	A working developer test Δ.	2017-02-12T16:51:52Z
(INFO)	Myth turns to be truth.	2017-02-12T16:51:52Z
(DEBUG)	A working developer test Δ.	2017-02-12T17:23:33Z
(INFO)	Myth turns to be truth.	2017-02-12T17:23:33Z
(DEBUG)	A working developer test Δ.	2017-02-13T02:41:36Z
(INFO)	Myth turns to be truth.	2017-02-13T02:41:36Z
(DEBUG)	A working developer test Δ.	2017-02-13T03:11:41Z
(INFO)	Myth turns to be truth.	2017-02-13T03:11:41Z
(DEBUG)	A working developer test Δ.	2017-02-13T04:07:08Z
(INFO)	Myth turns to be truth.	2017-02-13T04:07:08Z
(DEBUG)	A working developer test Δ.	2017-02-13T05:20:57Z
(INFO)	Myth turns to be truth.	2017-02-13T05:20:57Z
(DEBUG)	A working developer test Δ.	2017-02-13T19:30:50Z
(INFO)	Myth turns to be truth.	2017-02-13T19:30:50Z
(DEBUG)	A working developer test Δ.	2017-02-14T02:04:43Z
(INFO)	Myth turns to be truth.	2017-02-14T02:04:43Z
(DEBUG)	A working developer test Δ.	2017-02-14T16:45:09Z
(INFO)	Myth turns to be truth.	2017-02-14T16:45:09Z
(DEBUG)	A working developer test Δ.	2017-02-15T01:07:33Z
(INFO)	Myth turns to be truth.	2017-02-15T01:07:33Z
(DEBUG)	A working developer test Δ.	2017-02-15T08:18:19Z
(INFO)	Myth turns to be truth.	2017-02-15T08:18:19Z
(DEBUG)	A working developer test Δ.	2017-02-15T14:48:32Z
(INFO)	Myth turns to be truth.	2017-02-15T14:48:32Z
(DEBUG)	A working developer test Δ.	2017-02-16T12:48:30Z
(INFO)	Myth turns to be truth.	2017-02-16T12:48:30Z
(DEBUG)	A working developer test Δ.	2017-02-16T20:12:07Z
(INFO)	Myth turns to be truth.	2017-02-16T20:12:07Z
(DEBUG)	A working developer test Δ.	2017-02-17T01:18:24Z
(INFO)	Myth turns to be truth.	2017-02-17T01:18:24Z
(DEBUG)	A working developer test Δ.	2017-02-17T01:20:48Z
(INFO)	Myth turns to be truth.	2017-02-17T01:20:48Z
(DEBUG)	A working developer test Δ.	2017-02-18T13:24:29Z
(INFO)	Myth turns to be truth.	2017-02-18T13:24:29Z
(DEBUG)	A working developer test Δ.	2017-02-20T02:58:33Z
(INFO)	Myth turns to be truth.	2017-02-20T02:58:33Z
(DEBUG)	A working developer test Δ.	2017-02-20T23:09:15Z
(INFO)	Myth turns to be truth.	2017-02-20T23:09:15Z
(DEBUG)	A working developer test Δ.	2017-02-20T23:40:08Z
(INFO)	Myth turns to be truth.	2017-02-20T23:40:08Z
(DEBUG)	A working developer test Δ.	2017-02-21T08:42:32Z
(INFO)	Myth turns to be truth.	2017-02-21T08:42:32Z
(DEBUG)	A working developer test Δ.	2017-02-21T08:42:35Z
(INFO)	Myth turns to be truth.	2017-02-21T08:42:35Z
(DEBUG)	A working developer test Δ.	2017-02-21T11:11:08Z
(INFO)	Myth turns to be truth.	2017-02-21T11:11:08Z
(DEBUG)	A working developer test Δ.	2017-02-21T17:40:02Z
(INFO)	Myth turns to be truth.	2017-02-21T17:40:02Z
(DEBUG)	A working developer test Δ.	2017-02-21T22:00:14Z
(INFO)	Myth turns to be truth.	2017-02-21T22:00:14Z
(DEBUG)	A working developer test Δ.	2017-02-22T02:55:56Z
(INFO)	Myth turns to be truth.	2017-02-22T02:55:56Z
(DEBUG)	A working developer test Δ.	2017-02-22T15:47:35Z
(INFO)	Myth turns to be truth.	2017-02-22T15:47:35Z
(DEBUG)	A working developer test Δ.	2017-02-24T21:07:26Z
(INFO)	Myth turns to be truth.	2017-02-24T21:07:26Z
(DEBUG)	A working developer test Δ.	2017-02-26T16:46:32Z
(INFO)	Myth turns to be truth.	2017-02-26T16:46:32Z
(DEBUG)	A working developer test Δ.	2017-03-01T06:11:24Z
(INFO)	Myth turns to be truth.	2017-03-01T06:11:24Z
(DEBUG)	A working developer test Δ.	2017-03-02T07:18:02Z
(INFO)	Myth turns to be truth.	2017-03-02T07:18:02Z
(DEBUG)	A working developer test Δ.	2017-03-03T12:55:39Z
(INFO)	Myth turns to be truth.	2017-03-03T12:55:39Z
(DEBUG)	A working developer test Δ.	2017-03-03T22:33:27Z
(INFO)	Myth turns to be truth.	2017-03-03T22:33:27Z
(DEBUG)	A working developer test Δ.	2017-03-06T00:32:40Z
(INFO)	Myth turns to be truth.	2017-03-06T00:32:40Z
(DEBUG)	A working developer test Δ.	2017-03-06T01:43:21Z
(INFO)	Myth turns to be truth.	2017-03-06T01:43:21Z
(DEBUG)	A working developer test Δ.	2017-03-06T04:08:59Z
(INFO)	Myth turns to be truth.	2017-03-06T04:08:59Z
(DEBUG)	A working developer test Δ.	2017-03-06T07:10:34Z
(INFO)	Myth turns to be truth.	2017-03-06T07:10:34Z
(DEBUG)	A working developer test Δ.	2017-03-06T11:50:19Z
(INFO)	Myth turns to be truth.	2017-03-06T11:50:19Z
(DEBUG)	A working developer test Δ.	2017-03-06T18:50:53Z
(INFO)	Myth turns to be truth.	2017-03-06T18:50:53Z
(DEBUG)	A working developer test Δ.	2017-03-06T23:00:37Z
(INFO)	Myth turns to be truth.	2017-03-06T23:00:37Z
(DEBUG)	A working developer test Δ.	2017-03-07T00:47:42Z
(INFO)	Myth turns to be truth.	2017-03-07T00:47:42Z
(DEBUG)	A working developer test Δ.	2017-03-07T11:10:43Z
(INFO)	Myth turns to be truth.	2017-03-07T11:10:43Z
(DEBUG)	A working developer test Δ.	2017-03-07T17:25:10Z
(INFO)	Myth turns to be truth.	2017-03-07T17:25:10Z
(DEBUG)	A working developer test Δ.	2017-03-07T20:17:19Z
(INFO)	Myth turns to be truth.	2017-03-07T20:17:19Z
(DEBUG)	A working developer test Δ.	2017-03-07T21:41:32Z
(INFO)	Myth turns to be truth.	2017-03-07T21:41:32Z
(DEBUG)	A working developer test Δ.	2017-03-08T02:24:18Z
(INFO)	Myth turns to be truth.	2017-03-08T02:24:18Z
(DEBUG)	A working developer test Δ.	2017-03-08T06:45:57Z
(INFO)	Myth turns to be truth.	2017-03-08T06:45:57Z
(DEBUG)	A working developer test Δ.	2017-03-08T11:51:56Z
(INFO)	Myth turns to be truth.	2017-03-08T11:51:56Z
(DEBUG)	A working developer test Δ.	2017-03-08T11:52:02Z
(INFO)	Myth turns to be truth.	2017-03-08T11:52:02Z
(DEBUG)	A working developer test Δ.	2017-03-08T13:58:50Z
(INFO)	Myth turns to be truth.	2017-03-08T13:58:50Z
(DEBUG)	A working developer test Δ.	2017-03-08T20:16:23Z
(INFO)	Myth turns to be truth.	2017-03-08T20:16:23Z
(DEBUG)	A working developer test Δ.	2017-03-08T21:52:02Z
(INFO)	Myth turns to be truth.	2017-03-08T21:52:02Z
(DEBUG)	A working developer test Δ.	2017-03-08T23:27:57Z
(INFO)	Myth turns to be truth.	2017-03-08T23:27:57Z
(DEBUG)	A working developer test Δ.	2017-03-08T23:44:12Z
(INFO)	Myth turns to be truth.	2017-03-08T23:44:12Z
(DEBUG)	A working developer test Δ.	2017-03-08T23:49:22Z
(INFO)	Myth turns to be truth.	2017-03-08T23:49:22Z
(DEBUG)	A working developer test Δ.	2017-03-09T12:23:39Z
(INFO)	Myth turns to be truth.	2017-03-09T12:23:39Z
(DEBUG)	A working developer test Δ.	2017-03-09T17:40:40Z
(INFO)	Myth turns to be truth.	2017-03-09T17:40:40Z
(DEBUG)	A working developer test Δ.	2017-03-09T17:55:20Z
(INFO)	Myth turns to be truth.	2017-03-09T17:55:20Z
(DEBUG)	A working developer test Δ.	2017-03-10T02:45:44Z
(INFO)	Myth turns to be truth.	2017-03-10T02:45:44Z
(DEBUG)	A working developer test Δ.	2017-03-10T04:01:31Z
(INFO)	Myth turns to be truth.	2017-03-10T04:01:31Z
(DEBUG)	A working developer test Δ.	2017-03-10T10:54:14Z
(INFO)	Myth turns to be truth.	2017-03-10T10:54:14Z
(DEBUG)	A working developer test Δ.	2017-03-10T12:35:53Z
(INFO)	Myth turns to be truth.	2017-03-10T12:35:53Z
(DEBUG)	A working developer test Δ.	2017-03-10T16:45:52Z
(INFO)	Myth turns to be truth.	2017-03-10T16:45:52Z
(DEBUG)	A working developer test Δ.	2017-03-11T12:33:30Z
(INFO)	Myth turns to be truth.	2017-03-11T12:33:30Z
(DEBUG)	A working developer test Δ.	2017-03-13T00:17:01Z
(INFO)	Myth turns to be truth.	2017-03-13T00:17:01Z
(DEBUG)	A working developer test Δ.	2017-03-13T05:25:31Z
(INFO)	Myth turns to be truth.	2017-03-13T05:25:31Z
(DEBUG)	A working developer test Δ.	2017-03-19T01:17:04Z
(INFO)	Myth turns to be truth.	2017-03-19T01:17:04Z
(DEBUG)	A working developer test Δ.	2017-03-19T22:44:53Z
(INFO)	Myth turns to be truth.	2017-03-19T22:44:53Z
(DEBUG)	A working developer test Δ.	2017-03-20T09:32:16Z
(INFO)	Myth turns to be truth.	2017-03-20T09:32:16Z
(DEBUG)	A working developer test Δ.	2017-03-21T00:45:14Z
(INFO)	Myth turns to be truth.	2017-03-21T00:45:14Z
(DEBUG)	A working developer test Δ.	2017-03-22T04:12:55Z
(INFO)	Myth turns to be truth.	2017-03-22T04:12:55Z
(DEBUG)	A working developer test Δ.	2017-03-22T13:09:52Z
(INFO)	Myth turns to be truth.	2017-03-22T13:09:52Z
(DEBUG)	A working developer test Δ.	2017-03-22T14:12:12Z
(INFO)	Myth turns to be truth.	2017-03-22T14:12:12Z
(DEBUG)	A working developer test Δ.	2017-03-22T18:29:37Z
(INFO)	Myth turns to be truth.	2017-03-22T18:29:37Z
(DEBUG)	A working developer test Δ.	2017-03-23T04:09:11Z
(INFO)	Myth turns to be truth.	2017-03-23T04:09:11Z
(DEBUG)	A working developer test Δ.	2017-03-23T15:05:45Z
(INFO)	Myth turns to be truth.	2017-03-23T15:05:45Z
(DEBUG)	A working developer test Δ.	2017-03-26T01:38:36Z
(INFO)	Myth turns to be truth.	2017-03-26T01:38:36Z
(DEBUG)	A working developer test Δ.	2017-03-26T10:30:26Z
(INFO)	Myth turns to be truth.	2017-03-26T10:30:26Z
(DEBUG)	A working developer test Δ.	2017-03-26T11:15:34Z
(INFO)	Myth turns to be truth.	2017-03-26T11:15:34Z
(DEBUG)	A working developer test Δ.	2017-03-27T03:55:18Z
(INFO)	Myth turns to be truth.	2017-03-27T03:55:18Z
(DEBUG)	A working developer test Δ.	2017-03-28T04:32:11Z
(INFO)	Myth turns to be truth.	2017-03-28T04:32:11Z
(DEBUG)	A working developer test Δ.	2017-03-31T23:27:48Z
(INFO)	Myth turns to be truth.	2017-03-31T23:27:48Z
(DEBUG)	A working developer test Δ.	2017-04-03T05:21:23Z
(INFO)	Myth turns to be truth.	2017-04-03T05:21:23Z
(DEBUG)	A working developer test Δ.	2017-04-03T08:29:21Z
(INFO)	Myth turns to be truth.	2017-04-03T08:29:21Z
(DEBUG)	A working developer test Δ.	2017-04-09T12:00:04Z
(INFO)	Myth turns to be truth.	2017-04-09T12:00:04Z
(DEBUG)	A working developer test Δ.	2017-04-09T17:54:08Z
(INFO)	Myth turns to be truth.	2017-04-09T17:54:08Z
(DEBUG)	A working developer test Δ.	2017-04-17T04:21:48Z
(INFO)	Myth turns to be truth.	2017-04-17T04:21:48Z
(DEBUG)	A working developer test Δ.	2017-04-19T21:35:40Z
(INFO)	Myth turns to be truth.	2017-04-19T21:35:40Z
(DEBUG)	A working developer test Δ.	2017-04-23T20:43:07Z
(INFO)	Myth turns to be truth.	2017-04-23T20:43:07Z
(DEBUG)	A working developer test Δ.	2017-04-26T14:29:57Z
(INFO)	Myth turns to be truth.	2017-04-26T14:29:57Z
(DEBUG)	A working developer test Δ.	2017-04-27T01:09:07Z
(INFO)	Myth turns to be truth.	2017-04-27T01:09:07Z
(DEBUG)	A working developer test Δ.	2017-04-28T19:25:34Z
(INFO)	Myth turns to be truth.	2017-04-28T19:25:34Z
(DEBUG)	A working developer test Δ.	2017-05-03T00:36:12Z
(INFO)	Myth turns to be truth.	2017-05-03T00:36:12Z
(DEBUG)	A working developer test Δ.	2017-05-03T18:22:51Z
(INFO)	Myth turns to be truth.	2017-05-03T18:22:51Z
(DEBUG)	A working developer test Δ.	2017-05-03T19:53:55Z
(INFO)	Myth turns to be truth.	2017-05-03T19:53:55Z
(DEBUG)	A working developer test Δ.	2017-05-03T19:54:00Z
(INFO)	Myth turns to be truth.	2017-05-03T19:54:00Z
(DEBUG)	A working developer test Δ.	2017-05-08T18:19:35Z
(INFO)	Myth turns to be truth.	2017-05-08T18:19:35Z
(DEBUG)	A working developer test Δ.	2017-05-08T20:53:33Z
(INFO)	Myth turns to be truth.	2017-05-08T20:53:33Z
(DEBUG)	A working developer test Δ.	2017-05-09T12:06:52Z
(INFO)	Myth turns to be truth.	2017-05-09T12:06:52Z
(DEBUG)	A working developer test Δ.	2017-05-10T01:47:47Z
(INFO)	Myth turns to be truth.	2017-05-10T01:47:47Z
(DEBUG)	A working developer test Δ.	2017-05-15T02:22:09Z
(INFO)	Myth turns to be truth.	2017-05-15T02:22:09Z
(DEBUG)	A working developer test Δ.	2017-05-18T01:45:04Z
(INFO)	Myth turns to be truth.	2017-05-18T01:45:04Z
(DEBUG)	A working developer test Δ.	2017-05-18T02:21:04Z
(INFO)	Myth turns to be truth.	2017-05-18T02:21:04Z
(DEBUG)	A working developer test Δ.	2017-05-19T05:44:32Z
(INFO)	Myth turns to be truth.	2017-05-19T05:44:32Z
(DEBUG)	A working developer test Δ.	2017-05-19T13:31:01Z
(INFO)	Myth turns to be truth.	2017-05-19T13:31:01Z
(DEBUG)	A working developer test Δ.	2017-05-19T17:00:34Z
(INFO)	Myth turns to be truth.	2017-05-19T17:00:34Z
(DEBUG)	A working developer test Δ.	2017-05-20T07:56:32Z
(INFO)	Myth turns to be truth.	2017-05-20T07:56:32Z
(DEBUG)	A working developer test Δ.	2017-05-21T18:07:01Z
(INFO)	Myth turns to be truth.	2017-05-21T18:07:01Z
(DEBUG)	A working developer test Δ.	2017-05-22T21:50:01Z
(INFO)	Myth turns to be truth.	2017-05-22T21:50:01Z
(DEBUG)	A working developer test Δ.	2017-05-24T19:30:08Z
(INFO)	Myth turns to be truth.	2017-05-24T19:30:08Z
(DEBUG)	A working developer test Δ.	2017-05-25T05:32:22Z
(INFO)	Myth turns to be truth.	2017-05-25T05:32:22Z
(DEBUG)	A working developer test Δ.	2017-05-29T04:10:10Z
(INFO)	Myth turns to be truth.	2017-05-29T04:10:10Z
(DEBUG)	A working developer test Δ.	2017-05-29T05:35:56Z
(INFO)	Myth turns to be truth.	2017-05-29T05:35:56Z
(DEBUG)	A working developer test Δ.	2017-06-04T12:54:11Z
(INFO)	Myth turns to be truth.	2017-06-04T12:54:11Z
(DEBUG)	A working developer test Δ.	2017-06-07T23:09:57Z
(INFO)	Myth turns to be truth.	2017-06-07T23:09:57Z
(DEBUG)	A working developer test Δ.	2017-06-10T09:51:58Z
(INFO)	Myth turns to be truth.	2017-06-10T09:51:58Z
(DEBUG)	A working developer test Δ.	2017-06-10T22:13:11Z
(INFO)	Myth turns to be truth.	2017-06-10T22:13:11Z
(DEBUG)	A working developer test Δ.	2017-06-11T22:57:26Z
(INFO)	Myth turns to be truth.	2017-06-11T22:57:26Z
(DEBUG)	A working developer test Δ.	2017-06-12T01:00:29Z
(INFO)	Myth turns to be truth.	2017-06-12T01:00:29Z
(DEBUG)	A working developer test Δ.	2017-06-12T09:49:24Z
(INFO)	Myth turns to be truth.	2017-06-12T09:49:24Z
(DEBUG)	A working developer test Δ.	2017-06-12T10:10:25Z
(INFO)	Myth turns to be truth.	2017-06-12T10:10:25Z
(DEBUG)	A working developer test Δ.	2017-06-14T06:42:29Z
(INFO)	Myth turns to be truth.	2017-06-14T06:42:29Z
(DEBUG)	A working developer test Δ.	2017-06-14T22:33:33Z
(INFO)	Myth turns to be truth.	2017-06-14T22:33:33Z
(DEBUG)	A working developer test Δ.	2017-06-15T15:24:57Z
(INFO)	Myth turns to be truth.	2017-06-15T15:24:57Z
(DEBUG)	A working developer test Δ.	2017-06-15T15:39:00Z
(INFO)	Myth turns to be truth.	2017-06-15T15:39:00Z
(DEBUG)	A working developer test Δ.	2017-06-17T19:39:18Z
(INFO)	Myth turns to be truth.	2017-06-17T19:39:18Z
(DEBUG)	A working developer test Δ.	2017-06-22T08:20:37Z
(INFO)	Myth turns to be truth.	2017-06-22T08:20:37Z
(DEBUG)	A working developer test Δ.	2017-06-23T01:00:08Z
(INFO)	Myth turns to be truth.	2017-06-23T01:00:08Z
(DEBUG)	A working developer test Δ.	2017-06-24T09:37:04Z
(INFO)	Myth turns to be truth.	2017-06-24T09:37:04Z
(DEBUG)	A working developer test Δ.	2017-06-26T11:03:14Z
(INFO)	Myth turns to be truth.	2017-06-26T11:03:14Z
(DEBUG)	A working developer test Δ.	2017-06-26T11:04:55Z
(INFO)	Myth turns to be truth.	2017-06-26T11:04:55Z
(DEBUG)	A working developer test Δ.	2017-06-27T16:23:10Z
(INFO)	Myth turns to be truth.	2017-06-27T16:23:10Z
(DEBUG)	A working developer test Δ.	2017-07-02T03:47:49Z
(INFO)	Myth turns to be truth.	2017-07-02T03:47:49Z
(DEBUG)	A working developer test Δ.	2017-07-07T14:28:45Z
(INFO)	Myth turns to be truth.	2017-07-07T14:28:45Z
(DEBUG)	A working developer test Δ.	2017-07-17T15:47:58Z
(INFO)	Myth turns to be truth.	2017-07-17T15:47:58Z
(DEBUG)	A working developer test Δ.	2017-07-18T04:16:10Z
(INFO)	Myth turns to be truth.	2017-07-18T04:16:10Z
(DEBUG)	A working developer test Δ.	2017-07-23T01:46:29Z
(INFO)	Myth turns to be truth.	2017-07-23T01:46:29Z
(DEBUG)	A working developer test Δ.	2017-07-24T15:09:49Z
(INFO)	Myth turns to be truth.	2017-07-24T15:09:49Z
(DEBUG)	A working developer test Δ.	2017-07-25T07:11:14Z
(INFO)	Myth turns to be truth.	2017-07-25T07:11:14Z
(DEBUG)	A working developer test Δ.	2017-07-27T03:46:01Z
(INFO)	Myth turns to be truth.	2017-07-27T03:46:01Z
(DEBUG)	A working developer test Δ.	2017-07-27T13:22:08Z
(INFO)	Myth turns to be truth.	2017-07-27T13:22:08Z
(DEBUG)	A working developer test Δ.	2017-07-29T08:22:15Z
(INFO)	Myth turns to be truth.	2017-07-29T08:22:15Z
(DEBUG)	A working developer test Δ.	2017-07-29T14:37:19Z
(INFO)	Myth turns to be truth.	2017-07-29T14:37:19Z
(DEBUG)	A working developer test Δ.	2017-07-30T14:16:19Z
(INFO)	Myth turns to be truth.	2017-07-30T14:16:19Z
(DEBUG)	A working developer test Δ.	2017-08-03T10:59:09Z
(INFO)	Myth turns to be truth.	2017-08-03T10:59:09Z
(DEBUG)	A working developer test Δ.	2017-08-06T12:34:13Z
(INFO)	Myth turns to be truth.	2017-08-06T12:34:13Z
(DEBUG)	A working developer test Δ.	2017-08-07T12:11:45Z
(INFO)	Myth turns to be truth.	2017-08-07T12:11:45Z
(DEBUG)	A working developer test Δ.	2017-08-12T03:11:38Z
(INFO)	Myth turns to be truth.	2017-08-12T03:11:38Z
(DEBUG)	A working developer test Δ.	2017-08-13T02:24:26Z
(INFO)	Myth turns to be truth.	2017-08-13T02:24:26Z
(DEBUG)	A working developer test Δ.	2017-08-13T08:09:58Z
(INFO)	Myth turns to be truth.	2017-08-13T08:09:58Z
(DEBUG)	A working developer test Δ.	2017-08-16T09:44:08Z
(INFO)	Myth turns to be truth.	2017-08-16T09:44:08Z
(DEBUG)	A working developer test Δ.	2017-08-21T07:17:27Z
(INFO)	Myth turns to be truth.	2017-08-21T07:17:27Z
(DEBUG)	A working developer test Δ.	2017-08-25T19:51:35Z
(INFO)	Myth turns to be truth.	2017-08-25T19:51:35Z
(DEBUG)	A working developer test Δ.	2017-08-26T11:25:46Z
(INFO)	Myth turns to be truth.	2017-08-26T11:25:46Z
(DEBUG)	A working developer test Δ.	2017-09-02T07:18:32Z
(INFO)	Myth turns to be truth.	2017-09-02T07:18:32Z
(DEBUG)	A working developer test Δ.	2017-09-05T12:08:58Z
(INFO)	Myth turns to be truth.	2017-09-05T12:08:58Z
(DEBUG)	A working developer test Δ.	2017-09-07T13:39:28Z
(INFO)	Myth turns to be truth.	2017-09-07T13:39:28Z
(DEBUG)	A working developer test Δ.	2017-09-08T19:17:49Z
(INFO)	Myth turns to be truth.	2017-09-08T19:17:49Z
(DEBUG)	A working developer test Δ.	2017-09-13T01:05:27Z
(INFO)	Myth turns to be truth.	2017-09-13T01:05:27Z
(DEBUG)	A working developer test Δ.	2017-09-13T01:05:31Z
(INFO)	Myth turns to be truth.	2017-09-13T01:05:31Z
(DEBUG)	A working developer test Δ.	2017-09-15T09:55:51Z
(INFO)	Myth turns to be truth.	2017-09-15T09:55:51Z
(DEBUG)	A working developer test Δ.	2017-09-18T01:10:33Z
(INFO)	Myth turns to be truth.	2017-09-18T01:10:33Z
(DEBUG)	A working developer test Δ.	2017-09-18T02:46:02Z
(INFO)	Myth turns to be truth.	2017-09-18T02:46:02Z
(DEBUG)	A working developer test Δ.	2017-09-19T04:02:44Z
(INFO)	Myth turns to be truth.	2017-09-19T04:02:44Z
(DEBUG)	A working developer test Δ.	2017-09-20T00:58:22Z
(INFO)	Myth turns to be truth.	2017-09-20T00:58:22Z
(DEBUG)	A working developer test Δ.	2017-09-20T05:16:12Z
(INFO)	Myth turns to be truth.	2017-09-20T05:16:12Z
(DEBUG)	A working developer test Δ.	2017-09-25T07:02:25Z
(INFO)	Myth turns to be truth.	2017-09-25T07:02:25Z
(DEBUG)	A working developer test Δ.	2017-09-29T15:24:26Z
(INFO)	Myth turns to be truth.	2017-09-29T15:24:26Z
(DEBUG)	A working developer test Δ.	2017-10-03T04:54:18Z
(INFO)	Myth turns to be truth.	2017-10-03T04:54:18Z
(DEBUG)	A working developer test Δ.	2017-10-03T04:54:44Z
(INFO)	Myth turns to be truth.	2017-10-03T04:54:44Z
(DEBUG)	A working developer test Δ.	2017-10-05T04:18:41Z
(INFO)	Myth turns to be truth.	2017-10-05T04:18:41Z
(DEBUG)	A working developer test Δ.	2017-10-07T11:23:18Z
(INFO)	Myth turns to be truth.	2017-10-07T11:23:18Z
(DEBUG)	A working developer test Δ.	2017-10-10T01:54:54Z
(INFO)	Myth turns to be truth.	2017-10-10T01:54:54Z
(DEBUG)	A working developer test Δ.	2017-10-12T13:09:00Z
(INFO)	Myth turns to be truth.	2017-10-12T13:09:00Z
(DEBUG)	A working developer test Δ.	2017-10-16T03:17:09Z
(INFO)	Myth turns to be truth.	2017-10-16T03:17:09Z
(DEBUG)	A working developer test Δ.	2017-10-17T01:37:57Z
(INFO)	Myth turns to be truth.	2017-10-17T01:37:57Z
(DEBUG)	A working developer test Δ.	2017-10-19T03:15:57Z
(INFO)	Myth turns to be truth.	2017-10-19T03:15:57Z
(DEBUG)	A working developer test Δ.	2017-10-21T16:33:36Z
(INFO)	Myth turns to be truth.	2017-10-21T16:33:36Z
(DEBUG)	A working developer test Δ.	2017-10-25T11:13:27Z
(INFO)	Myth turns to be truth.	2017-10-25T11:13:27Z
(DEBUG)	A working developer test Δ.	2017-10-28T15:23:45Z
(INFO)	Myth turns to be truth.	2017-10-28T15:23:45Z
(DEBUG)	A working developer test Δ.	2017-10-30T03:08:41Z
(INFO)	Myth turns to be truth.	2017-10-30T03:08:41Z
(DEBUG)	A working developer test Δ.	2017-10-30T11:48:45Z
(INFO)	Myth turns to be truth.	2017-10-30T11:48:45Z
(DEBUG)	A working developer test Δ.	2017-10-30T19:39:25Z
(INFO)	Myth turns to be truth.	2017-10-30T19:39:25Z
(DEBUG)	A working developer test Δ.	2017-11-07T17:32:40Z
(INFO)	Myth turns to be truth.	2017-11-07T17:32:40Z
(DEBUG)	A working developer test Δ.	2017-11-09T02:23:08Z
(INFO)	Myth turns to be truth.	2017-11-09T02:23:08Z
(DEBUG)	A working developer test Δ.	2017-11-09T17:00:59Z
(INFO)	Myth turns to be truth.	2017-11-09T17:00:59Z
(DEBUG)	A working developer test Δ.	2017-11-11T04:55:42Z
(INFO)	Myth turns to be truth.	2017-11-11T04:55:42Z
(DEBUG)	A working developer test Δ.	2017-11-13T06:39:26Z
(INFO)	Myth turns to be truth.	2017-11-13T06:39:26Z
(DEBUG)	A working developer test Δ.	2017-11-18T09:29:32Z
(INFO)	Myth turns to be truth.	2017-11-18T09:29:32Z
(DEBUG)	A working developer test Δ.	2017-11-23T19:41:01Z
(INFO)	Myth turns to be truth.	2017-11-23T19:41:01Z
(DEBUG)	A working developer test Δ.	2017-11-25T10:16:57Z
(INFO)	Myth turns to be truth.	2017-11-25T10:16:57Z
(DEBUG)	A working developer test Δ.	2017-11-27T09:52:45Z
(INFO)	Myth turns to be truth.	2017-11-27T09:52:45Z
(DEBUG)	A working developer test Δ.	2017-11-27T10:08:32Z
(INFO)	Myth turns to be truth.	2017-11-27T10:08:32Z
(DEBUG)	A working developer test Δ.	2017-11-28T15:52:43Z
(INFO)	Myth turns to be truth.	2017-11-28T15:52:43Z
(DEBUG)	A working developer test Δ.	2017-12-02T02:54:23Z
(INFO)	Myth turns to be truth.	2017-12-02T02:54:23Z
(DEBUG)	A working developer test Δ.	2017-12-06T01:20:53Z
(INFO)	Myth turns to be truth.	2017-12-06T01:20:53Z
(DEBUG)	A working developer test Δ.	2017-12-06T02:45:18Z
(INFO)	Myth turns to be truth.	2017-12-06T02:45:18Z
(DEBUG)	A working developer test Δ.	2017-12-08T07:57:23Z
(INFO)	Myth turns to be truth.	2017-12-08T07:57:23Z
(DEBUG)	A working developer test Δ.	2017-12-11T04:20:42Z
(INFO)	Myth turns to be truth.	2017-12-11T04:20:42Z
(DEBUG)	A working developer test Δ.	2017-12-12T08:19:39Z
(INFO)	Myth turns to be truth.	2017-12-12T08:19:39Z
(DEBUG)	A working developer test Δ.	2017-12-14T04:17:28Z
(INFO)	Myth turns to be truth.	2017-12-14T04:17:28Z

Sources

/axe-ut/logger.unit.test.asp

<!--#include virtual="/lib/unit-tests.asp"-->
<!--#include virtual="/lib/axe/classes/interface.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/stringbuilder.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/list.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/xstring.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/logger.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/Logger/interface.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/Logger/Adapters/response.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/Logger/Adapters/text.asp"-->
<!--#include virtual="/lib/axe/classes/Utilities/Logger/Adapters/firephp.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en">
    <head>
        <title>AXE - Unit Test - logger.asp</title>
        <!--// meta tags //-->
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <!--// link tags //-->
        <link rel="stylesheet" type="text/css" media="screen" href="/lib/unit-tests.css" />
    </head>
    <body>
        <div id="container">
            <div id="container-hd">
                <h1>UnitTest( logger.asp )</h1>
            </div>
            <div id="container-bd">
                <div class="code"><pre><%
 
'Protected method test
'dim Protected : set Protected = new Logger_Interface
'Protected.addFilter(array(3, "<="))
'set Protected = nothing
 
dim Re : set Re = new RegExp
Re.pattern = "Myth"
Re.ignoreCase = true
Re.global = true
 
dim Console, Proto_Writer, Text_Writer, Firebug_Writer
set Console = new Logger
 
'call Console.addFilter(array(Re))
'call Console.addFilter(array(3, "<="))
'call Console.addFilter(array("INFO","DEBUG"))
 
set Proto_Writer = new Logger_Adapter_Response
Proto_Writer.addFilter(array(Re))
 
set Text_Writer = new Logger_Adapter_Text
Text_Writer.path = "C:\var\www\unittest.evolved.com.br\cache\logger.log"
Text_Writer.addFilter array("INFO","DEBUG")
 
set Firebug_Writer = new Logger_Adapter_FirePHP
Firebug_Writer.addFilter(array(3, "<="))
 
call Console.addAdapter(Proto_Writer)
call Console.addAdapter(Text_Writer)
call Console.addAdapter(Firebug_Writer)
 
Response.write( "### Prototype ###" & vbNewline )
Console.debug "A working developer test Δ.", null
Console.info "{0} turns to be {1}.", array("Myth", "truth")
Console.warn "This can't be truth.", null
Console.error "An {0} message. single quote ' double quote "" newline {1} second line {}[]()", array("error", vbNewline)
Console.error dump("Hellω Wωrld アサヒ"), null
 
set Re = nothing
 
set Firebug_Writer = nothing
set Text_Writer = nothing
set Proto_Writer = nothing
set Console = nothing
 
Response.write( vbNewline )
Response.write( "### Text file ###" & vbNewline )
Response.write( loadTextFile( Server.mapPath("/cache/logger.log") ) )
 
                %></pre></div>
            </div>
            <div id="container-ft">
                <h2>Sources</h2>
                <h3><%= Request.ServerVariables("SCRIPT_NAME") %></h3>
                <div class="code"><%= geshify( loadTextFile( Server.mapPath( Request.ServerVariables("SCRIPT_NAME") ) ), "asp" ) %></div>
                <h3>logger.asp</h3>
                <div class="code"><%= geshify( loadTextFile( Server.mapPath( "/lib/axe/classes/Utilities/logger.asp" ) ), "asp" ) %></div>
                <h3>interface.asp</h3>
                <div class="code"><%= geshify( loadTextFile( Server.mapPath( "/lib/axe/classes/Utilities/Logger/interface.asp" ) ), "asp" ) %></div>
            </div>
        </div>
        <!--// javascript tags //-->
    </body>
</html>
 

logger.asp

<%
 
' File: logger.asp
'
' AXE(ASP Xtreme Evolution) log utility.
'
' License:
'
' This file is part of ASP Xtreme Evolution.
' Copyright (C) 2007-2012 Fabio Zendhi Nagao
'
' ASP Xtreme Evolution is free software: you can redistribute it and/or modify
' it under the terms of the GNU Lesser General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
'
' ASP Xtreme Evolution is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
' GNU Lesser General Public License for more details.
'
' You should have received a copy of the GNU Lesser General Public License
' along with ASP Xtreme Evolution. If not, see <http://www.gnu.org/licenses/>.
 
 
 
' Class: Logger
'
' Logger is a component for general purpose logging. It supports multiple log
' backends and filtering messages from being logged.
'
' Dependencies:
'
'	- List class (/lib/axe/classes/Utilities/list.asp)
'	- XString class (/lib/axe/classes/Utilities/xstring.asp)
'
' About:
'
'	- Written by Fabio Zendhi Nagao <http://zend.lojcomm.com.br> @ Sep 2010
'
class Logger
 
	' Property: classType
	'
	' Class type.
	'
	' Contains:
	'
	'	(string) - type
	'
	public property get classType
		classType = typename(Me)
	end property
 
	' Property: classVersion
	'
	' Class version.
	'
	' Contains:
	'
	'	(string) - version in terms of http://semver.org/#semantic-versioning-200
	'
	public property get classVersion
		classVersion = "1.0.1"
	end property
 
	' Property: Priorities
	'
	' Scripting.Dictionary holding available log priorities. The built-in
	' priorities are the same available at BSD syslog <http://tools.ietf.org/html/rfc3164>.
	'
	' Contains:
	'
	'	(Scripting.Dictionary) - Built-in priorities
	'
	' Built-in values:
	'
	'	(EMERG)  - Emergency: system is unusable. Priority 0
	'	(ALERT)  - Alert: action must be taken immediately. Priority 1
	'	(CRIT)   - Critical: critical conditions. Priority 2
	'	(ERROR)  - Error: error conditions. Priority 3
	'	(WARN)   - Warning: warning conditions. Priority 4
	'	(NOTICE) - Notice: normal but significant condition. Priority 5
	'	(INFO)   - Informational: informational messages. Priority 6
	'	(DEBUG)  - Debug: debug messages. Priority 7
	'
	public Priorities
 
	' Subroutine: addAdapter
	'
	' Pushes a new Logger_Interface adapter to Adapters list
	'
	' Parameters:
	'
	'	(Logger_Interface) - Adapter
	'
	public sub addAdapter(byRef Adapter)
		[_Adapters].push(Adapter)
	end sub
 
	' Subroutine: addFilter
	'
	' Add a filter that will be applied before writing the message in this adapter.
	'
	' Parameters:
	'
	'	(mixed[]) - array defining the filter
	'
	' Values:
	'
	'	([RegExp])           - Tests the message against a regular expression and accept it if true.
	'	([Number, Operator]) - Accepts only the priorities in the range created by the number and operator.
	'	([String, ...])      - Accepts only the types listed in the array
	'
	public sub addFilter(byVal mixed)
		[_Filters].add [_Filters].count, mixed
	end sub
 
	' Subroutine: write
	'
	' Main writing routine
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'	(string)   - log type
	'
	public sub write(byVal message, byVal arguments, byVal tp) : []
		dim Node, v
		set Node = [_Adapters].Head
		v = [](message).[](arguments)
		if([_isAcceptable](v, tp)) then
			while(Node.hasNext)
				set Node = Node.pNext
				call Node.data.write(v, tp)
			wend
		end if
		set Node = nothing
	end sub
 
	' Subroutine: emerg
	'
	' Logs an emergency
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub emerg(byVal message, byVal arguments)
		call write(message, arguments, "EMERG")
	end sub
 
	' Subroutine: alert
	'
	' Logs an alert
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub alert(byVal message, byVal arguments)
		call write(message, arguments, "ALERT")
	end sub
 
	' Subroutine: critical
	'
	' Logs a critical
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub critical(byVal message, byVal arguments)
		call write(message, arguments, "CRIT")
	end sub
 
	' Subroutine: error
	'
	' Logs an error
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub error(byVal message, byVal arguments)
		call write(message, arguments, "ERROR")
	end sub
 
	' Subroutine: warn
	'
	' Logs a warning
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub warn(byVal message, byVal arguments)
		call write(message, arguments, "WARN")
	end sub
 
	' Subroutine: notice
	'
	' Logs a notice
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub notice(byVal message, byVal arguments)
		call write(message, arguments, "NOTICE")
	end sub
 
	' Subroutine: info
	'
	' Logs a info
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub info(byVal message, byVal arguments)
		call write(message, arguments, "INFO")
	end sub
 
	' Subroutine: debug
	'
	' Logs a debug
	'
	' Parameters:
	'
	'	(string)   - message with/without placeholders
	'	(string[]) - replacements
	'
	public sub debug(byVal message, byVal arguments)
		call write(message, arguments, "DEBUG")
	end sub
 
	' Subroutine: log
	'
	' An alias for info. Useful for client/server shared components.
	'
	' Parameters:
	'
	'	(string)   - message without placeholders
	'
	public sub log(byVal message)
		call write(message, array(), "DEBUG")
	end sub
 
	private sub Class_initialize()
		set Priorities = Server.createObject("Scripting.Dictionary")
		with Priorities
			.add "EMERG",  0
			.add "ALERT",  1
			.add "CRIT",   2
			.add "ERROR",  3
			.add "WARN",   4
			.add "NOTICE", 5
			.add "INFO",   6
			.add "DEBUG",  7
		end with
 
		set [_Adapters] = new List
		set [_Filters] = Server.createObject("Scripting.Dictionary")
		set [] = new XString
	end sub
 
	private sub Class_terminate()
		set [] = nothing
		set [_Filters] = nothing
		set [_Adapters] = nothing
 
		set Priorities = nothing
	end sub
 
	' Subroutine: [_ε]
	'
	' {private} Checks for an adapter assignment.
	'
	private sub []
		if([_Adapters].count = 0) then _
			Err.raise 5, "Evolved AXE runtime error", "Invalid procedure call or argument. Missing an Email_Interface adapter."
	end sub
 
	' Property: [_Adapters]
	'
	' {private} In order to really write the messages somewhere, Log requires
	' adapters  implementing Logger_Interface specifying how and where to write
	' the data coming through this class.
	'
	' Contains:
	'
	'	(Logger_Interface()) - media adapters
	'
	private [_Adapters]
 
	' Property: [_Filters]
	'
	' {private} Filters blocks a message from being written to the log.
	'
	' Contains:
	'
	'	(Scripting.Dictionary) - filters
	'
	private [_Filters]
 
	' Property: [_τ]
	'
	' {private} XString instance to handle the string formating.
	'
	' Contains:
	'
	'	(XString) - Object to handle the string formating.
	'
	private []
 
	' Function: [_compare]
	'
	' {private} Compares two numbers by an order operator.
	'
	' Parameters:
	'
	'	(number) - left side of comparison
	'	(number) - right side of comparison
	'	(string) - operator
	'
	' Returns:
	'
	'	(boolean) - true, if the comparison is true; false, otherwise
	'
	private function [_compare](byVal a, byVal b, byVal op)
		if( op = ">" or op = "gt" ) then
			[_compare] = ( a > b )
		elseif( op = ">=" or op = "ge" ) then
			[_compare] = ( a >= b )
		elseif( op = "=" or op = "==" or op = "eq" ) then
			[_compare] = ( a = b )
		elseif( op = "!=" or op = "<>" or op = "ne" ) then
			[_compare] = ( a <> b )
		elseif( op = "<=" or op = "le" ) then
			[_compare] = ( a <= b )
		elseif( op = "<" or op = "lt" ) then
			[_compare] = ( a < b )
		else
			Err.raise 5, "Evolved AXE runtime error", "Invalid procedure call or argument. Invalid operator."
		end if
	end function
 
	' Function: [_isAcceptable]
	'
	' {private} Check with Filters if a message can be logged.
	'
	' Parameters:
	'
	'	(string) - message
	'	(string) - type
	'
	' Returns:
	'
	'	(boolean) - true, if acceptable; false, otherwise
	'
	private function [_isAcceptable](byVal message, byVal tp)
		[_isAcceptable] = true
		dim filter, kind
		for each filter in [_Filters].items()
			if(not isArray(filter)) then
				Err.raise 5, "Evolved AXE runtime error", "Invalid procedure call or argument. Invalid filter."
			end if
 
			kind = lcase(typename(filter(0)))
			if( instr(kind, "regexp") > 0 ) then
				[_isAcceptable] = filter(0).test(message)
			elseif( kind = "integer" ) then
				[_isAcceptable] = [_compare](Priorities(tp), filter(0) , filter(1))
			elseif( kind = "string" ) then
				[_isAcceptable] = false
				dim i : for i = 0 to ubound(filter)
					if( tp = filter(i) ) then [_isAcceptable] = true
				next
			end if
		next
	end function
 
end class
 
%>
 

interface.asp

<%
 
' File: interface.asp
'
' AXE(ASP Xtreme Evolution) Logger interface definition.
'
' License:
'
' This file is part of ASP Xtreme Evolution.
' Copyright (C) 2007-2012 Fabio Zendhi Nagao
'
' ASP Xtreme Evolution is free software: you can redistribute it and/or modify
' it under the terms of the GNU Lesser General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
'
' ASP Xtreme Evolution is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
' GNU Lesser General Public License for more details.
'
' You should have received a copy of the GNU Lesser General Public License
' along with ASP Xtreme Evolution. If not, see <http://www.gnu.org/licenses/>.
 
 
 
' Class: Logger_Interface
'
' Defines the common specifications required to implement a working adapter of
' Logger class.
'
' About:
'
'	- Written by Fabio Zendhi Nagao <http://zend.lojcomm.com.br> @ Sep 2010
'
class Logger_Interface' extends Interface
 
' --[ Interface definition ]----------------------------------------------------
 
	' Subroutine: addFilter
	'
	' Add a filter that will be applied before writing the message in this adapter.
	'
	' Parameters:
	'
	'	(mixed[]) - array defining the filter
	'
	' Values:
	'
	'	([RegExp])           - Tests the message against a regular expression and accept it if true.
	'	([Number, Operator]) - Accepts only the priorities in the range created by the number and operator.
	'	([String, ...])      - Accepts only the types listed in the array
	'
	public sub addFilter(byVal mixed)
		[_ℱ].add [_ℱ].count, mixed
	end sub
 
	' Subroutine: write
	'
	' Adapter writing routine
	'
	' Parameters:
	'
	'	(string) - message with/without placeholders
	'	(string) - log type
	'
	public sub write(byVal message, byVal tp)
	end sub
 
	' Property: Priorities
	'
	' Scripting.Dictionary holding available log priorities. The built-in
	' priorities are the same available at BSD syslog <http://tools.ietf.org/html/rfc3164>.
	'
	' Contains:
	'
	'	(Scripting.Dictionary) - Built-in priorities
	'
	' Built-in values:
	'
	'	(EMERG)  - Emergency: system is unusable. Priority 0
	'	(ALERT)  - Alert: action must be taken immediately. Priority 1
	'	(CRIT)   - Critical: critical conditions. Priority 2
	'	(ERROR)  - Error: error conditions. Priority 3
	'	(WARN)   - Warning: warning conditions. Priority 4
	'	(NOTICE) - Notice: normal but significant condition. Priority 5
	'	(INFO)   - Informational: informational messages. Priority 6
	'	(DEBUG)  - Debug: debug messages. Priority 7
	'
	public Priorities
 
	' Function: isAcceptable
	'
	' Check with Filters if a message can be logged.
	'
	' Parameters:
	'
	'	(string) - message
	'	(string) - type
	'
	' Returns:
	'
	'	(boolean) - true, if acceptable; false, otherwise
	'
	public function isAcceptable(byVal message, byVal tp)
		isAcceptable = true
		dim filter, kind
		for each filter in [_ℱ].items()
			if(not isArray(filter)) then
				Err.raise 5, "Evolved AXE runtime error", "Invalid procedure call or argument. Invalid filter."
			end if
 
			kind = lcase(typename(filter(0)))
			if( instr(kind, "regexp") > 0 ) then
				isAcceptable = filter(0).test(message)
			elseif( kind = "integer" ) then
				isAcceptable = [_compare](Priorities(tp), filter(0) , filter(1))
			elseif( kind = "string" ) then
				isAcceptable = false
				dim i : for i = 0 to ubound(filter)
					if( tp = filter(i) ) then isAcceptable = true
				next
			end if
		next
	end function
 
	' Property: classType
	'
	' Class type.
	'
	' Contains:
	'
	'	(string) - type
	'
	public property get classType
		classType = typename(Me)
	end property
 
	' Property: classVersion
	'
	' Class version.
	'
	' Contains:
	'
	'	(string) - version in terms of http://semver.org/#semantic-versioning-200
	'
	public property get classVersion
		classVersion = "2.0.0"
	end property
 
' --[ Inheritance ]-------------------------------------------------------------
 
	public property get requireds
		requireds = Parent.requireds
	end property
 
	public function check(byRef Implementation)
		check = Parent.check(Implementation)
	end function
 
' --[ Private section ]---------------------------------------------------------
 
	' Property: [_ℱ]
	'
	' {private} Filters blocks a message from being written to the log.
	'
	' Contains:
	'
	'	(Scripting.Dictionary) - filters
	'
	private [_ℱ]
 
	private Parent
 
	private sub Class_initialize()
		set Parent = new Interface
		Parent.requireds = array("addFilter", "write")
 
		set Priorities = Server.createObject("Scripting.Dictionary")
		with Priorities
			.add "EMERG",  0
			.add "ALERT",  1
			.add "CRIT",   2
			.add "ERROR",  3
			.add "WARN",   4
			.add "NOTICE", 5
			.add "INFO",   6
			.add "DEBUG",  7
		end with
 
		set [_ℱ] = Server.createObject("Scripting.Dictionary")
	end sub
 
	private sub Class_terminate()
		set [_ℱ] = nothing
		set Priorities = nothing
		set Parent = nothing
	end sub
 
	' Function: [_compare]
	'
	' {private} Compares two numbers by an order operator.
	'
	' Parameters:
	'
	'	(number) - left side of comparison
	'	(number) - right side of comparison
	'	(string) - operator
	'
	' Returns:
	'
	'	(boolean) - true, if the comparison is true; false, otherwise
	'
	private function [_compare](byVal a, byVal b, byVal op)
		if( op = ">" or op = "gt" ) then
			[_compare] = ( a > b )
		elseif( op = ">=" or op = "ge" ) then
			[_compare] = ( a >= b )
		elseif( op = "=" or op = "==" or op = "eq" ) then
			[_compare] = ( a = b )
		elseif( op = "!=" or op = "<>" or op = "ne" ) then
			[_compare] = ( a <> b )
		elseif( op = "<=" or op = "le" ) then
			[_compare] = ( a <= b )
		elseif( op = "<" or op = "lt" ) then
			[_compare] = ( a < b )
		else
			Err.raise 5, "Evolved AXE runtime error", "Invalid procedure call or argument. Invalid operator."
		end if
	end function
 
end class
 
%>