java.util.logger-FileHandler未创建文件,因此Logger可以写入文件

时间:2018-08-13 20:25:31

标签: java eclipse ubuntu logging java.util.logging

我正在创建Java Logger,并尝试在控制台中将其写入文件中。

控制台部分工作正常,但从未创建文件。我希望文件存在于目标文件夹中。

我正在使用具有Eclipse IDE的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 个答案:

答案 0 :(得分:0)

改为尝试:

$form->field()

要为每个Java类创建一个新的记录器,只需创建一个新的echo $form->field($model, 'date', [ 'options' => [ 'class' => 'form-group has-icon has-label' ], 'inputOptions' => [ 'class' => 'form-control' ], 'template' => '{label}{input}<span class="form-control-icon"><i class="fa fa-map-marker"></i></span>{error}' ])->widget(yii\jui\DatePicker::class, [ 'id' => 'created_at', 'options' => [ 'placeholder' => 'Airport or Anywhere' ] ]); 。此外,您还应该为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 ); } } 写一些其他功能,例如CukeLogs,以建立到实际CukeLogs的接口。

此外,'leaving', 'log', 'info'的想法是,当您要将Logger更改为另一个框架时,可以封装Logger以获得更大的灵活性。因此,最好为每个Java类创建一个具有自己名称的记录器。

否则,使用静态最终Logger创建Logger并没有实际意义

答案 1 :(得分:0)

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方法除了在类Inner的情况下调用innerDoSomething方法外,没有做任何其他事情。