fix: 日志系统

This commit is contained in:
wangzhongjie 2025-06-19 14:10:26 +08:00
parent 6b6385fc43
commit 6470eb1280
8 changed files with 212 additions and 24 deletions

View File

@ -34,4 +34,10 @@ export const EntryTag = '[Entry]';
export const WorkerTag = '[Worker]';
//中心udp
export const CenterUdpTag = '[CenterUdpBusiness]'
export const CenterUdpTag = '[CenterUdpBusiness]'
//TerminalInfo
export const TerminalInfoTag = '[TerminalInfo]';
// CommonFile
export const CommonFileTag = '[CommonFile]';

View File

@ -17,4 +17,78 @@ export interface OtherMessageType {
export interface WorkerBackMessage {
type: string;
data: string | CenterCallBackMsgType
}
export interface LogWorkerMessage {
type: WorkerMessageType;
data?: string;
}
//枚举
export enum WorkerMessageType {
Log = 'log',
Error = 'error',
Warn = 'warn',
Info = 'info',
// 初始化 初始化文件夹到/mnt/hmdfs/100/account/device_view/local/files/duolun/logs/2024_10_12
Init = 'init',
// 初始化过程数据,初始化到人员以及人员里面各个目录
ProcessDataInit = 'processDataInit',
// 打开过程数据文件
OpenProcessDataFile = 'openProcessDataFile',
}
export interface LogPathType {
// log文件
log?: string
// error文件
error?: string
// 四合一原始数据
four_one_log_byte_data?: string;
// 四合一转换数据
four_one_log_data?: string;
// 评判数据
judge_exam_data?: string;
// 评判日志
judge_log_data?: string
// 评判事件回调日志
judge_progress_callback_data?: string;
// plc数据
plc_data?: string
// 无锡所数据
wuxi_exam_data?: string
// 无锡所过程轨迹数据
wuxi_progress_data?: string;
}
export interface LogFileFd {
// log文件
log?: number
// error文件
error?: number
// 四合一原始数据
four_one_log_byte_data?: number;
// 四合一转换数据
four_one_log_data?: number;
// 评判数据
judge_exam_data?: number;
// 评判日志
judge_log_data?: number
// 评判事件回调日志
judge_progress_callback_data?: number;
// plc数据
plc_data?: number
// 无锡所数据
wuxi_exam_data?: number
// 无锡所过程轨迹数据
wuxi_progress_data?: number;
}

View File

@ -2,7 +2,7 @@ import HeaderComponent from './compontents/Header';
import { CommonListType, EnvironmentConfigurationType } from '../model';
import common from '@ohos.app.ability.common';
import FileUtils from '../utils/FileUtils';
import { GlobalConfig } from '../config';
import { GlobalConfig, TerminalInfoTag } from '../config';
import ethernet from '@ohos.net.ethernet';
import { BusinessError } from '@ohos.base';
import Prompt from '@system.prompt';
@ -17,7 +17,7 @@ struct TerminalInfoPage {
async aboutToAppear() {
this.fileUtil = new FileUtils(this.context)
const data = await this.fileUtil.readFile(GlobalConfig.commonFileWriteAddress + '/config/ipConfig.txt');
console.log("data", data)
console.log(TerminalInfoTag, "data", data)
if (data) {
this.config = JSON.parse(data)
AppStorage.setOrCreate<EnvironmentConfigurationType>("EnvironmentConfiguration", this.config)
@ -194,7 +194,7 @@ struct TerminalInfoPage {
Row() {
Image($r('app.media.bc')).height(80).objectFit(ImageFit.Contain).onClick(() => {
console.log("保存配置", JSON.stringify(this.config))
console.log(TerminalInfoTag, "保存配置", JSON.stringify(this.config))
AppStorage.setOrCreate<EnvironmentConfigurationType>("EnvironmentConfiguration", this.config)
this.fileUtil.addFile(GlobalConfig.commonFileWriteAddress + '/config/ipConfig.txt', JSON.stringify(this.config))
ethernet.setIfaceConfig("eth0", {

View File

@ -1,4 +1,7 @@
import dayTs from './Date';
import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';
import { CommonFileTag } from '../config';
enum timeType {
fulltime = 1
@ -155,4 +158,47 @@ export function DeepClone<T extends Object>(target: T): T {
}
// 如果是原始值,则直接返回
return target;
}
/*
* 检查文件或目录是否存在
* @param path 文件或目录的路径
* @return 返回一个 Promise解析为 true 如果存在,否则为 false
*/
export function IsExit(path: string): Promise<boolean> {
return new Promise((resolve, reject) => {
try {
let res = fs.accessSync(path);
if (res) {
console.info(CommonFileTag, "file exists");
resolve(true);
} else {
console.info(CommonFileTag, "file not exists");
resolve(false);
}
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error(CommonFileTag, "accessSync failed with error message: " + err.message + ", error code: " + err.code);
reject(false);
}
});
}
/**
* 创建文件夹
* @param path 文件夹路径
* @return 返回一个 Promise解析为 true 如果创建成功,否则为 false
*/
export function CreateDir(path: string): Promise<boolean> {
return new Promise((resolve, reject) => {
try {
fs.mkdirSync(path);
console.info(CommonFileTag, "Directory created successfully");
resolve(true);
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error(CommonFileTag, "mkdirSync failed with error message: " + err.message + ", error code: " + err.code);
reject(false);
}
});
}

View File

@ -145,4 +145,5 @@ export default class FileUtils {
duration: 4000,
})
}
}
}

View File

@ -1,4 +1,10 @@
import dayTs from '../Date'
import worker from '@ohos.worker'
import { LogWorkerMessage, WorkerMessageType } from '../../model'
class logWorker {
private workerInstance = new worker.ThreadWorker("entry/ets/workers/Log.ets")
// 正常日志
log(msg: string) {
console.log(msg)
@ -18,6 +24,23 @@ class logWorker {
error(msg: string) {
console.error(msg)
}
// 初始化板子,需要判断duolun是否存在,不存在则创建
init() {
this.workerInstance = new worker.ThreadWorker("entry/ets/workers/Log.ets");
let data: LogWorkerMessage = {
type: WorkerMessageType.Init
}
this.workerInstance.postMessage(JSON.stringify(data))
}
// 过程数据初始化
processDataInit(carNo: string, name: string) {
let date = dayTs().format("YYYY_MM_DD_HH_mm_ss");
// 组装文件夹名 2025_06_18_09_14_36_2506474075216_371427200311275216_王宏伟
let folderName = `${date}_${carNo}_${name}`;
// 内部包含文件
}
}
export const dConsole = new logWorker();

View File

@ -1,30 +1,68 @@
import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker';
import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker';
import { GlobalConfig } from '../config';
import { LogFileFd, LogPathType, LogWorkerMessage, WorkerMessageType } from '../model';
import { CreateDir, IsExit } from '../utils/Common';
import dayTs from '../utils/Date';
const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
/**
* Defines the event handler to be called when the worker thread receives a message sent by the host thread.
* The event handler is executed in the worker thread.
*
* @param e message data
*/
workerPort.onmessage = (e: MessageEvents) => {
// 日志文件目录
let logPaths: LogPathType = {
log: `${GlobalConfig.commonFileWriteAddress}/logs/${dayTs().format("YYYY_MM_DD")}/log/log.log`,
error: `${GlobalConfig.commonFileWriteAddress}/logs/${dayTs().format("YYYY_MM_DD")}/log/error.log`,
}
let logFileFd: LogFileFd = {}
const result: LogWorkerMessage = JSON.parse(e.data);
if (result.type === WorkerMessageType.Init) {
Init()
}
if (result.type === WorkerMessageType.OpenProcessDataFile) {
OpenProcessDataFile(logPaths, logFileFd, result.data)
}
}
// 初始化
async function Init() {
// /mnt/hmdfs/100/account/device_view/local/files/duolun/logs/2024_10_12
// 创建duolun文件夹 /mnt/hmdfs/100/account/device_view/local/files/duolun
const basePath = GlobalConfig.commonFileWriteAddress;
const isExit = await IsExit(basePath);
if (!isExit) {
// 创建文件夹
await CreateDir(basePath)
}
// 创建logs文件夹/mnt/hmdfs/100/account/device_view/local/files/duolun/logs
let logPath = `${basePath}/logs`;
const logIsExit = await IsExit(logPath);
if (!logIsExit) {
// 创建logs文件夹
await CreateDir(logPath);
}
// 创建日期文件夹/mnt/hmdfs/100/account/device_view/local/files/duolun/logs/2024_10_12
let date = dayTs().format("YYYY_MM_DD");
const folderName = `${GlobalConfig.commonFileWriteAddress}/logs/${date}`;
const folderIsExit = await IsExit(folderName);
if (!folderIsExit) {
// 创建日期文件夹
await CreateDir(folderName);
}
// 创建log文件夹/mnt/hmdfs/100/account/device_view/local/files/duolun/logs/2024_10_12/log
const logFilePath = `${folderName}/log`;
const logDirIsExit = await IsExit(logFilePath);
if (!logDirIsExit) {
// 创建log文件夹
await CreateDir(logFilePath);
}
}
function OpenProcessDataFile(logPaths: LogPathType, logFileFd: LogFileFd, name: string) {
}
/**
* Defines the event handler to be called when the worker receives a message that cannot be deserialized.
* The event handler is executed in the worker thread.
*
* @param e message data
*/
workerPort.onmessageerror = (e: MessageEvents) => {
}
/**
* Defines the event handler to be called when an exception occurs during worker execution.
* The event handler is executed in the worker thread.
*
* @param e error message
*/
workerPort.onerror = (e: ErrorEvent) => {
}