Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
0b0577ea
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0b0577ea
编写于
8月 22, 2019
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
browse session logs
上级
df8220e0
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
76 addition
and
2 deletion
+76
-2
src/vs/workbench/contrib/logs/common/logs.contribution.ts
src/vs/workbench/contrib/logs/common/logs.contribution.ts
+5
-1
src/vs/workbench/contrib/logs/common/logsActions.ts
src/vs/workbench/contrib/logs/common/logsActions.ts
+71
-1
未找到文件。
src/vs/workbench/contrib/logs/common/logs.contribution.ts
浏览文件 @
0b0577ea
...
...
@@ -8,7 +8,7 @@ import { join } from 'vs/base/common/path';
import
{
Registry
}
from
'
vs/platform/registry/common/platform
'
;
import
{
IWorkbenchActionRegistry
,
Extensions
as
WorkbenchActionExtensions
}
from
'
vs/workbench/common/actions
'
;
import
{
SyncActionDescriptor
}
from
'
vs/platform/actions/common/actions
'
;
import
{
SetLogLevelAction
,
OpenLogsFolderAction
}
from
'
vs/workbench/contrib/logs/common/logsActions
'
;
import
{
SetLogLevelAction
,
OpenLogsFolderAction
,
OpenSessionLogFileAction
}
from
'
vs/workbench/contrib/logs/common/logsActions
'
;
import
*
as
Constants
from
'
vs/workbench/contrib/logs/common/logConstants
'
;
import
{
IWorkbenchContribution
,
IWorkbenchContributionsRegistry
,
Extensions
as
WorkbenchExtensions
}
from
'
vs/workbench/common/contributions
'
;
import
{
IWorkbenchEnvironmentService
}
from
'
vs/workbench/services/environment/common/environmentService
'
;
...
...
@@ -46,6 +46,10 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution {
private
registerWebContributions
():
void
{
Registry
.
as
<
IOutputChannelRegistry
>
(
OutputExt
.
OutputChannels
).
registerChannel
({
id
:
Constants
.
rendererLogChannelId
,
label
:
nls
.
localize
(
'
rendererLog
'
,
"
Window
"
),
file
:
this
.
environmentService
.
logFile
,
log
:
true
});
this
.
instantiationService
.
createInstance
(
LogsDataCleaner
);
const
workbenchActionsRegistry
=
Registry
.
as
<
IWorkbenchActionRegistry
>
(
WorkbenchActionExtensions
.
WorkbenchActions
);
const
devCategory
=
nls
.
localize
(
'
developer
'
,
"
Developer
"
);
workbenchActionsRegistry
.
registerWorkbenchAction
(
new
SyncActionDescriptor
(
OpenSessionLogFileAction
,
OpenSessionLogFileAction
.
ID
,
OpenSessionLogFileAction
.
LABEL
),
'
Developer: Open Log File (Session)...
'
,
devCategory
);
}
private
registerNativeContributions
():
void
{
...
...
src/vs/workbench/contrib/logs/common/logsActions.ts
浏览文件 @
0b0577ea
...
...
@@ -9,8 +9,13 @@ import { join } from 'vs/base/common/path';
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
IWindowsService
}
from
'
vs/platform/windows/common/windows
'
;
import
{
ILogService
,
LogLevel
,
DEFAULT_LOG_LEVEL
}
from
'
vs/platform/log/common/log
'
;
import
{
IQuickInputService
}
from
'
vs/platform/quickinput/common/quickInput
'
;
import
{
IQuickInputService
,
IQuickPickItem
}
from
'
vs/platform/quickinput/common/quickInput
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
IWorkbenchEnvironmentService
}
from
'
vs/workbench/services/environment/common/environmentService
'
;
import
{
dirname
,
basename
,
isEqual
}
from
'
vs/base/common/resources
'
;
import
{
IEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
startsWith
}
from
'
vs/base/common/strings
'
;
export
class
OpenLogsFolderAction
extends
Action
{
...
...
@@ -73,3 +78,68 @@ export class SetLogLevelAction extends Action {
return
undefined
;
}
}
export
class
OpenSessionLogFileAction
extends
Action
{
static
ID
=
'
workbench.action.openSessionLogFile
'
;
static
LABEL
=
nls
.
localize
(
'
openSessionLogFile
'
,
"
Open Log File (Session)...
"
);
constructor
(
id
:
string
,
label
:
string
,
@
IWorkbenchEnvironmentService
private
readonly
environmentService
:
IWorkbenchEnvironmentService
,
@
IFileService
private
readonly
fileService
:
IFileService
,
@
IQuickInputService
private
readonly
quickInputService
:
IQuickInputService
,
@
IEditorService
private
readonly
editorService
:
IEditorService
,
)
{
super
(
id
,
label
);
}
async
run
():
Promise
<
void
>
{
const
sessionResult
=
await
this
.
quickInputService
.
pick
(
this
.
getSessions
().
then
(
sessions
=>
sessions
.
map
((
s
,
index
)
=>
(
<
IQuickPickItem
>
{
id
:
s
.
toString
(),
label
:
basename
(
s
),
description
:
index
===
0
?
nls
.
localize
(
'
current
'
,
"
Current
"
)
:
undefined
}))),
{
canPickMany
:
false
,
placeHolder
:
nls
.
localize
(
'
sessions placeholder
'
,
"
Select Session
"
)
});
if
(
sessionResult
)
{
const
logFileResult
=
await
this
.
quickInputService
.
pick
(
this
.
getLogFiles
(
URI
.
parse
(
sessionResult
.
id
!
)).
then
(
logFiles
=>
logFiles
.
map
(
s
=>
(
<
IQuickPickItem
>
{
id
:
s
.
toString
(),
label
:
startsWith
(
basename
(
s
),
'
window
'
)
?
nls
.
localize
(
'
window
'
,
"
Window
"
)
:
basename
(
s
)
}))),
{
canPickMany
:
false
,
placeHolder
:
nls
.
localize
(
'
log placeholder
'
,
"
Select Log file
"
)
});
if
(
logFileResult
)
{
return
this
.
editorService
.
openEditor
({
resource
:
URI
.
parse
(
logFileResult
.
id
!
)
}).
then
(()
=>
undefined
);
}
}
}
private
async
getSessions
():
Promise
<
URI
[]
>
{
const
logsPath
=
URI
.
file
(
this
.
environmentService
.
logsPath
).
with
({
scheme
:
this
.
environmentService
.
logFile
.
scheme
});
const
result
:
URI
[]
=
[
logsPath
];
const
stat
=
await
this
.
fileService
.
resolve
(
dirname
(
logsPath
));
if
(
stat
.
children
)
{
result
.
push
(...
stat
.
children
.
filter
(
stat
=>
!
isEqual
(
stat
.
resource
,
logsPath
)
&&
stat
.
isDirectory
&&
/^
\d{8}
T
\d{6}
$/
.
test
(
stat
.
name
))
.
sort
()
.
reverse
()
.
map
(
d
=>
d
.
resource
));
}
return
result
;
}
private
async
getLogFiles
(
session
:
URI
):
Promise
<
URI
[]
>
{
const
stat
=
await
this
.
fileService
.
resolve
(
session
);
if
(
stat
.
children
)
{
return
stat
.
children
.
filter
(
stat
=>
!
stat
.
isDirectory
).
map
(
stat
=>
stat
.
resource
);
}
return
[];
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录