-
Notifications
You must be signed in to change notification settings - Fork 1
DevFaqAddTimestampToLogs
This FAQ entry demonstrates how to prepend a timestamp to your log file entries. For example:
05:42:51.210 CONFIG [com.emxsys.wmt.core.project.GlobalActionContextProxy]: Creating a proxy ....
05:42:51.295 WARNING [org.openide.filesystems.Ordering]: Not all children in ....
05:42:52.151 INFO [org.netbeans.core.startup.NbEvents]: Turning on modules: ....
The NetBeans Platform includes its own logging mechanism. If you customize the logging through the use of the java.util.logging.config.file or java.util.logging.config.class property settings, then the native NetBeans logging mechanism is completely disabled, and either the default Java logging or your custom logging class is used instead.
This solution shows how to customize the output from the native NetBeans log formatter (NbFormatter) by creating a new custom formatter that by prepends a timestamp to the log messages. Note, using NbFormatter requires a private package reference to the org-netbeans-core-startup module. This FAQ will also show how to establish the private package access.
Include the a dependency on org-netbeans-core-startup in the project that will implement the custom formatter. In Maven, add following entry to the project POM:
<dependency>
<!--Private Package References: see maven plugin dependencies ...-->
<artifactId>org-netbeans-core-startup</artifactId>
<groupId>org.netbeans.modules</groupId>
<version>${netbeans.version}</version>
</dependency>
Here’s an example of a custom Formatter. It uses the NetBeans NbFormatter instance to obtain a formatted message from the LogRecord. NbFormatter is a final class that exposes itself via a public static FORMATTER property. This solution simply prepends a timestamp, extracted from the LogRecord, to the formatted log message.
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import org.netbeans.core.startup.logging.NbFormatter; // Private Package Referenced: See POM notes.
public class LogFormatter extends Formatter {
@Override
public String format(LogRecord record) {
String logMsg = NbFormatter.FORMATTER.format(record);
StringBuilder sb = new StringBuilder();
// Prepend a timestamp
Instant instant = Instant.ofEpochMilli(record.getMillis());
ZonedDateTime timestamp = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
sb.append(timestamp.toLocalTime.toString());
sb.append(' ');
sb.append(logMsg);
return sb.toString();
}
}
In a module Installer class, include the following code block in the restored method to replace the default formatters with the custom formatter:
public class Installer extends ModuleInstall {
@Override
public void restored() {
// Override the default formatters with the custom formatter
LogFormatter formatter = new LogFormatter(); // Custom formatter
Logger logger = Logger.getLogger (""); // Root logger
Handler[] handlers = logger.getHandlers();
for (Handler handler : handlers) {
handler.setFormatter(formatter);
}
}
}
In the project’s POM, edit the nbm-maven-plugin configuration to allow private package access to org.netbeans.modules:org-netbeans-core-startup via an impl module dependency, for example:
<plugin>
<artifactId>nbm-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<extensions>true</extensions>
<configuration>
<moduleDependencies>
<dependency>
<!--Private Package Reference-->
<id>org.netbeans.modules:org-netbeans-core-startup</id>
<type>impl</type>
</dependency>
</moduleDependencies>
</configuration>
</plugin>
To leverage the NetBeans logging, you must disable any java.util.logging.config.file or java.util.logging.config.class property settings. Check your application’s .conf file, and, in the application’s POM, check the additionalArguments entry.
<hr/>
This example was tested with NetBeans 8.0 and JDK 8.
The content in this page was kindly donated by Oracle Corp. to the Apache Software Foundation.
This page was exported from http://wiki.netbeans.org/DevFaqAddTimestampToLogs , that was last modified by NetBeans user Bdschubert on 2014-06-21T13:31:08Z.
NOTE: This document was automatically converted to the AsciiDoc format on 2018-01-26, and needs to be reviewed.
Apache NetBeans is an effort undergoing incubation at The Apache Software Foundation (ASF).
Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects.
While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
This wiki is an experiment pending Apache NetBeans Community approval.