DevFaqAddTimestampToLogs

(Difference between revisions)
m
 
(8 intermediate revisions not shown)
Line 1: Line 1:
-
DevFaqAddTimestampToLogs
+
==How Do I Add a Timestamp to the Logs?==
-
 
+
-
Friday, June 20, 2014
+
-
5:34 AM
+
-
 
+
-
==How do I Add a Timestamp to the Logs?==
+
This FAQ entry demonstrates how to prepend a timestamp to your log file entries. For example:
This FAQ entry demonstrates how to prepend a timestamp to your log file entries. For example:
Line 14: Line 9:
</pre>
</pre>
-
Please note, 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 disabled, and either the default Java logging or your custom logging class is used instead.
+
===Caveats===
 +
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.
===Solution===
===Solution===
-
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 ''NbFormatter'' output.  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.
+
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.
==== Step 1. Establish Project Dependencies====
==== Step 1. Establish Project Dependencies====
   
   
-
Include the a dependency on '''org-netbeans-core-startup''' in the project that will implement the custom formatter. In Maven, add following dependency to the project POM:
+
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:
<source lang="xml">
<source lang="xml">
Line 32: Line 28:
</dependency>
</dependency>
</source>
</source>
-
 
==== Step 2. Create the Custom Log Formatter====
==== Step 2. Create the Custom Log Formatter====
-
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 the timestamp, extracted from the LogRecord, to the formatted log message.  
+
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.  
<source lang="java">
<source lang="java">
Line 66: Line 61:
====Step 3. Override the Default Formatters====
====Step 3. Override the Default Formatters====
-
In a module Installer class, include the following code block:
+
In a module ''Installer'' class, include the following code block in the restored method to replace the default formatters with the custom formatter:
-
 
+
<source lang="java">
<source lang="java">
-
LogFormatter formatter = new LogFormatter(); // Custom formatter
+
public class Installer extends ModuleInstall {
-
// Override the default formatters with the custom formatter
+
-
Logger logger = Logger.getLogger ("");      // Root logger
+
-
Handler[] handlers = logger.getHandlers();
+
-
for (Handler handler : handlers) {
+
-
    handler.setFormatter(formatter);
+
-
}
+
-
</source>
+
 +
    @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);
 +
        }
 +
    }
 +
}
 +
</source>
====Step 4. Configure Access to Private Package====
====Step 4. Configure Access to Private Package====
-
In the module POM, configure the '''nbm-maven-plugin''' dependencies to allow the private package access to '''org.netbeans.modules:org-netbeans-core-startup''' via a ''''impl'''' module dependency:
+
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:
<source lang="xml">
<source lang="xml">
Line 103: Line 103:
===Final Notes===
===Final Notes===
-
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.
+
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.
 +
 
 +
----
This example was tested with NetBeans 8.0 and JDK 8.
This example was tested with NetBeans 8.0 and JDK 8.

Current revision as of 13:31, 21 June 2014

Contents

How Do I Add a Timestamp to the Logs?

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: ....

Caveats

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.

Solution

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.

Step 1. Establish Project Dependencies

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>

Step 2. Create the Custom Log Formatter

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();
    }
}

Step 3. Override the Default Formatters

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);
        }
    }
}

Step 4. Configure Access to Private Package

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>

Final Notes

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.


This example was tested with NetBeans 8.0 and JDK 8.

Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo