दिलचस्प पोस्ट
तत्व केन्द्रित नहीं रहेगा, खासकर जब स्क्रीन फिर से आकार देना क्या मैं सी में चार ** argv या char * argv का उपयोग करना चाहिए? उपयोगकर्ता द्वारा पुश नोटिफिकेशन सक्षम किए जाने पर iPhone पर निर्धारित करें एक्सएमएल पैकेज का उपयोग करते हुए आर डेटा फ्रेम में स्क्रैपिंग HTML टेबल कैसे बहुलक क्षुधा में एक मुख्य समारोह को लागू करने के लिए .NET मेमोरी प्रोफाइलिंग उपकरण रिकॉर्ड से एचटीएमएल टैग निकालें क्या जावास्क्रिप्ट में गतिशील स्कॉपिंग को हासिल करने के लिए संभव है? टर्नेरी ऑपरेटर को एक इंटरपोलेटेड स्ट्रिंग के अंदर कैसे उपयोग करें? टिक लेबल पाठ को संशोधित करें जावा में कीवर्ड "यह" का प्रयोग करना जावास्क्रिप्ट में एक कुंजीपटल घटना को फ़ायरिंग क्यों ContentResolver.requestSync एक समन्वयन को ट्रिगर नहीं करता? कैसपरज का उपयोग करते हुए एक्सएचआर प्रतिक्रियाओं से डेटा को कैसे पकड़ और संसाधित कर सकता हूं? एकल उद्धरण HTML में अनुमति है?

Java.util.logging.Logger का उपयोग करते समय लॉग फ़ाइल को कैसे लिखना है

मेरे पास ऐसी स्थिति है जिसमें मैं एक पाठ फ़ाइल में लिखने के लिए मेरे द्वारा बनाए गए सभी लॉग लिखना चाहता हूं

हम लॉग्स बनाने के लिए java.util.logging.Logger API का उपयोग कर रहे हैं।

मैंने कोशिश की

private static Logger logger = Logger.getLogger(className.class.getName()); FileHandler fh; fh = new FileHandler("C:/className.log"); logger.addHandler(fh); 

लेकिन अभी भी मेरे लॉग को केवल कंसोल पर मिल रहा है ….

वेब के समाधान से एकत्रित समाधान "Java.util.logging.Logger का उपयोग करते समय लॉग फ़ाइल को कैसे लिखना है"

इस नमूने की कोशिश करो इससे मेरा काम बनता है।

 public static void main(String[] args) { Logger logger = Logger.getLogger("MyLog"); FileHandler fh; try { // This block configure the logger with handler and formatter fh = new FileHandler("C:/temp/test/MyLogFile.log"); logger.addHandler(fh); SimpleFormatter formatter = new SimpleFormatter(); fh.setFormatter(formatter); // the following statement is used to log any messages logger.info("My first log"); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } logger.info("Hi How ru?"); } 

MyLogFile.log पर उत्पादन का उत्पादन करता है

 Apr 2, 2013 9:57:08 AM testing.MyLogger main INFO: My first log Apr 2, 2013 9:57:08 AM testing.MyLogger main INFO: Hi How ru? 

संपादित करें:

कंसोल हैंडलर को हटाने के लिए, उपयोग करें

 logger.setUseParentHandlers(false); 

चूंकि कंसोलहैंडलर अभिभावक लॉगर से पंजीकृत है जिसमें से सभी लॉगर निकाले जाते हैं।

सबसे पहले, आपने अपने लॉगर को कैसे परिभाषित किया था और किस क्लास से इसे कॉल करने की कोशिश की थी? ताजा बेक किया हुआ काम उदाहरण है:

 public class LoggingTester { private final Logger logger = Logger.getLogger(LoggingTester.class .getName()); private FileHandler fh = null; public LoggingTester() { //just to make our log file nicer :) SimpleDateFormat format = new SimpleDateFormat("M-d_HHmmss"); try { fh = new FileHandler("C:/temp/test/MyLogFile_" + format.format(Calendar.getInstance().getTime()) + ".log"); } catch (Exception e) { e.printStackTrace(); } fh.setFormatter(new SimpleFormatter()); logger.addHandler(fh); } public void doLogging() { logger.info("info msg"); logger.severe("error message"); logger.fine("fine message"); //won't show because to high level of logging } } 

आपके कोड में आप फ़ॉर्मेटर को परिभाषित करना भूल गए, यदि आपको एक सरल आवश्यकता है तो आप इसे ऊपर बताए अनुसार कर सकते हैं, लेकिन एक अन्य विकल्प है, आप इसे स्वयं प्रारूपित कर सकते हैं, एक उदाहरण है (इस लाइन के बजाय इसे डालें .setFormatter (नया SimpleFormatter ()) निम्न कोड):

 fh.setFormatter(new Formatter() { @Override public String format(LogRecord record) { SimpleDateFormat logTime = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); Calendar cal = new GregorianCalendar(); cal.setTimeInMillis(record.getMillis()); return record.getLevel() + logTime.format(cal.getTime()) + " || " + record.getSourceClassName().substring( record.getSourceClassName().lastIndexOf(".")+1, record.getSourceClassName().length()) + "." + record.getSourceMethodName() + "() : " + record.getMessage() + "\n"; } }); 

या आप जो चाहें, कोई अन्य संशोधन आशा करता हूँ की ये काम करेगा।

जावा के लिए नामित एक अच्छा लाइब्रेरी log4j है ।
यह कई सुविधा प्रदान करेगा लिंक के माध्यम से जाओ और आप अपने समाधान मिल जाएगा

 int SIZE = "<intialize-here>" int ROTATIONCOUNT = "<intialize-here>" Handler handler = new FileHandler("test.log", SIZE, LOG_ROTATIONCOUNT); logger.addHandler(handler); // for your code.. // you can also set logging levels Logger.getLogger(this.getClass().getName()).log(Level.[...]).addHandler(handler); 
 import java.io.IOException; import org.apache.log4j.Appender; import org.apache.log4j.FileAppender; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; /** * @author Kiran * */ public class MyLogger { public MyLogger() { } public static void main(String[] args) { Logger logger = Logger.getLogger("MyLog"); Appender fh = null; try { fh = new FileAppender(new SimpleLayout(), "MyLogFile.log"); logger.addAppender(fh); fh.setLayout(new SimpleLayout()); logger.info("My first log"); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } logger.info("Hi How ru?"); } } 

हो सकता है कि आपको यही चाहिए …

 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; /** * LogToFile class * This class is intended to be use with the default logging class of java * It save the log in an XML file and display a friendly message to the user * @author Ibrabel <ibrabel@gmail.com> */ public class LogToFile { protected static final Logger logger=Logger.getLogger("MYLOG"); /** * log Method * enable to log all exceptions to a file and display user message on demand * @param ex * @param level * @param msg */ public static void log(Exception ex, String level, String msg){ FileHandler fh = null; try { fh = new FileHandler("log.xml",true); logger.addHandler(fh); switch (level) { case "severe": logger.log(Level.SEVERE, msg, ex); if(!msg.equals("")) JOptionPane.showMessageDialog(null,msg, "Error", JOptionPane.ERROR_MESSAGE); break; case "warning": logger.log(Level.WARNING, msg, ex); if(!msg.equals("")) JOptionPane.showMessageDialog(null,msg, "Warning", JOptionPane.WARNING_MESSAGE); break; case "info": logger.log(Level.INFO, msg, ex); if(!msg.equals("")) JOptionPane.showMessageDialog(null,msg, "Info", JOptionPane.INFORMATION_MESSAGE); break; case "config": logger.log(Level.CONFIG, msg, ex); break; case "fine": logger.log(Level.FINE, msg, ex); break; case "finer": logger.log(Level.FINER, msg, ex); break; case "finest": logger.log(Level.FINEST, msg, ex); break; default: logger.log(Level.CONFIG, msg, ex); break; } } catch (IOException | SecurityException ex1) { logger.log(Level.SEVERE, null, ex1); } finally{ if(fh!=null)fh.close(); } } public static void main(String[] args) { /* Create simple frame for the example */ JFrame myFrame = new JFrame(); myFrame.setTitle("LogToFileExample"); myFrame.setSize(300, 100); myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myFrame.setLocationRelativeTo(null); JPanel pan = new JPanel(); JButton severe = new JButton("severe"); pan.add(severe); JButton warning = new JButton("warning"); pan.add(warning); JButton info = new JButton("info"); pan.add(info); /* Create an exception on click to use the LogToFile class */ severe.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent ae) { int j = 20, i = 0; try { System.out.println(j/i); } catch (ArithmeticException ex) { log(ex,"severe","You can't divide anything by zero"); } } }); warning.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent ae) { int j = 20, i = 0; try { System.out.println(j/i); } catch (ArithmeticException ex) { log(ex,"warning","You can't divide anything by zero"); } } }); info.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent ae) { int j = 20, i = 0; try { System.out.println(j/i); } catch (ArithmeticException ex) { log(ex,"info","You can't divide anything by zero"); } } }); /* Add the JPanel to the JFrame and set the JFrame visible */ myFrame.setContentPane(pan); myFrame.setVisible(true); } } 

