You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As you can see file and line numbering of where the `log()` function is called appears in the log message which can be quite helpful
71
-
for debugging.
72
-
73
-
---
74
-
75
-
We also support many different logging levels which can be accomplished using the `error`, `debug_` (or the `dbg` alias), `info `(the default) and `warn`:
76
-
77
-
```d
78
-
Logger logger = new DefaultLogger();
79
-
80
-
// Create a default logger with the default joiner
You can also look into `logc(Context, string)` which allows you to use a `Context` object when logging, more information available in the [full API](https://dlog.dpldocs.info/v0.3.19/dlog.context.html).
80
+
You can see the [full API](https://dlog.dpldocs.info/v0.3.19/dlog.context.html) for more information.
106
81
107
82
### Custom loggers
108
83
@@ -112,64 +87,32 @@ Perhaps the default transformation, `DefaultTransform`, may not be what you want
112
87
messages or perhaps don't want the date-and-timestamp included at all. All of this can be up to you if you choose to implement your own
113
88
message transform.
114
89
115
-
You will need to start off with a class that inherits from the `MessageTransform` class and then which overrides the `transform` method as shown below:
90
+
You will need to start off with a class that inherits from the `Transform` class and then which overrides the `transform` method as shown below:
116
91
117
92
```d
118
93
import dlog;
119
94
120
-
public class CustomTranform : MessageTransform
95
+
public class CustomTranform : Transform
121
96
{
122
-
public override string transform(string text, Context context)
97
+
public override Message transform(Message message)
123
98
{
124
-
string transformed;
99
+
BasicMessage bmesg = cast(BasicMessage)message;
100
+
101
+
// Only handle BasicMessage(s) - ones which have `setText(string)`
102
+
if(bmesg is null)
103
+
{
104
+
return message;
105
+
}
125
106
126
-
/* Insert code to transform `text` and return the `transformed` text */
107
+
string transformed;
108
+
/* Insert transformation code here */
109
+
bmesg.setText(transformed);
127
110
128
-
return transformed;
111
+
return message;
129
112
}
130
113
}
131
114
```
132
115
133
-
Additional information, besides the text being logged itself (this is the `string text` argument), comes in the form of a `Context` object `context`. What one can get from this is a `CompilationInfo` struct which contains the following fields below if one calls `toArray()` on
134
-
it which will return a string array shown below (we refer to this array as `lineInfo`):
135
-
136
-
1.`lineInfo[0]`
137
-
* This contains `__FILE_FULL_PATH__` which is the full path (absolute) to the source file where `log()` was called
138
-
2.`lineInfo[1]`
139
-
* This contains `__FILE__` which is the path (starting at `source/` to the source file where `log()` was called
140
-
3.`lineInfo[2]`
141
-
* This contains a stringified version of `__LINE__` which is the line number of the call to `log()`
142
-
4.`lineInfo[3]`
143
-
* This contains `__MODULE__` which is the name of the module the call to `log()` appeared in
144
-
5.`lineInfo[4]`
145
-
* This contains `__FUNCTION__` which is the name of the function `log()` was called in
146
-
6.`lineInfo[5]`
147
-
* This contains `__PRETTY_FUNCTION__` which is the same as above but with type information
148
-
149
-
The point of a `Context` object is also such that a custom transformer may expect a kind-of `Context` like a custom one (i.e. `CustomContext`)
150
-
which perhaps a custom logger (kind-of `Logger`) can then have set certain fields in it.
151
-
152
-
## Creating a Logger
153
-
154
-
We now need to create a logger that makes use of our message transform, we can do so by creating an instance
155
-
of the `Logger` class and passing in our `MessageTransform` as so:
156
-
157
-
```d
158
-
Logger customLogger = new DefaultLogger(new CustomTranform());
159
-
```
160
-
161
-
The above is all one needs to be able to pull off a custom transformation.
162
-
163
-
### Custom Logger
164
-
165
-
Custom loggers can also be created by sub-classing the `Logger` class and overriding the `logImpl(string)` method.
166
-
The reason someone may want to do this is up to them. One easy to think of reason is to perhaps applying filtering
167
-
of messages to be logged and skip them (as this method is where the I/O of printing out the logs normally happens).
168
-
Another reason may be to log to a different data resource, the `DefaultLogger` writes to the file descriptor `0` (stdout),
169
-
but you may want to log over a socket connection to a remote machine for example, or perhaps do several pieces of
170
-
I/O for your logging. One can do that with a custom logger, you shoudl see `source/dlog/defaults.d` for the implementation
0 commit comments