代码之家  ›  专栏  ›  技术社区  ›  snikt

java.util.logger-FileHandler不创建文件以便记录器可以对其进行写入

  •  0
  • snikt  · 技术社区  · 8 年前

    我正在创建一个Java记录器,并试图在控制台中写入到一个文件中。

    控制台部分工作正常,但文件永远不会被创建。我希望文件存在于目标文件夹中。

    我用的是带EclipseIDE的Ubuntu计算机。我已经授予rwx对目录中的文件夹/文件的所有权限,但该文件尚未创建,或者如果我手动创建它,则不会将其写入。

        public class CukeLogs {
    
        private static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
        FileHandler fileHandler = null;
    
        public CukeLogs() {
    
            LogManager.getLogManager().reset();
            logger.setLevel(Level.ALL);
    
            ConsoleHandler consoleHandler = new ConsoleHandler();
            consoleHandler.setLevel(Level.ALL);
            logger.addHandler(consoleHandler);
    
            try {
                fileHandler = new FileHandler("/home/ninad/Logs/CucumberLogs.log", true);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            fileHandler.setFormatter(new SimpleFormatter());
            fileHandler.setLevel(Level.ALL);
            logger.addHandler(fileHandler);
        }
    
        public static Logger getLogger() {
            return logger;
        }
    }
    
    ls -l -d /home /home/ninad /home/ninad/Logs /home/ninad/Logs/CucumberLogs.log
    drwxr-xr-x  4 root  root  4096 Aug 31  2017 /home
    drwxr-xr-x 73 ninad ninad 4096 Aug 14 20:17 /home/ninad
    drwxrwxrwx  2 ninad ninad 4096 Aug 13 20:53 /home/ninad/Logs
    -rwxrwxrwx  1 ninad ninad    0 Aug 13 19:57 /home/ninad/Logs/CucumberLogs.log
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Long Pollehn    8 年前

    请改为:

    import java.io.IOException;
    import java.util.logging.*;
    
    public class CukeLogs {
    
        private Logger logger;
    
        public CukeLogs(Logger logger) {
            this.logger = logger;
            logger.setLevel(Level.ALL);
            ConsoleHandler consoleHandler = new ConsoleHandler();
            consoleHandler.setLevel(Level.ALL);
            logger.addHandler(consoleHandler);
    
            try {
                Handler fileHandler = new FileHandler("src/cucumber.log", true);
                SimpleFormatter simple = new SimpleFormatter();
                fileHandler.setFormatter(simple);
                fileHandler.setLevel(Level.ALL);
                logger.addHandler(fileHandler);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 
         * @param className name of the class in which you want to create a logger
         * @return an encapsuled Logger
         */
        public static CukeLogs getLogger(String className) {
            return new CukeLogs(Logger.getLogger(className));
        }
    
        public void entering(String sourceClass, String sourceMethod){
            logger.entering(sourceClass, sourceMethod );
        }
    }
    

    要为每个java类创建一个新的记录器,只需创建一个新的 CukeLogs . 此外,您还应该为 小黄瓜 喜欢 'leaving', 'log', 'info' Logger .

    还有,关于 当您想将记录器更改为另一个框架时,可以封装记录器以获得更大的灵活性。因此,为每个java类创建一个具有自己名称的日志记录器是一个很好的实践。

    否则,创造 小黄瓜 使用静态最终记录器

        2
  •  0
  •   Long Pollehn    8 年前
    public class Outter{
           class Inner{
               void innerDoSomeThing(){
                    System.out.println("Do something");
                }
            }
    
           private Inner inner = new Inner();
           public Outer(){
    
           }
    
           public void outterDoSomething(){
                    inner.innerDoSomeThing();
           }
    }
    

    正如您所看到的,类Outter的outterDoSomething方法除了调用innerddosomething merhod(如果类是innerd的话)之外,没有其他类似的功能。