लॉग फ़ाइल का स्थान लॉगिंग.प्रॉपर्टीज़ फ़ाइल के द्वारा नियंत्रित किया जा सकता है। और इसे java -Djava.util.logging.config.file=/scratch/user/config/logging.properties पैरामीटर के रूप में पारित किया जा सकता है: java -Djava.util.logging.config.file=/scratch/user/config/logging.properties

विवरण: https://docs.oracle.com/cd/E23549_01/doc.1111/e14568/handler.htm

फ़ाइल हैंडलर को कॉन्फ़िगर करना

किसी फ़ाइल में लॉग भेजने के लिए, फ़ाइलहरणकर्ता को लॉगिंग.प्रॉपर्टीज़ फ़ाइल में हैंडलर्स प्रॉपर्टी में जोड़ें। यह विश्व स्तर पर फाइल लॉगिंग को सक्षम करेगा

handlers= java.util.logging.FileHandler निम्न गुणों को सेट करके हेन्डलर को कॉन्फ़िगर करें:

 java.util.logging.FileHandler.pattern=<home directory>/logs/oaam.log java.util.logging.FileHandler.limit=50000 java.util.logging.FileHandler.count=1 java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter 

java.util.logging.FileHandler.pattern आउटपुट फाइल के स्थान और पैटर्न को निर्दिष्ट करता है। डिफ़ॉल्ट सेटिंग आपकी होम डायरेक्टरी है

java.util.logging.FileHandler.limit निर्दिष्ट करता है, बाइट्स में, अधिकतम राशि जो लॉगर किसी एक फाइल को लिखते हैं।

java.util.logging.FileHandler.count निर्दिष्ट करता है कि कितने आउटपुट फाइलें चक्र के माध्यम से चलती हैं।

java.util.logging.FileHandler.formatter java.util.logging formatter वर्ग निर्दिष्ट करता है कि फ़ाइल हैंडलर वर्ग लॉग संदेशों को फ़ॉर्मेट करने के लिए उपयोग करता है। सरलफॉर्मर लॉग अभिलेखों के संक्षिप्त "मानव-पठनीय" सारांश को लिखता है

$ JDK_HOME / jre / lib / logging.properties के बजाय इस विन्यास फाइल का उपयोग करने के लिए जावा को निर्देशित करने के लिए:

 java -Djava.util.logging.config.file=/scratch/user/config/logging.properties 

स्वीकृत उत्तर के आधार पर यहां मेरा लॉगिंग क्लास है:

 import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*; public class ErrorLogger { private Logger logger; public ErrorLogger() { logger = Logger.getAnonymousLogger(); configure(); } private void configure() { try { String logsDirectoryFolder = "logs"; Files.createDirectories(Paths.get(logsDirectoryFolder)); FileHandler fileHandler = new FileHandler(logsDirectoryFolder + File.separator + getCurrentTimeString() + ".log"); logger.addHandler(fileHandler); SimpleFormatter formatter = new SimpleFormatter(); fileHandler.setFormatter(formatter); } catch (IOException exception) { exception.printStackTrace(); } addCloseHandlersShutdownHook(); } private void addCloseHandlersShutdownHook() { Runtime.getRuntime().addShutdownHook(new Thread(() -> { // Close all handlers to get rid of empty .LCK files for (Handler handler : logger.getHandlers()) { handler.close(); } })); } private String getCurrentTimeString() { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); return dateFormat.format(new Date()); } public void log(Exception exception) { logger.log(Level.SEVERE, "", exception); } }