Skip to content
This repository was archived by the owner on May 16, 2025. It is now read-only.

Commit 81a88bc

Browse files
authored
Merge pull request #366 from metafacture/319-log
Add log function
2 parents 019ad48 + ad73aa2 commit 81a88bc

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,24 @@ include("<path>"[, <dynamicLocalVariables>...])
168168

169169
[Java Code](https://github.com/search?type=code&q=repo:metafacture/metafacture-fix+path:FixMethod.java+"+include+{")
170170

171+
##### `log`
172+
173+
Sends a message to the logs.
174+
175+
Parameters:
176+
177+
- `logMessage` (required): Message to log.
178+
179+
Options:
180+
181+
- `level`: Log level to log at (one of `DEBUG`, `INFO`, `WARN` or `ERROR`). (Default: `INFO`)
182+
183+
```perl
184+
log("<logMessage>"[, level: "<logLevel>"])
185+
```
186+
187+
[Java Code](https://github.com/search?type=code&q=repo:metafacture/metafacture-fix+path:FixMethod.java+"+log+{")
188+
171189
##### `nothing`
172190

173191
Does nothing. It is used for benchmarking in Catmandu.

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ subprojects {
4949
'mockito': '2.27.0',
5050
'requirejs': '2.3.6',
5151
'slf4j': '1.7.21',
52+
'slf4j_mock': '2.3.0',
5253
'wiremock': '2.33.2',
5354
'xtext': '2.26.0'
5455
]

metafix/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525
testImplementation "org.eclipse.xtext:org.eclipse.xtext.xbase.testing:${versions.xtext}"
2626
testImplementation "org.junit.jupiter:junit-jupiter-api:${versions.junit_jupiter}"
2727
testImplementation "org.junit.platform:junit-platform-launcher:${versions.junit_platform}"
28+
testImplementation "org.simplify4u:slf4j2-mock:${versions.slf4j_mock}"
2829

2930
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${versions.junit_jupiter}"
3031

metafix/src/main/java/org/metafacture/metafix/FixMethod.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
import org.metafacture.metamorph.functions.URLEncode;
2525
import org.metafacture.metamorph.maps.FileMap;
2626

27+
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
29+
2730
import java.io.File;
2831
import java.io.IOException;
2932
import java.util.Arrays;
@@ -62,6 +65,34 @@ public void apply(final Metafix metafix, final Record record, final List<String>
6265
metafix.getRecordTransformer(includePath).transform(record, options);
6366
}
6467
},
68+
log {
69+
@Override
70+
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
71+
// does not support Catmandu log level option FATAL
72+
73+
final String level = options.getOrDefault("level", "INFO");
74+
final Consumer<String> consumer;
75+
76+
switch (level) {
77+
case "DEBUG":
78+
consumer = LOG::debug;
79+
break;
80+
case "ERROR":
81+
consumer = LOG::error;
82+
break;
83+
case "INFO":
84+
consumer = LOG::info;
85+
break;
86+
case "WARN":
87+
consumer = LOG::warn;
88+
break;
89+
default:
90+
throw new IllegalArgumentException("Unsupported log level: " + level);
91+
}
92+
93+
consumer.accept(params.get(0));
94+
}
95+
},
6596
nothing {
6697
@Override
6798
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
@@ -691,4 +722,6 @@ public void apply(final Metafix metafix, final Record record, final List<String>
691722

692723
private static final Random RANDOM = new Random();
693724

725+
private static final Logger LOG = LoggerFactory.getLogger(FixMethod.class);
726+
694727
}

metafix/src/test/java/org/metafacture/metafix/MetafixScriptTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.mockito.Mock;
2727
import org.mockito.Mockito;
2828
import org.mockito.junit.jupiter.MockitoExtension;
29+
import org.slf4j.Logger;
2930

3031
import java.io.IOException;
3132
import java.util.Arrays;
@@ -45,6 +46,9 @@ public class MetafixScriptTest {
4546
private static final String CSV_MAP = "src/test/resources/org/metafacture/metafix/maps/test.csv";
4647
private static final String TSV_MAP = "src/test/resources/org/metafacture/metafix/maps/test.tsv";
4748

49+
@Mock(name = "org.metafacture.metafix.FixMethod")
50+
private Logger fixMethodLogger;
51+
4852
@Mock
4953
private StreamReceiver streamReceiver;
5054

@@ -193,6 +197,29 @@ public void shouldPutExternalFileMapWithNameAndOptions() {
193197
assertMap("put_filemap('" + TSV_MAP + "', '" + MAP_NAME + "', sep_char: '\t')", MAP_NAME);
194198
}
195199

200+
@Test
201+
public void shouldLog() {
202+
assertFix("log('test')", f -> {
203+
Mockito.verify(fixMethodLogger).info("test");
204+
Mockito.verifyNoMoreInteractions(fixMethodLogger);
205+
});
206+
}
207+
208+
@Test
209+
public void shouldLogWithLevel() {
210+
assertFix("log('test', level: 'DEBUG')", f -> {
211+
Mockito.verify(fixMethodLogger).debug("test");
212+
Mockito.verifyNoMoreInteractions(fixMethodLogger);
213+
});
214+
}
215+
216+
@Test
217+
public void shouldNotLogWithUnsupportedLevel() {
218+
MetafixTestHelpers.assertProcessException(IllegalArgumentException.class, "Unsupported log level: FATAL", () ->
219+
assertFix("log('test', level: 'FATAL')", f -> { })
220+
);
221+
}
222+
196223
@Test
197224
public void shouldDoNothing() {
198225
assertFix("nothing()", f -> { });

0 commit comments

Comments
 (0)