我正在使用一些吐出以下日志文件的软件:
{"message":"logger controller initialised","@timestamp":"2018-09-15T09:33:25.709+01:00","logger_name":"com.hidden.controller.LoggerController","thread_name":"JavaFX Application Thread","level":"DEBUG"}
{"message":"parsing history log data to display","@timestamp":"2018-09-15T09:33:25.877+01:00","logger_name":"com.hidden.controller.LoggerController","thread_name":"JavaFX Application Thread","level":"DEBUG"}
当我尝试使用Gson将这个json文件解析为LogRowModel []时,它会围绕json的格式吐出各种错误,例如:
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
我使用logback / logstash json编码器使用以下设置编写我的文件:
<configuration>
<timestamp key="time" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/>
<appender name="RootSiftAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<Key>test</Key>
<DefaultValue>logfile</DefaultValue>
</discriminator>
<sift>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>src\\main\\resources\\${test}.json</File>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<message/>
<timestamp/>
<loggerName/>
<threadName/>
<logLevel/>
</providers>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>${test_name}.%i.json</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>100</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>50MB</MaxFileSize>
</triggeringPolicy>
</appender>
</sift>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%n %d{HH:mm:ss} %thread %level %logger{0} %msg</pattern>
</encoder>
</appender>
<root level="RootSiftAppender">
<appender-ref ref="RootSiftAppender"/>
</root>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
如何将我的json文件解析为以下数组:
@Data
@Slf4j
public class LogRowModel {
@JsonProperty("@timestamp") private final String timestamp;
@JsonProperty("message") private final String message;
@JsonProperty("logger_name") private final String logger;
@JsonProperty("level") private final String level;
@JsonProperty("thread_name") private final String thread;
}
这是我当前的代码,它抛出了错误(我假设错误在于json格式,让我不知道如何更好地格式化它)
Type collectionType = new TypeToken<Collection<LogRowModel>>(){}.getType();
Collection<LogRowModel> enums = new Gson().fromJson(new FileReader(new File("src/main/resources/logfile.json")), collectionType);
或者如何以更好的json数组格式生成记录器输出?
谢谢。