zoukankan      html  css  js  c++  java
  • Java log code example

    Java log example

    1. Logrecord filter

    import java.util.logging.Filter;

    import java.util.logging.Level;

    import java.util.logging.LogRecord;

    import java.util.logging.Logger;

    public class SimpleFilter {

      private static Logger logger = Logger.getLogger("SimpleFilter");

      static class Duck {

      };

      static class Wombat {

      };

      static void sendLogMessages() {

        logger.log(Level.WARNING, "Aduck in the house!", new Duck());

        logger.log(Level.WARNING, "A Wombat at large!", newWombat());

      }

      public static void main(String[] args) {

        sendLogMessages();

        logger.setFilter(newFilter() {

          public boolean isLoggable(LogRecord record){

            Object[] params = record.getParameters();

            if (params == null)

              return true; // No parameters

            if (record.getParameters()[0]instanceof Duck)

              return true; // Only log Ducks

            return false;

          }

        });

        logger.info("After setting filter..");

        sendLogMessages();

      }

    }

    Output:

    Aug 28,2013 11:46:04 AM SimpleFilter sendLogMessages

    WARNING:A duck in the house!

    Aug 28,2013 11:46:04 AM SimpleFilter sendLogMessages

    WARNING:A Wombat at large!

    Aug 28,2013 11:46:04 AM SimpleFilter main

    INFO:After setting filter..

    Aug 28,2013 11:46:04 AM SimpleFilter sendLogMessages

    WARNING:A duck in the house!

    注:重写isLoggable方法可以对logrecord对象进行过滤。

    2. Simple for Formatter Example

    import java.util.logging.ConsoleHandler;

    import java.util.logging.Formatter;

    import java.util.logging.Handler;

    import java.util.logging.LogRecord;

    import java.util.logging.Logger;

    public class SimpleFormatterExample {

      private static Logger logger = Logger.getLogger("SimpleFormatterExample");

      private static void logMessages() {

        logger.info("Line One");

        logger.info("Line Two");

      }

      public static void main(String[] args) {

        logger.setUseParentHandlers(false);

        Handler conHdlr = new ConsoleHandler();

        conHdlr.setFormatter(new Formatter() {

          public String format(LogRecord record) {

            return record.getLevel() + "  : "

                + record.getSourceClassName() + " -:- "

                + record.getSourceMethodName() + " -:- "

                + record.getMessage() + " ";

          }

        });

        logger.addHandler(conHdlr);

        logMessages();

      }

    }

    Output:

    INFO  : SimpleFormatterExample -:- logMessages -:- Line One

    INFO  : SimpleFormatterExample -:- logMessages -:- Line Two

    注:可以对输出的log格式进行特定格式化。

    3. Format log output by overriding tostring()function,

    import java.util.logging.Level;

    import java.util.logging.LogRecord;

    public class PrintableLogRecord extends LogRecord {

      public PrintableLogRecord(Level level, String str) {

        super(level, str);

      }

      public StringtoString() {

        String result = "Level<" + getLevel() + "> " + "LoggerName<"

            + getLoggerName() + "> " + "Message<" + getMessage() + "> "

            + "CurrentMillis<" + getMillis() + "> " + "Params";

        Object[] objParams = getParameters();

        if (objParams == null)

          result += "<null> ";

        else

          for (int i =0; i < objParams.length; i++)

            result += "  Param # <" + i + " value "

                + objParams[i].toString() + "> ";

        result += "ResourceBundle<" + getResourceBundle()

            + "> ResourceBundleName<" + getResourceBundleName()

            + "> SequenceNumber<" + getSequenceNumber()

            + "> SourceClassName<" + getSourceClassName()

            + "> SourceMethodName<" + getSourceMethodName()

            + "> ThreadId<" + getThreadID() + "> Thrown<" +getThrown()

            + ">";

        return result;

      }

      public static void main(String[] args) {

        PrintableLogRecord logRecord = new PrintableLogRecord(Level.FINEST,

            "SimpleLog Record");

        System.out.println(logRecord);

      }

    }

    Output:

    Level<FINEST>

    LoggerName<null>

    Message<SimpleLog Record>

    CurrentMillis<1377662640451>

    Params<null>

    ResourceBundle<null>

    ResourceBundleName<null>

    SequenceNumber<0>

    SourceClassName<null>

    SourceMethodName<null>

    ThreadId<10>

    Thrown<null>

     

    4.  email log

    import java.util.logging.*;
    import java.io.*;
    import java.util.Properties;
    import javax.mail.*;
    import javax.mail.internet.*;

    public class EmailLogger {
      private static Logger logger = Logger.getLogger("EmailLogger");
      public static void main(String[] args) throws Exception {
        logger.setUseParentHandlers(false);
        Handler conHdlr = new ConsoleHandler();
        conHdlr.setFormatter(new Formatter() {
          public String format(LogRecord record) {
            return record.getLevel() + "  :  "
              + record.getSourceClassName() + ":"
              + record.getSourceMethodName() + ":"
              + record.getMessage() + " ";
          }
        });
        logger.addHandler(conHdlr);
        logger.addHandler(
          new FileHandler("EmailLoggerOutput.xml"));
        logger.addHandler(new MailingHandler());
        logger.log(Level.INFO,
          "Testing Multiple Handlers""SendMailTrue");
      }
    }

    // A handler that sends mail messages
    class MailingHandler extends Handler {
      public void publish(LogRecord record) {
        Object[] params = record.getParameters();
        if(params == nullreturn;
        // Send mail only if the parameter is true
        if(params[0].equals("SendMailTrue")) {
          new MailInfo("bruce@theunixman.com",
            new String[] { "bruce@theunixman.com" },
            "smtp.theunixman.com""Test Subject",
            "Test Content").sendMail();
        }
      }
      public void close() {}
      public void flush() {}
    }

    class MailInfo {
      private String fromAddr;
      private String[] toAddr;
      private String serverAddr;
      private String subject;
      private String message;
      public MailInfo(String from, String[] to,
        String server, String subject, String message) {
        fromAddr = from;
        toAddr = to;
        serverAddr = server;
        this.subject = subject;
        this.message = message;
      }
      public void sendMail() {
        try {
          Properties prop = new Properties();
          prop.put("mail.smtp.host", serverAddr);
          Session session =
            Session.getDefaultInstance(prop, null);
          session.setDebug(true);
          // Create a message
          Message mimeMsg = new MimeMessage(session);
          // Set the from and to address
          Address addressFrom = new InternetAddress(fromAddr);
          mimeMsg.setFrom(addressFrom);
          Address[] to = new InternetAddress[toAddr.length];
          for(int i = 0; i < toAddr.length; i++)
            to[i] = new InternetAddress(toAddr[i]);
          mimeMsg.setRecipients(Message.RecipientType.TO,to);
          mimeMsg.setSubject(subject);
          mimeMsg.setText(message);
          Transport.send(mimeMsg);
        catch (Exception e) {
          throw new RuntimeException(e);
        }
      }
    }

  • 相关阅读:
    JDBC 处理sql查询多个不确定参数
    网页跳转方法总结
    图片上传,直接在网页中显示(支持IE,谷歌,火狐浏览器)
    Oracle报 ORA-00054资源正忙的解决办法
    js对cookie的操作:读、写、删
    认识SignalR
    sql 查询结果用逗号分隔到一列里
    异步编程之await的使用
    应用程序池
    判断list重复扩展方法
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3290015.html
Copyright © 2011-2022 走看看