Serilog.Sinks.RichTextBox.Wpf
์๋
ํ์ธ์! ๊ฐ๋ฐ์ ์ด์ฌ์
์
๋๋ค.
์ฌ๋ฌ๋ถ์ ๋ก๊ทธ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๊ณ ๊ณ์ ๊ฐ์?
์๋ง ์ผ๋ฐ์ ์ผ๋ก ์ง์ ๊ตฌํ์ ํ๊ฑฐ๋ ์ ๋ขฐ ์๋ ๋ก๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ๊ณ์ค ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ ๋ถ๋ค์ด ์ฌ์ฉํ๋ Serilog๋ ๋น์ฃผ์ผ ์ ์ผ๋ก ์ข ๋ ์ฌ๋ฏธ์๊ฒ ํ์ฉํ ์ ์๋ ํ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
WPF์์ RichTextBox๋ฅผ ์ฌ์ฉํ ๋ชจ์ตโฆ
(๋ง์น ์ฝ์ ๊ฐ์ฃ ?)
์ฌ์ฉ ๋ฐฉ๋ฒ
์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์ฃผ ์ฌํํฉ๋๋ค. ๋จผ์ Serilog.Sinks.RichTextBox.Wpf ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
Install-Package Serilog.Sinks.RichTextBox.Wpf -Prerelease
(๋๋ Nuget์ ํตํด ์ค์น)
1. RichTextBox ์ปจํธ๋กค ์์ฑ
์๋์ ๊ฐ์ด ํ๋ฒํ RichTextBox๋ฅผ ์ค๋นํฉ๋๋ค.
<RichTextBox x:Name="MyRichTextBox"
Background="Black"
Foreground="LightGray"
FontFamily="Cascadia Mono, Consolas, Courier New, monospace"
VerticalScrollBarVisibility="Auto"/>
2. RichTextBox ์ปจํธ๋กค ์ฐ๊ฒฐ
Serilog์์ ๋์ RichTextBox์ผ๋ก ๋ก๊ทธ๋ฅผ ์ ๋ฌํด์ค ์ ์๋๋ก ์๋์ ๊ฐ์ด ์ฐ๊ฒฐํฉ๋๋ค.
Log.Logger = new LoggerConfiguration()
.WriteTo.RichTextBox(MyRichTextBox)
.CreateLogger();
3. Serilog ์ฌ์ฉ
RichTextBox๋ฅผ ๋ฑ๋กํ๊ณ ๋์ ์์ ๋กญ๊ฒ ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
public partial class JamesWindow : Window
{
public JamesWindow()
{
InitializeComponent();
Log.Logger = new LoggerConfiguration()
.WriteTo.RichTextBox(MyRichTextBox)
.CreateLogger();
Log.Information("InitializeComponent {0}", this.GetHashCode());
Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Log.Information("MainWindow_Loaded {0}", this);
}
}
๋์ผ๋กโฆ
๊ทธ๋ฆฌ๊ณ ์ด ํ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ญ์ GitHub ์คํ์์ค๋ฅผ ํตํด ์ ๊ณต๋๊ณ ์์ต๋๋ค.
๋ด๋ถ์ ์ธ RichTextBox ์ฒ๋ฆฌ๊ฐ ๊ถ๊ตผํ์ ๋ถ์ ์๋ ๋ ํฌ์งํฐ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํด๋ณด์๊ธธ ๋ฐ๋๋๋ค!!
์ ๊ฐ ์ค๋นํ ๋ด์ฉ์ ์ฌ๊ธฐ๊น์ง ์
๋๋ค.
์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.