Запись в локальный файл в Flex

#flex3 #flash

#flex3 #flash

Вопрос:

Интерфейс моего приложения разработан в Flex 3. Для ведения журнала мы иногда используем трассировки и Logger, но у нас нет определенного способа хранить журналы в локальном файле на компьютере пользователя.

На самом деле, чему я научился у Adobe livedocs, так это тому, что flashplayer сам управляет всеми входами в систему flashlog.txt файл.

Есть ли какой-либо другой способ, которым я могу сохранить копию журналов? flashlog.txt очищается каждый раз, когда мы выполняем «Выход».

Комментарии:

1. Опытные люди, пожалуйста, помогите мне решить эту проблему.

Ответ №1:

Вы не указали, является ли ваше приложение настольным приложением или браузерным.

В случае настольного приложения вы можете написать новый класс,

 import mx.core.mx_internal; 
use namespace mx_internal;

public class LoggingFileTarget extends LineFormattedTarget {
        private const DEFAULT_LOG_PATH:String = "C:/mylogfile.txt";

        private var log:File;

        public function LoggingFileTarget(logFile:File = null) {
            if(logFile != null) {
                log = logFile;
            } else {
                log = new File(DEFAULT_LOG_PATH);
            }
        }

        public function get logURI():String {
            return log.url;
        }

        mx_internal override function internalLog(message:String):void {
            write(message);
        }           

        private function write(msg:String):void {               
            var fs:FileStream = new FileStream();
            try {
                fs.open(log, FileMode.APPEND);
                fs.writeUTFBytes(msg   "n");
                fs.close();
            } catch(e:Error) {
                trace("FATAL:: Unable to write to log file.");
            }
        }

        public function clear():void {
            var fs:FileStream = new FileStream();
            fs.open(log, FileMode.WRITE);
            fs.writeUTFBytes("");
            fs.close();                     
        }
    }
  

В случае приложения на основе браузера вы можете продолжать запись либо в строку в памяти, либо в локальный общий объект. Используя общий локальный объект, продолжайте добавлять к журналам, а затем выполняйте сопоставление с помощью веб-вызова.

Комментарии:

1. Означает ли это, что я должен сохранять строку в общем объекте, а затем продолжать отправлять ее на сервер через определенный интервал времени и очищать ее, поскольку общий объект также имеет ограничение по памяти?

2. Для приложения flex — да! Я видел, что именно такой подход используют многие приложения flex.

3. чтобы mx_internal override function internalLog() работать, я должен изменить его на override mx_internal function internalLog и добавить import mx.core.mx_internal; use namespace mx_internal; в заголовок класса

4. Спасибо @HoangHuynh — я обновил код, чтобы включить то же самое.