代码提交

This commit is contained in:
2025-07-17 23:00:52 +08:00
parent 7400f85c88
commit 3d3fe0cd96
17 changed files with 149 additions and 564 deletions

View File

@@ -15,18 +15,52 @@ spring:
multipart:
max-file-size: 1024MB
max-request-size: 10240MB
threads:
virtual:
enabled: true
somkit:
upload:
path:
windows: D://data/install/upload
linux: /mnt/files
db:
rocks:
path:
windows: D://RocksDB//fmt
linux: /usr/local/rocksdb/fmt
column-family: default
logging:
config: classpath:logback-spring.xml
config: classpath:logback-spring.xml
metona:
cache:
# 缓存类型,支持以下类型:
# - CONCURRENT_HASH_MAP: 基于 ConcurrentHashMap 的线程安全缓存
# - WEAK_HASH_MAP: 基于 WeakHashMap 的弱引用缓存
# - LINKED_HASH_MAP: 基于 LinkedHashMap 的 LRU 缓存
type: LINKED_HASH_MAP
# 缓存的初始容量,默认值为 16
initial-capacity: 128
# 缓存的最大容量,当缓存条目数超过该值时,会根据策略移除旧条目
# 仅对 LINKED_HASH_MAP 类型有效
maximum-size: 2000
# 写入后过期时间(单位由 time-unit 指定)
# 默认值为 -1表示永不过期
expire-after-write: -1
# 访问后过期时间(单位由 time-unit 指定)
# 默认值为 -1表示永不过期
expire-after-access: -1
# 时间单位,支持以下值:
# - NANOSECONDS: 纳秒
# - MICROSECONDS: 微秒
# - MILLISECONDS: 毫秒(默认)
# - SECONDS: 秒
# - MINUTES: 分钟
# - HOURS: 小时
# - DAYS: 天
time-unit: MILLISECONDS
# 是否记录缓存统计信息(如命中率、加载次数等)
# 默认值为 false
record-stats: true

View File

@@ -9,7 +9,7 @@
<level>DEBUG</level>
</filter>
<filter class="cn.somkit.fmt.filter.LogStashFilter">
<level>DEBUG</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>

View File

@@ -40,6 +40,12 @@ class LogMonitorAdaptive {
enableFontSize: true, // 是否提供“字体大小 +/-”按钮
enableWordWrap: true, // 是否提供“换行/不换行”切换按钮
/* --- 暂停/继续 的回调函数 --- */
onTogglePause: () => {},
/* --- 创建完成 的回调函数 --- */
onCreated: () => {},
...opts
};
@@ -59,6 +65,11 @@ class LogMonitorAdaptive {
this.initDOM();
this.bindResize();
this.bindGlobalEvents();
//执行回调函数
if(this.cfg.onCreated && typeof this.cfg.onCreated === 'function'){
this.cfg.onCreated();
}
}
/* ------------------------ 初始化 ------------------------ */
@@ -332,6 +343,10 @@ class LogMonitorAdaptive {
this.pauseBtn.style.backgroundColor = this.isPaused
? (this.cfg.theme === 'dark' ? '#d32f2f' : '#ff5252')
: (this.cfg.theme === 'dark' ? '#444' : '#e7e7e7');
//执行回调函数
if(this.cfg.onTogglePause && typeof this.cfg.onTogglePause === 'function'){
this.cfg.onTogglePause(this.isPaused);
}
}
toggleTheme() {

View File

@@ -15,9 +15,8 @@
<body>
<!-- 日志容器 -->
<div id="logContainer"></div>
<script th:src="@{/common/js/basic.js}" type="text/javascript" charset="utf-8"></script>
<script th:src="@{/common/js/LogMonitorAdaptive.js}" type="text/javascript" charset="utf-8"></script>
<script th:src="@{/common/js/sockjs.js}" type="text/javascript" charset="utf-8"></script>
<script th:src="@{/common/js/stomp.js}" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" th:inline="javascript" charset="utf-8">
window.onload = () => {
const logger = new LogMonitorAdaptive('#logContainer', {
@@ -35,16 +34,24 @@
enableWordWrap: true,
showTimestamp: true, // 是否显示时间戳
showLevel: true, // 是否显示日志级别标签
});
const socket = new SockJS('/fmt/ws-logs');
const stomp = Stomp.over(socket);
stomp.connect({}, () => {
stomp.subscribe('/topic/logs', (payload) => {
const log = JSON.parse(payload.body);
console.log(log);
logger.log(log.message, log.level);
});
//暂停/继续 回调函数
onTogglePause: (isPaused) => {
console.log(isPaused ? '暂停' : '继续');
},
onCreated: () => {
console.log('日志容器已创建');
let index = setInterval(() => {
const options = {
url: Fmt.ctx() + '/logging/get',
data: {},
method: 'post'
};
Fmt.axios(options).then((result) => {
console.log(result);
logger.log(result.message, result.level);
}).catch((err) => clearInterval(index));
}, 500);
}
});
}
</script>

View File

@@ -33,7 +33,7 @@
<span class="ax-line"></span>
</div>
<div class="ax-item">
<a th:href="@{/logging/index}" class="ax-text">在线日志</a>
<a th:href="@{/logging/index}" target="_blank" class="ax-text">在线日志</a>
<span class="ax-line"></span>
</div>
</div>