ページ「システムエンジニア」と「Xamarin.MacでNLogを使う」の間の差分
(ページ間の差分)
ナビゲーションに移動
検索に移動
imported>Administrator 細 (Administrator がページ「Xamarin.Mac/NLogを使う」を「Xamarin.MacでNLogを使う」に移動しました) |
|||
1行目: | 1行目: | ||
− | + | [[Xamarin.Mac]]でも[[NLog]]を使えると捗る。 | |
− | == | + | ==実装1== |
− | + | [[Xamarin.Mac]]でも[[NLog]]はなんら問題なく使用できる。[[NuGet]]から一発[[インストール]]である。試してはいないが[[MonoMac]]でも同じだと思う。 | |
− | + | ただし[[ファイル]]に出力する場合に注意が必要で、[[Mac OS X]]ではあらゆる[[ファイル]]は[[アプリ]]の外部に保存する必要があるため、NLog.configファイルの設定例でよく見かける「basedir変数」以下に書き込む設定は使えない。 | |
− | == | + | ===ファイルに出力するNLog.configの設定例=== |
− | + | そこで以下の例では[[Mac OS X]]では定番の「~/Library/Logs/」以下に出力してみた。 | |
− | + | <source lang="xml"> | |
+ | <?xml version="1.0" encoding="utf-8" ?> | ||
+ | <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" | ||
+ | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" | ||
+ | autoReload="true" | ||
+ | throwExceptions="false" | ||
+ | internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" > | ||
− | + | <variable name="appname" value="monobook"/> | |
− | == | + | <targets> |
− | + | <target xsi:type="File" name="logfile" | |
+ | fileName="${specialfolder:folder=MyDocuments}/Library/Logs/${appname}/${shortdate}.log" | ||
+ | layout="${longdate} ${uppercase:${level}} ${message}" /> | ||
− | + | <target xsi:type="Console" name="console" /> | |
− | + | </targets> | |
− | |||
− | |||
− | |||
− | == 参考文献 == | + | <rules> |
+ | <logger name="*" minlevel="Trace" writeTo="logfile" /> | ||
+ | <logger name="*" minlevel="Info" writeTo="console" /> | ||
+ | </rules> | ||
+ | </nlog> | ||
+ | </source> | ||
+ | NLogに設定するパスは[[絶対パス]]なので、ホームディレクトリのパスの取得は「[[MonoMac/特殊ディレクトリのパスを取得する]]」を用いてMyDocumentsを指定することで取得した。 | ||
+ | |||
+ | また、NLog.config中でアプリ名を動的に取得する方法がわからなかったので、この例では自前でappname変数を用意している。 | ||
+ | |||
+ | ===備考=== | ||
+ | NLog.configは初期状態でビルド時にコピーされない設定になっていると思うので修正するのを忘れないこと。NLog.configファイルのプロパティの「出力ディレクトリにコピー」の値を「新しい場合のみコピー」または「常にコピー」に設定する。 | ||
+ | |||
+ | ===不具合=== | ||
+ | これは2015年8月3日の情報です。 | ||
+ | [[Xamarin.Mac]]において「Debugビルド」を行うとアプリ内(***.app内)のMonoBundleディレクトリにNLog.configファイルが生成(コピー)されるが、「Releaseビルド」では生成されないようだ。たぶん[[不具合]]だと思う。 | ||
+ | |||
+ | ==関連項目== | ||
+ | *[[MonoMac/特殊ディレクトリのパスを取得する]] | ||
+ | |||
+ | ==参考文献== | ||
{{reflist}} | {{reflist}} | ||
− | + | {{stub}} | |
− | + | [[category:Xamarin.Mac]] | |
+ | [[category:MonoMac]] |
2019年5月22日 (水) 05:13時点における最新版
Xamarin.MacでもNLogを使えると捗る。
実装1[編集 | ソースを編集]
Xamarin.MacでもNLogはなんら問題なく使用できる。NuGetから一発インストールである。試してはいないがMonoMacでも同じだと思う。
ただしファイルに出力する場合に注意が必要で、Mac OS Xではあらゆるファイルはアプリの外部に保存する必要があるため、NLog.configファイルの設定例でよく見かける「basedir変数」以下に書き込む設定は使えない。
ファイルに出力するNLog.configの設定例[編集 | ソースを編集]
そこで以下の例ではMac OS Xでは定番の「~/Library/Logs/」以下に出力してみた。
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" >
<variable name="appname" value="monobook"/>
<targets>
<target xsi:type="File" name="logfile"
fileName="${specialfolder:folder=MyDocuments}/Library/Logs/${appname}/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
<target xsi:type="Console" name="console" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>
</nlog>
NLogに設定するパスは絶対パスなので、ホームディレクトリのパスの取得は「MonoMac/特殊ディレクトリのパスを取得する」を用いてMyDocumentsを指定することで取得した。
また、NLog.config中でアプリ名を動的に取得する方法がわからなかったので、この例では自前でappname変数を用意している。
備考[編集 | ソースを編集]
NLog.configは初期状態でビルド時にコピーされない設定になっていると思うので修正するのを忘れないこと。NLog.configファイルのプロパティの「出力ディレクトリにコピー」の値を「新しい場合のみコピー」または「常にコピー」に設定する。
不具合[編集 | ソースを編集]
これは2015年8月3日の情報です。 Xamarin.Macにおいて「Debugビルド」を行うとアプリ内(***.app内)のMonoBundleディレクトリにNLog.configファイルが生成(コピー)されるが、「Releaseビルド」では生成されないようだ。たぶん不具合だと思う。