X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=srcjar_unused%2Forg%2Fapache%2Flog4j%2Fnt%2FNTEventLogAppender.java;fp=srcjar_unused%2Forg%2Fapache%2Flog4j%2Fnt%2FNTEventLogAppender.java;h=9f80addfcba734d4107b73716a252c1fe566ec0e;hb=4f30214e8098748469c6a4269ac2ed6c5750e4b0;hp=0000000000000000000000000000000000000000;hpb=9dabc02511e3a334a5749a504f57f69d6c9017bd;p=jalview.git diff --git a/srcjar_unused/org/apache/log4j/nt/NTEventLogAppender.java b/srcjar_unused/org/apache/log4j/nt/NTEventLogAppender.java new file mode 100644 index 0000000..9f80add --- /dev/null +++ b/srcjar_unused/org/apache/log4j/nt/NTEventLogAppender.java @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.log4j.nt; + +import org.apache.log4j.AppenderSkeleton; +import org.apache.log4j.Layout; +import org.apache.log4j.TTCCLayout; +import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.spi.LoggingEvent; + + +/** + Append to the NT event log system. + +
WARNING This appender can only be installed and used on a + Windows system. + +
Do not forget to place NTEventLogAppender.dll,
+ NTEventLogAppender.amd64.dll, NTEventLogAppender.ia64.dll
+ or NTEventLogAppender.x86.dll as appropriate in a
+ directory that is on the PATH of the Windows system. Otherwise, you
+ will get a java.lang.UnsatisfiedLinkError.
+
+ @author Chris Taylor
+ @author Jim Cakalic */
+public class NTEventLogAppender extends AppenderSkeleton {
+ private int _handle = 0;
+
+ private String source = null;
+ private String server = null;
+
+
+ public NTEventLogAppender() {
+ this(null, null, null);
+ }
+
+ public NTEventLogAppender(String source) {
+ this(null, source, null);
+ }
+
+ public NTEventLogAppender(String server, String source) {
+ this(server, source, null);
+ }
+
+ public NTEventLogAppender(Layout layout) {
+ this(null, null, layout);
+ }
+
+ public NTEventLogAppender(String source, Layout layout) {
+ this(null, source, layout);
+ }
+
+ public NTEventLogAppender(String server, String source, Layout layout) {
+ if (source == null) {
+ source = "Log4j";
+ }
+ if (layout == null) {
+ this.layout = new TTCCLayout();
+ } else {
+ this.layout = layout;
+ }
+
+ try {
+ _handle = registerEventSource(server, source);
+ } catch (Exception e) {
+ e.printStackTrace();
+ _handle = 0;
+ }
+ }
+
+ public
+ void close() {
+ // unregister ...
+ }
+
+ public
+ void activateOptions() {
+ if (source != null) {
+ try {
+ _handle = registerEventSource(server, source);
+ } catch (Exception e) {
+ LogLog.error("Could not register event source.", e);
+ _handle = 0;
+ }
+ }
+ }
+
+
+ public void append(LoggingEvent event) {
+
+ StringBuffer sbuf = new StringBuffer();
+
+ sbuf.append(layout.format(event));
+ if(layout.ignoresThrowable()) {
+ String[] s = event.getThrowableStrRep();
+ if (s != null) {
+ int len = s.length;
+ for(int i = 0; i < len; i++) {
+ sbuf.append(s[i]);
+ }
+ }
+ }
+ // Normalize the log message level into the supported categories
+ int nt_category = event.getLevel().toInt();
+
+ // Anything above FATAL or below DEBUG is labeled as INFO.
+ //if (nt_category > FATAL || nt_category < DEBUG) {
+ // nt_category = INFO;
+ //}
+ reportEvent(_handle, sbuf.toString(), nt_category);
+ }
+
+
+ public
+ void finalize() {
+ deregisterEventSource(_handle);
+ _handle = 0;
+ }
+
+ /**
+ The Source option which names the source of the event. The
+ current value of this constant is Source.
+ */
+ public
+ void setSource(String source) {
+ this.source = source.trim();
+ }
+
+ public
+ String getSource() {
+ return source;
+ }
+
+/**
+ The NTEventLogAppender
requires a layout. Hence,
+ this method always returns true
. */
+ public
+ boolean requiresLayout() {
+ return true;
+ }
+
+ native private int registerEventSource(String server, String source);
+ native private void reportEvent(int handle, String message, int level);
+ native private void deregisterEventSource(int handle);
+
+ static {
+ String[] archs;
+ try {
+ archs = new String[] { System.getProperty("os.arch")};
+ } catch(SecurityException e) {
+ archs = new String[] { "amd64", "ia64", "x86"};
+ }
+ boolean loaded = false;
+ for(int i = 0; i < archs.length; i++) {
+ try {
+ System.loadLibrary("NTEventLogAppender." + archs[i]);
+ loaded = true;
+ break;
+ } catch(java.lang.UnsatisfiedLinkError e) {
+ loaded = false;
+ }
+ }
+ if (!loaded) {
+ System.loadLibrary("NTEventLogAppender");
+ }
+}
+}